[부스트캠프 AI Tech 5기] Docker 입문

박상우·2023년 4월 24일
0

부스트캠프

목록 보기
43/53
post-thumbnail

Docker

가상화

  • 개발할 때, 서비스 운영에 사용하는 서버에 직접 들어가서 개발하지 않음
  • Local 에서 개발하고 완료되면 staging, production 서버에서 배포
  • Local과 Production 서버의 환경이 다른 경우 충돌이 발생
  • 다양한 설정을 README에 기록하고 항상 실행하도록 하지만, Human Error 발생 가능성이 높음
  • 서버 환경도 모두 소프트웨어 화 할 수 없을까? Like 밀키트
  • 가상화는 환경에서 사용하는 일종의 Template라고 할 수 있음

도커 등장 전

  • Virtual Machine 사용
  • 무겁다는 이슈가 있음
  • container는 VM의 무거움을 크게 줄여줌

Docker 소개

  • container 기술을 쉽게 사용할 수 있도록 나온 도구
  • 2013년 오픈소스로 등장
  • 컨테이너 기반 개발 및 운영을 확장
  • Docker 이미지로 만들어두고, 재부팅하면 Docker Image 상태로 실행

  • 도커를 통해 다른 사람들이 만든 소프트웨어를 가져와서 바로 사용할 수 있음
  • Linux, Window, Mac 어디서도 사용할 수 있음
  • 이미지를 만들면 공유 가능
  • Container Registry : 원격 저장소
  • docker hun 등

Docker 실습

https://www.docker.com/

  • 공식 홈페이지에서 다운로드
docker pull "이미지 이름:태그"
  • 이미지를 다운
docker images
  • 저장된 이미지 확인

docker run "이미지 이름:태그"
  • 컨테이너 실행
  • --name : 이름
  • -e : 환경 변수 설정
  • -d : 데몬 모드 (백 그라운드 형태로 실행 쉘을 꺼도 실행 가능)
  • -p : 포트 지정 (local host port : container port)
docker ps
  • 어떤 컨테이너가 실행되는지 확인

  • 다음 코드로 컨테이너에 진입 가능
  • 작동이 멈춘 컨테이너는 docker ps -a 명령어로 확인 가능
docker rm "컨테이너 이름" 
  • 멈춘 컨테이너를 삭제
  • -f 옵션으로 실행중인 컨테이너도 삭제 가능

  • 요 정도가 기본 명령어

Volume Mount

  • 컨테이너와 호스트는 연결이 안 되어있음 (파일 공유 불가)
  • 따라서 컨테이너를 삭제할 때 파일 사라짐
  • Volume Mount를 통해 연결 가능
  • -v 옵션을 사용하며,-p 처럼 사용 가능

  • 필요한 이미지는 dockerhub에서 오픈 소스를 찾아 실행하면 됨

Docker Image 만들기

  • 간단한 프로젝트 생성
  • Dockerfile라는 파일을 생성

  • 한 줄당 하나의 Layer라고 할 수 있음
From "이미지 이름: 태그" 
  • 이미지 빌드에 사용할 베이스 이미지를 지정 (보통 처음부터 만들지 않고, 이미 공개된 이미지를 기반으로 새로운 설정을 추가)
COPY "로컬 디렉토리" "컨테이너 내 디렉토리"
  • 컨테이너는 자체적인 파일 시스템과 디렉토리를 가짐
  • Copy 명령어는 dockerfile이 존재하는 경로 기ㅜㄴ 로컬 디렉토리를 컨테이너 내부의 디렉토리로 복사
  • 파일을 컨테이너에서 사용하려면 copy 명령어로 복사해야 함
WORKDIR "컨테이너 내 디렉토리"
  • Dockerfile의 여러 인자가 실행될 디렉토리 설정
ENV "환경변수 이름=값"
  • 컨테이너 내 환경 변수를 지정
  • 파이썬 애플리케이션의 경우 통상 위의 두 값을 지정
RUN "실행할 리눅스 명령어"
  • 컨테이너 내에서 리눅스 명령어를 실행
  • 명령어가 여러개 인 경우 && \ 로 이어줌
CMD ["실행할 명령어", "인자"]
  • docker run으로 이 이미지를 기반으로 컨테이너를 만들 때, 실행할 명령어
  • 이 이미지는 실행 즉시 python main.py를 실행할 것

이렇게 이미지를 다 만들었으면

  • 다음 코드로 이미지를 빌드 해야 함
  • build를 마치면 docker images 로 빌드한 이미지를 확인하자

총 정리

이후 도커 허브에서

docker login 
  • 계정을 CLI에 연동 후
docker tag "기존이미지:"태그" "내 계정 ID/이미지 이름:태그"
  • 다음을 통해 tag 변경
docker push "이미지 이름:태그"
  • Layer가 나오며 push가 됨
  • push한 이미지는 docker pull 명령어로 어디서든 받을 수 있음

  • 이미지와 컨테이너만 기억하자!
profile
세상아 덤벼라

0개의 댓글