컴퓨터를 여러 운영 체제를 실행할 수 있는 하드웨어 플랫폼으로 가상화하는 기술
VM들을 관리하는 Hypervisor를 통한 가상화 방법
Guest OS가 직접 호스트 하드웨어 자원을 사용하는 가상화 방법
커널에서 다수의 독립된 사용자 공간 인스턴스를 제공하도록 만드는 패러다임
소프트웨어 패키지를 컨테이너라는 개념으로 가상화하는 소프트웨어
dockerd
): 컨테이너나 네트워크 등의 Docker object들을 실질적으로 관리하는 프로세스컨테이너를 생성하는 명령을 작성해둔 템플릿
ubuntu
)Dockerfile
파일로 이미지를 생성할 수 있음Dockerfile
의 RUN
, COPY
, ADD
명령마다 Layer가 생성됨.dockerignore
: 이미지 빌드 시 취급되지 않을 파일들을 명시한 파일docker build
: 이미지 빌드Dockerfile
이 있는 경로)-f
: 대상으로 할 Dockerfile
의 경로 지정-t
: 이미지의 이름과 태그 설정 (name:tag
형식)docker images
: 이미지 목록 조회docker pull
: 레지스트리에서 이미지 다운로드docker push
: 이미지를 레지스트리로 업로드# syntax=docker/dockerfile:1
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
FROM
: Base Image 설정ARG
: 이미지 빌드 시 받을 인자 변수 선언RUN
: 명령어를 실행하고, 그 결과를 담은 Layer 생성ENTRIPOINT
: 컨테이너 시작 시 실행할 명령 지정CMD
: 컨테이너 시작 시 실행할 명령을 인자와 함께 지정ENTRYPOINT
와 달리, 컨테이너 시작 시 인자를 제공하면 미리 작성해둔 기본 인자를 대체할 수 있음ENTRYPOINT
와 함께 사용하면, 추가 인자 값으로써 사용됨EXPOSE
: 컨테이너가 listen할 port 명시ENV
: 컨테이너 내 환경 변수 설정ADD
: 로컬 혹은 원격 파일/디렉토리를 이미지의 파일 시스템에 추가COPY
: 로컬 파일/디렉토리를 이미지의 파일 시스템에 단순히 추가ADD
에 비해 단순한 작업을 위해 사용함VOLUME
: 컨테이너의 볼륨 마운트 지점 설정USER
: Dockerfile
명령 수행과 컨테이너 실행에 적용될 사용자 권한 지정WORKDIR
: Dockerfile
명령을 실행할 경로 지정 (RUN cd
와 같음)이미지를 실행한 인스턴스
docker run
: 컨테이너 생성-e
: 환경 변수 설정--expose
: 허용할 포트 명시--mount
: 파일 시스템 마운트 적용--name
: 컨테이너 이름 설정--net
: 연결할 네트워크 설정--restart
: Restart policy 설정--rm
: 이미 존재하는 컨테이너 자동으로 제거-u
: 사용자 권한 지정 (<name|uid>[:<group|gid>]
형식)--volume
: 볼륨 바인드docker stop
: 컨테이너 중지docker start
: 컨테이너 시작docker restart
: 컨테이너 재시작docker kill
: 컨테이너 종료(SIGKILL
)docker rm
: 컨테이너 제거-f
: 강제로 종료(SIGKILL
) 후 제거docker ps
: 컨테이너 목록 조회docker top
: 컨테이너 내 프로세스 확인docker logs
: 컨테이너 로그 확인-f
: 실시간 출력(follow)docker port
: 컨테이너의 포트 목록 조회컨테이너가 종료되거나 Docker가 재시작했을 때 컨테이너를 자동으로 다시 실행하는 기능
docker run
명령어의 --restart
플래그로 설정함no
: 재시작하지 않음 (기본)on-failure
: 에러 발생으로 인한 종료 시 재시작always
: 항상 재시작unless-stopped
: 수동적으로 중지하지 않은 이상 항상 재시작docker update
명령어로 실행 중인 컨테이너의 Restart policy를 수정할 수 있음컨테이너의 네트워크 통신을 격리하기 위한 개념
bridge
: 같은 브릿지 네트워크끼리만 통신할 수 있도록 하는 드라이버 (기본 값)bridge
)가 제공되나, 필요에 따라 새로 생성하는 것이 권장됨host
: Docker 호스트와의 네트워크 격리를 없애는 드라이버overlay
: 여러 개의 Docker 데몬과 연결하며, Swarm 서비스 간의 통신을 활성화하는 드라이버macvlan
: 컨테이너에 MAC 주소를 발급하여 네트워크에 물리 장비로 추가하는 드라이버none
: 모든 네트워크 통신을 비활성화하는 드라이버컨테이너의 파일 저장소를 격리하기 위한 개념
--volume
): 호스트의 파일 시스템 내 Docker가 관리하는 특정 경로에 저장함/var/lib/docker/volumes/
--mount
): 호스트의 파일 시스템 내 어디든 특정하여 마운트함--tmpfs
): 호스트의 메모리에 저장함컨테이너화된 애플리케이션들을 클라우드나 데이터센터에서 관리하고 배포, 확장하는 기술