Docker 구성 요소
- docker engine - docker를 이용한 애플리케이션 실행 환경 및 관리
- docker hub - docker image를 저장하고 공유하는 공식 public docker registry
- docker compose - 의존성있는 독립된 container에 대한 구성정보를 YAML 형식으로 작성하여 일원화된 애플리케이션 관리 도구
- docker swarm - 여러 docker host를 클러스터로 구축하여 관리할 수 있는 docker orchestration 도구
- docker registry - docker image 저장소, public/private registry로 구분
- docker kitematic - container를 이용한 작업을 수행할 수 있는 GUI 도구
- docker machine - VM 및 cloud VM과 같은 가상 컴퓨터 환경에 도커 환경을 구성하는 시스템
Docker Container Command Line
- container는 격리된 환경( 가상 환경 )에서 동작하는 Linux 프로세스
- container 생성 과정( 생명 주기 )
- docker image pull( 다운로드 ) / docker image 생성( build )
- -> docker container 생성( create ) => 격리된 프로세스 생성
- -> docker container 실행( start ) => application 실행
- -> docker container 중지( stop ) -> 재시작( restart )
- -> docker container 삭제( remove ) => application 종료
- container 생성은 application 실행과 같은 의미
- container는 격리된 환경( 가상 환경 )에서 동작하는 Linux 프로세스
- container 프로세스는 Linux 프로세스로서 관리가 되지만 container 프로세스는 완전 격리된 프로세스로 동작하며 현재 시스템의 kernel 기능을 공유한다.
docker image save [ 옵션 ] <image명> <파일명>
docker image load [ 옵션 ] <파일명>
- docker image를 저장한 파일 내용으로 image 복원
docker create <image이름> [ 옵션 ]
- it
-i - 대화식 모드 사용
-t - tty( 단말 디바이스 ) 사용
- docker create -it --name test-mysql1 mysql:5.7
docker start <container ID/이름>
docker restart <container ID/이름>
docker stop <container ID/이름>
docker attach <container ID/이름>
docker exec [ 옵션 ] <container ID/이름> <명령>
docker container rm <container ID/이름>
- container 삭제 - application 실행 종료
- 실행중인 container는 삭제할 수 없다.
- 실행중인 container를 삭제할 때는 먼저 docker stop 명령으로 container를 중지후에 삭제
docker run [ 옵션 ] <image 이름> [ container에서 동작 명령 ]
- [ image download ], 생성, 실행을 일괄적으로 수행하는 명령
- [ docker pull 명령 ] + docker create 명령 + docker start 명령을 차례대로 입력한 것과 같은 결과 수행
- 옵션
- -i - 대화식 모드 사용
- -t - tty( 단말 디바이스 ) 사용
- -d - 백그라운드에서 컨테이너 실행, container를 데몬 프로세스로 생성
- --name <container에 부여할 이름> - container 이름 부여
- -h <host 이름> - container의 hostname 설정
- -rm - container 종료후 삭제
- -p : - host port와 container port 연결( 포트 포워딩 )
- -v <host 경로>:<container 경로> - host 경로와 container 경로의 공유 볼륨 설정
- -e <환경변수이름>=<값> - container내의 환경 변수 등록
- --net=네트워크 이름 - container를 네트워크에 연결
docker system prune
- 실행중인 container를 제외한 회수 가능한 자원 회수
docker stats <container ID/이름>
- container 리소스 상태 실시간 확인
- 시각적으로 확인시에는 google cAdvisor 사용
docker top <container ID/이름>
- container의 실행중인 프로세스 상태 확인
docker cp <원본 파일> <container ID/이름>:<복사 위치 및 파일 이름>
- host에 있는 파일을 container에 지정된 위치에 복사
docker ps [ 옵션 ]
- 실행중인 container 목록 출력
- -a : 생성/종료된 container도 모두 출력
- 출력 내용
- CONTAINER ID - container 생성시 부여된 임의의 ID, 64자리
- IMAGE - container 생성시 사용한 image
- COMMAND - container 생성시 실행한 명령
- CREATED - container 생성 시간
- STATUS - 현재 container 상태
- PORTS - container에 port forward 정보
- NAMES - 임의로 부여된 container 이름, container 생성시 사용자가 이름을 지정할 수도 있다.
docker rm -f <container ID/이름>
docker container pause <container ID/이름>
docker container unpause <container ID/이름>
docker container inspect <container ID/이름>
-
container 세부 정보 확인
-
docker container inspect webserver | grep Pid
inspect 결과에 대하여 pipe와 grep을 활용하여 검색
-
docker container inspect webserver --format "{{.State.Pid}}"
--format 옵션을 이용하여 원하는 내용 검색 -> Pid 검색
-
docker container inspect webserver --format "{{.NetworkSettings.IPAddress}}"
--format 옵션을 이용하여 원하는 내용 검색 -> IP Address 검색
container 모니터링 도구
- 서비스 운영을 하면서 필요한 시스템 metric( CPU/memory 사용률, 네트워크 트래픽 등 )을 모니터링 하면서 특이사항이 있을 때 대응하기 위해 모니터링 수행
- container 환경하에서는 기존 모니터링 도구로는 container 모니터링 진행이 어렵다.
- 구글 제공 cAdvisor( container Advisor )를 사용하면 GUI 방식으로 container에 대한 모니터링을 쉽게 수행할 수 있다.
https://github.com/google/cadvisor
Docker Image 생성
- Docker image는 container를 생성하기 위한 목적으로 사용
- Docker Image 생성 방법
- docker commit 명령 이용
- Dockerfile을 통해 직접 생성
Dockerfile
- docker image 생성, 즉 필요로 하는 개발 환경을 제공하기 위한 여러 명령 집합
- FROM
생성하려는 image의 base image 지정
- RUN
설정된 기본 이미지에 패키지 업데이트, 각종 패키지 설치, 명령 실행등을 작성
- CMD
생성된 Docker image를 container로 생성하여 실행할 때 실행되는 명령 기술
- ENTRYPOINT
생성된 Docker image를 container로 실행할 때 실행되는 명령
- COPY
Host에 있는 파일을 Docker image에 복사하는 명령
- EXPOSE
container가 host 네트워크를 통해 들어오는 트래픽을 listening하는 포트와 프로토콜 지정
- WORKDIR
container상에서 작업할 경로 전환을 위해 사용
Docker Image 예시
-
image 생성을 위해 필요한 파일 저장 디렉토리 생성
mkdir calc-ubuntu
-
image 생성시 필요한 파일을 생성한 디렉토리에 복사
index.html
calc.js
-
ubuntu 배포판( base image )에 apache web server를 설치하고 계산기 web application 을 실행하는 image 생성
# base image 지정
FROM ubuntu:18.04
# Apache web server 설치
RUN apt-get update && \
apt-get install -y apache2
# web service를 위한 프로그램 복사
COPY ./index.html /var/www/html
COPY ./calc.js /var/www/html
# 사용 포트 지정
EXPOSE 80
# 명령 실행
CMD [ "/usr/sbin/apache2ctl", "-DFOREGROUND" ]