도커는 매우 빨리 변화와 업데이트가 이루어 짐으로 설명되는 명령어는 참조만 하며, 상세 설명 및 업데이트 관련해서는 도커의 공식 사이트를 참조한다.
또한 도커의 명령어에 대한 자세한 내용은 기본적으로 제공되는 도움말 기능을 이용한다. "--help" 인자를 명령어와 함께 사용하거나 docker help 명령어를 이용하면 도움말 기능을 이용할 수 있다.
docker run
컨테이너의 시작과 관련된 명령어인 만큰 가장 복잡하면서 많은 인자들을 지원하고 있다.
인자에서 지원하는 대표적인 기능에는 이미지를 실행하는 방법, 도커파일 설정, 네트워크설정, 컨테이너의 권한과 리소스 설정등이 있다.
-a, --attach | 주어진 스트림을 터미널에 연결 옵션이 지정되지 않으면 stdout, stderr 가 연결됨. 옵션을 지정하지 않고 컨테이너가 대화형 모드(-i, interactive) 로 시작되었다면 stdin도 연결됨. |
-d, --detach | 컨테이너 분리모드로 실행, 컨테이너를 백그라운드로 실행시키고 컨테이너 ID로 반환. |
-i, --interactive | Stdin을 열어둔 상태로 유지, 일반적으로 대화형 컨테이너 섹션을 시작하기 위해서 -t 와 같이 사용됨. (# docker run -it debian /bin/bash) |
-t, --tty | 가상 tty 를 할당, 일반적 대화형 컨테이너를 시작하기 위해서 -i 와 같이 사용됨. |
--restart | 도커가 종료된 컨테이너가 어떤 경우에 재시작할지 구성함. no 인자는 컨테이너를 재시작하지 않으며, always 는 종료상태에 상관없이 항상 재시작을 시도한다는 의미. on-failure 인자는 컨테이너가 0이 아닌 상태로 종료된 경우에만 컨테이너를 재시작을 시도함. docker run --restart onfailure:10 postgres 명령은 postgres 컨테이너를 시작하고, 0이 아닌 코드로 종료된 경우에는 재시작 10번을 시도한다는 의미. |
--rm | 컨테이너가 종료되면 자동으로 컨테이너 삭제. (-d 와 같이 사용될 수 없음) |
-e , --env | 컨테이너 내부의 환경변수들을 설정함. |
-h, --hostname | 컨테이너의 유닉스 호스트 이름을 설정 (# docker run -h "myhost" debian hostname) |
--name NAME | NAME 이라는 이름을 컨테이너에 할당. 여기에 할당된 이름은 다른 도커 명령어에서 해당 컨테이너를 찾을 때 사용됨 |
볼륨
-v --volume : 볼륨은 두가지 인자방식으로 사용하여 구성됨. 첫번재는 디렉토리만 명시하는것, 두번째는 바인드할 호스트 디렉토리 지정.
--volumes-from : 지정된 컨테이너의 볼륨을 마운트
네트워크
--expose : 도커파일의 EXPOSE 설정과 동일 -p 와 함께 사용됨.
--link : 지정된 컨테이너에 사설 네트워크 인터스페이스를 구성.
-p, --publish : 호스트에서 컨테이너로 접근할 수 있도록 컨테이너에 포트를 게시. (docker port 로 확인 가능)
-P, --publish-all : 컨테이너에서 노출된 모든 포트들을 호스트로 노출.
그외 기타
--entrypoint : 도커파일의 ENTRY POINT 설정은 모두 무시하고 주어진 인자를 이용하여 컨테이너의 엔트리포인트 설정.
-u , --user : 명령을 실행할 사용자 이름 또는 UID를 설정. 도커파일의 USER 설정을 무시하고 재정의됨.
-w, --workdir : 지정된 경로를 컨테이너의 작업 디렉토리로 설정.
컨테이너 관리 명령어
docker create
이미지를 이용하여 컨테이너를 생성하지만 컨테이너를 시작하지 않음.
docker run 에서 사용되는 대부분의 인자를 사용할 수 있음.
생성된 도커를 시작하려면 docker start 로 시작.
docker cp
컨테이너와 호스트간의 파일과 디렉토리를 복사.
docker ps
현재 실행되고 있는 컨테이너들의 상세 정보들을 반환.
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 29a503dbbb6c debian "/bin/bash" About a minute ago Up About a minute relaxed_blackwell
도커는 호스트를 구분할 수 있도록 컨테이너에 이름을 부여한다.
셸의 화면이 작아서 ps 명령어의 출력결과가 줄바꿈되어 보기 어려울때..
--format 옵션에 {{.ID}}\t{{.Status}} 와 같은 원하는 속성만 입력하여 정보를 출력 할 수 있다.
\t는 탭을 의미하며, \t 사이사이에 출력결과를 깔끔하게 확인 할 수 있다.
# docker ps -a --format "table {{.ID}}\t{{.IMAGE}}\t{{.NAME}}"
docker ps -a
중지된 컨테이너 (공식적으로 종료된 컨테이너라고 함) 를 포함한 모든 컨테이너의 목록을 반환.
docker start
종료된 컨테이너를 재시작함.
docker rm
컨테이너를 삭제하는 명령어.
docker rm [옵션] [NAME]
[root@localhost ~]# docker rm relaxed_blackwell relaxed_blackwell
다음의 명령을 사용하여 나머지 컨테이너들을 삭제 할 수 있다.
# docker rm $(docker ps -aq) CONTAINER ID CONTAINER ID CONTAINER ID ...
TIP : 중지된 컨테이너 정리하기
내용입력
Docker inspect [NAMES] OR [ID]
docker inspect 명령어는 컨테이너뿐만 아니라 네트워크, 볼륨, 이미지등 모든 도커 단위의 정보를 얻을 때 사용한다.
이름이 중복되는 경우 컨테이너에 대해 먼저 수행되며 이는 --type 을 명시하는것이 좋다.
아래의 예시는 relaxed_blackwell 이름으로 생성되었으며, --name 인수를 사용하여 이름을 직접 지정할 수 있다.
(예 : docker run --name boris debian echo "BOO")
[root@localhost ~]# docker inspect relaxed_blackwell [ { "Id": "29a503dbbb6ce4e6965c9324dc35a27e116e905ec7079aea8ba1ec8fe9475c77", "Created": "2018-01-27T07:48:41.643491195Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, . .
TIP : 보다 자세한 정보는 grep 또는 --format 인수를 사용하여 원하는 정보만을 필터하여 출력할 수 있다.
[root@localhost ~]# docker inspect relaxed_blackwell | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2", [root@localhost ~]# docker inspect --format {{.NetworkSettings.IPAddress}} relaxed_blackwell 172.17.0.2
docker diff
컨테이너가 시작된 이후에 변경된 파일의 목록이 반환된다.
삭제된 또는 이동된 폴더 및 이동된 또는 추가된 모든 파일들과 저장소 드라이버와 관련되어서 생성된 파일들이 이에 해당된다.
[root@localhost ~]# docker diff relaxed_blackwell A /basket A /basket/bash A /basket/cat A /basket/chgrp A /basket/chmod A /basket/chown A /basket/cp A /basket/dash A /basket/date ...
docker log
로그는 컨테이너이름으로 실행하게 되면 컨테이너 내부에서 발생된 모든 작업 로그를 확인 할 수 있다.
[root@localhost ~]# docker logs relaxed_blackwell root@CONTAINER:/# mv /bin /basket root@CONTAINER:/# ls bash: ls: command not found root@CONTAINER:/# ll bash: ll: command not found ...
exit
쉘에서 빠져 나오기.