학습 목표
도커 컨테이너를 다루는 방법을 이해한다.
도커 명령을 실제로 실행해 보면서 컨테이너가 구체적으로 무엇인지 파악한다.
목차
도커 컨테이너란 무엇인가?
겉에서 본 도커 컨테이너는 가상 환경이다.
- 도커 컨테이너 다루기
도커 컨테이너의 생애주기
도커 컨테이너는 실행 중, 정지, 파기의 3가지 상태를 갖는다.
docker container run
명령으로 컨테이너 최초 실행시 상태는 실행 중이다.
실행중 상태
docker container run
애플리케이션이 실행 중인 상태이다.
HTTP 요청을 받는 서버 애플리케이션이면 오류로 인해 종료 되지 않는 한 실행시간이 무한하고
명렁만 실행되고 끝나는 애플리케이션은 실행 중 상태가 길게 유지되지 않는다.
실행이 끝나면 정지 상태가 된다.
정지 상태
컨테이너를 사용자가 명시적으로 정지하거나
docker container stop
실행된 애플리케이션이 정상/오류 여부를 막론하고 종료된 경우, 컨테이너의 상태는 정지상태이다.
컨테이너를 정지시키면 가상 환경으로서는 더 동작하지 않지만, 디스크에 컨테이너가 종료되던 시점의 상태가 저장되어 남는다.
docker container ls -a
로 모든 컨테이너를 확인 할 수 있다.
파기 상태
정지 상태의 컨테이너는 디스크에 그대로 남아 있다.(호스트 운영체제를 종료할지라도)
이 컨테이너를 삭제하는것을 파기한다고 생각하면 될 것 같다.
Docker container run
컨테이너 생성 및 실행
docker container run 명령은 컨테이너를 생성하고 실행하는 명령이다.
도커 컨테이너를 실행 중 상태로 만든다.
docker container run [options] 이미지명[:태그] [명령] [명령인자 ...]
docker container run [options] 이미지ID [명령] [명령인자 ...]
ex)
docker container run -d -p 9000:8080 example/echo:latest
백그라운드에서 실행시키는데(-d), 로컬호스트 9000 -> 컨테이너 호스트8080으로 포트포워딩(-p)을 한다.
####
Docker container run 명령의 인자
docker container run 명령에 인자를 전달하면 Dockerfile에서 정의했던 CMD 인스트럭션을 오버라이드한다.
컨테이너에 이름 붙이기
–name 옵션을 사용한다.
docker container run --name [컨테이너명] [이미지명]:[태그]
ex)
docker container run -t -d --name gihyo-echo example/echo:latest
도커 명령에서 자주 사용되는 옵션
-i 옵션
- 컨테이너를 실행할 때 컨테이너 쪽 표준 입력과의 연결을 그대로 유지한다. 따라서 컨테이너 쪽 셸에 들어가서 명령을 실행할 수 있다. 실제 사용에서는 -t옵션과 같이 사용하는 경우가 많다.
-t 옵션
- 유사 터미널 기능을 활성화하는 옵션이다. 보통 i옵션과 같이 사용한다.
-it 옵션
- -i옵션과 -t옵션을 동시에 사용하는 방법이다.’
-rm 옵션
- 컨테이너를 종료할때 컨테이너를 파기하도록 하는 옵션이다. 꽤나 유용하다.
-v 옵션
- 호스트와 컨테이너 간에 디렉터리나 파일을 공유하기 위해 사용하는 옵션이다.
docker container ls
도커 컨테이너 목록 보기
docker container ls [options]
항목 | 내용 |
---|---|
CONTAINER ID | 컨테이너를 식별하기 위한 유일 식별자 |
IMAGE | 컨테이너를 만드는 데 사용된 도커 이미지 |
COMMAND | 컨테이너에서 실행되는 애플리케이션 프로세스 |
CREATED | 컨테이너 생성 후 경과된 시간 |
STATUS | 컨테이너의 실행 상태 |
PORTS | 호스트 포트와 컨테이너 포트의 연결 관계(포트 포워딩) |
NAMES | 컨테이너 이름 |
컨테이너 ID만 추출하기
docker container ls -q
컨테이너 목록 필터링하기
docker container ls –filter “필터명=값”
ex) docker container ls --filter "name=dochoi"
- 컨테이너명이 dochoi인가?
ex) docker container ls --filter "ancestor=dochoi/echo"
- 컨테이너를 생성한 이미지의 이름이 dochoi/echo인가?
종료된 컨테이너 목록 보기
docker container ls -a
docker container stop
컨테이너 정지하기
docker container stop 컨테이너IDor컨테이너명
ex)
docker container stop dochoi
docker container stop 8b5968585131604a92af02f5690713efadf029cc8dad53f79280b87a80eb1354
docker container restart
컨테이너 재시작하기
docker container restart 컨테이너IDor컨테이너명
ex)
docker container restart dochoi
docker container rm
컨테이너 파기하기(삭제하기)
ex)
docker container rm dochoi
docker container logs
표준 출력 연결하기
docker container logs [options] 컨테이너IDor컨테이너명
도커 컨테이너의 표준 출력 내용을 확인할 수 있다.
-f 옵션을 새용하면 새로 출력되는 표준 출력 내용을 계속 보여준다.
ex)
docker container logs -f $(docker container ls --filter "ancestor=dochoi" -q)
애플리케이션을 실제 운영하는 단계에서는 쿠버네티스같은 도구를 사용하기 때문에 실제론 사용하지 않는경우가 많다.
docker container exec
실행 중인 컨테이너에서 명령 실행하기
docker container exec [options] 컨테이너IDor컨테이너명 컨테이너에서 실행할명령
ex)
docker container run -t -d --name echo --rm example/echo:latest
docker container exec echo pwd
docker exec 명령은 마치 컨테이너에 ssh로 로그인 한것 처럼 작용한다.( 클러스터 로그인처럼)
-it옵션으로 셸을 통해 다룰수 있다.
docker container exec -it echo sh
컨테이너 내부의 상태를 확인하거나 디버깅하는 용도로 사용한다. 컨테이너 안에 든 파일을 수정하는 것은 의도하지 않은 부작용을 초래할 수 있으므로 운영 환경에서는 하지 않는다.
docker container cp
파일 복사하기
컨테이너끼리, 혹은 컨테이너와 호스트간에 파일을 복사하기위한 명령이다.
Dockerfile의 COPY인스트럭션은 이미지를 빌드할 때 호스트에서 복사해 올 파일을 정의하는것이고
, docker container cp 명령은 실행 중인 컨테이너와 파일을 주고받기 위한 명령이다.
ex)
컨테이너 안에있는 /echo/main.go 파일을 호스트의 현재 작업 디렉터리로 복사
docker container cp echo:/echo/main.go .
호스트에서 컨테이너로 복사
docker container cp dummy.txt echo:/temp
확인
docker container exec echo ls /tmp | grep dummy
docker container cp 명령은 디버깅 중 컨테이너 안에서 생성된 파일을 호스트로 옮겨 확인할 목적으로 사용하는 경우가 대부분이다. 또한 아직 파기되지 않은 정지 상태의 컨테이너에 대해서도 실행할 수 있다.
운영와 관리를 위한 명령
전체적인 운영에 대해 알아본다.
prune
컨테이너 및 이미지 파기
docker container prune
은 실행중이 아닌 모든 컨테이너를 삭제하는명령이다.
docker container ls -a
로 컨테이너 목록을 확인해 판단하여 명령을 내리자
docker image prune
태그가 붙지않은 모든 이미지를 삭제한다
삭제가 안되는경우 실행 중인 컨테이너의 이미지 등 이유가 있다.
docker system prune
사용하지 않는 도커 이미지 및 컨테이너, 볼륨, 네트워크 등 모든 도커 리소스를 일괄적으로 삭제한다.
docker container stats
사용 현황 확인하기
시스템 리소스 사용 현환 확인
ex)
docker container stats
docker -compose
도커 컴포즈는 여러가지 컨테이너를 한번에 관리할 수 있게 해준다.
ft_server에서 여기까지 요구하지 않으므로 우선 여기까지만 진행한다.