티스토리 뷰
$ docker pull <이미지>
1. 도커 컨테이너 생명주기 관련 명령어
1) 실행중인 컨테이너 보기
현재 실행중인 컨테이너의 상태를 확인할 수 있습니다.
$ docker ps
* ps : process status 약자
이 명령어는 다음과 같이 각 컨테이너에 대하여 7가지 정보를 보여준다.
필드명 | 의미 |
CONTAINER ID | 컨테이너의 고유한 아이디 해쉬값 실제로는 더욱 길지만 일부분만 표출한다. |
IMAGE | 컨테이너 생성 시 사용한 도커 이미지 |
COMMAND | 컨테이너 시작 시 실행될 명령어 대부분 이미지에 내장되어 있으므로 별도의 설정이 필요없다. |
CREATED | 컨테이너가 생성된 시간 |
STATUS | 컨테이너의 상태 실행 중인 Up, 종료는 Exited, 일시정지 Pause |
PORTS | 컨테이너가 갭아한 ㅍ트와 호스트에 연결한 포트 특별한 설정을 하지 않은 경우 출력되지 않는다. |
NAMES | 컨테이너의 고유한 이름 컨테이너 생성 시 --name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 조합해 설정한다. id와 마찬가지로 중복이 안되고 docker rename 명령어로 변경할수 있다 $ docker rename 기존이름 변경할이름 |
2) 실행중인 컨테이너의 원하는 항목만 보기
기본적으로 7가지 항목이 모두 출력되지만 원하는 항목만 지정할수 있다.
$ docker ps --format 'table{{.항목명}}구분자{{.항목명}} ...' # 항목명의 첫 글자는 대문자, 나머지는 대문자
$ docker ps --format 'table{{.Names}}\t{{.Image}}'
명령어를 실행하면 Names 와 IMAGE 항목을 탭(\t)으로 구분하여 보여준다.
3) 모든 컨테이너 보기
생성된 모든 컨테이너의 상태를 확인할 수 있습니다.
$ docker ps -a
* a : all 약자
2. 도커 컨테이너 생명주기 관련 명령어
1) create
도커 이미지에서 새로운 컨테이너를 생성하지만 즉시 실행되지는 않습니다.
$ docker create <이미지 이름>
$ docker create -i --name container-1 ubuntu
docker create 명령어로 ubuntu 이미지로 container-1 이라는 이름의 새로운 도커 컨테이너를 생성합니다.
2) start
시작 시 실행될 명령어를 컨테이너에 넣어주고, 컨테이너를 실행한다.
$ docker start <컨테이너 아이디/이름>
$ docker start container-1
이 명령어를 사용할 경우, 컨테이너를 시작하지만 실행될 때의 출력화면을 보여주지 않음
실행 화면까지 보기를 원할 경우 -a 옵션을 상요해야한다.
$ docker start -a <컨테이너 아이디/이름>
$ docker start -a container-1
* a: attach
3) run
$ docker run <컨테이너 아이디/이름>
$ docker run container-1
4) stop
$ docker stop <컨테이너 아이디/이름>
$ docker stop container-1
stop과 kill 모두 실행 중인 컨테이너를 중지시키는 명령어지만, 진행중인 작업까지 완료하고 중지는 stop,
바로 중지는 kill 명령어를 사용한다.
5) kill
$ docker kill <컨테이너 아이디/이름>
$ docker kill container-1
kill은 진행중인 작업과 상관없이 바로 중지시키는 명령
6) rm
중지된 컨테이너를 삭제한다. 실행중인 컨테이너는 삭제할 수 없으므로, 먼저 중지후에 삭제해야함다.
$ docker rm <컨테이너 아이디/이름>
$ docker rm container-1
모든 컨테이너 삭제, 특정 컨테이너를 지정하지 않고 모든 컨테이너를 삭제하고 싶은 경우
$ docker rm `docker ps -a -q`
7) rmi
도커의 이미지를 삭제할 경우
$ docker rmi <이미지 아이디>
8) 실행중이지 않은 도커(컨테이너, 이미지, 네트워크)를 모두 삭제할 경우
실행중인 컨테이너에게 영향을 주지않는다. 도커를 쓰지 않을때, 한번에 모두 정리할 수 있다.
$ docker system prune
3. 도커를 실행하고 명령어 전달하기
도커를 실행하고 명령어를 전달해보자.
$ docker run <컨테이너 아이디:이름>
Docker run 옵션 종류
옵션 | 의미 |
-i, --interactive | 표준입력(stdin)을 활성화하며, 컨테이너와 연결(attach)되어 있지 않더라도 표준입력을 유지 보통 이 옵션을 사용하여 Bash에 명령을 입력합니다. |
-t, --tty | TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만, 셸이 표시되지 않습니다. |
--name | 컨에티어 이름을 설정합니다 |
-d, --detach | Detached 모드입니다. 보통 데몬 모드라고 부르며, 컨테이너가 백그라운드로 실행됩니다. |
-p, --publish | 호스트와 컨테이너의 포트를 연결합니다. (포트포워딩) <호스트 포트>:<컨테이너 포트> 예) -p 80:80 |
--privileged | 컨테이너 안에서 호스트의 리눅스 커널 기능(Capability)을 모두 사용합니다. 호스트의 주요 자원에 접근할 수 있습니다. |
--rm | 프로세스 종료시 컨테이너 자동 제거 |
--restart | 컨테이너 종료 시, 재시작 정책을 설정합니다. 예) --restart="always" |
-v, --volume | 데이터 볼륨을 설정입니다. 호스트와 컨테이너의 디렉토리를 연결하여, 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장합니다. (마운트) 예) -v [내부 디렉토리 경로]:[컨테이너 내부 디렉토리 경로] |
-u, --user | 컨테이너가 실행될 리눅스 사용자 계정 이름 또는 UID를 설정합니다. 예) --user root |
-e, --env | 컨테이너 내에서 사용할 환경 변수를 설정합니다. 보통 설정 값이나 비밀번호를 전달할 때 사용합니다. 예) -e GRANT_SUDO=yes |
--link | 컨테이너끼리 연결합니다. 예) [컨테이너명 : 별칭] 예) --link="db:db" |
-h, --hostname | 컨테이너의 호스트 이름을 설정합니다. |
-w, --workdir | 컨테이너 안의 프로세스가 실행될 디렉터리를 설정합니다. |
-a, --attach | 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 를 연결합니다. |
-c, --cpu-shares | CPU 자원 분배 설정입니다. 기본 값은 1024이며, 각 값은 상대적으로 적용됩니다. |
-m, --memory | 메모리 한계를 설정합니다. <숫자><단위> 형식이며 단위는 b, k, m, g 를 사용할 수 있습니다 예) --memory=”100000b” |
--gpus | 컨테이너에서 호스트의 NVIDIA GPU 를 사용할 수 있도록 설정합니다. - 호스트는 NVIDIA GPU 가 장착 된 Linux 서버여야하며, - NVIDIA driver 가 설치되어 있어야하고, - docker 19.03.5 버전 이상이어야합니다. GPU 모두 사용하기 --gpus all GPU 지정해서 사용하기 --gpus ‘”device=0,1”’ |
--security-opt | SELinux, AppArmor 옵션을 설정합니다. 예) --security-opt=”label:level:TopSecret” |
명령어 전달하기
$ docker exec <컨테이너 아이디:이름> ls
4. Docker 단축키
1) docker run 실행후 컨테이너 정지하지 않고 나오기
Control+P, Q(^P + Q)를 순차적으로 누르면 된다.
2) docker exec -it <컨테이너 아이디> redis-cli 이후에 빠져나오기
Conrol+C(^C)를 입력하면된다.
3) docker exec -it <컨테이너 아이디> sh 이후에 빠져나오
exit 또는 Control+D(^D)를 입력하면 된다.