Page History
Table of Contents | ||
---|---|---|
|
Tip |
---|
도커는 매우 빨리 변화와 업데이트가 이루어 짐으로 설명되는 명령어는 참조만 하며, 상세 상세 설명 및 업데이트 관련해서는 도커의 공식 사이트를 참조한다. 또한 도커의 명령어에 대한 자세한 내용은 기본적으로 제공되는 도움말 기능을 이용한다. "--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 로 시작.
설명 | |
---|---|
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–rm | 프로세스 종료시 컨테이너 자동으로 삭제 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
–link | 컨테이너 연결 [컨테이너명:별칭] |
-i | 일반적으로 대화형 컨테이너 섹션을 시작하기 위함. |
-t | 가상 tty 를 할당 |
도커 정보
docker history
docker history 명령을 통해 이미지가 어떤 레이어로 어떻게 생성되었는지 출력한다.
docker info
도커 설치 및 사용방법 에 대한 상세 정보 출력.
docker help
명령어의 사용법과 도움말 출력.
docker version
컴파일에 사용된 버전 및 클라이언트 , 서버 버전 정보 출력.
컨테이너 관리
docker create
이미지를 이용하여 컨테이너를 생성하지만 컨테이너를 시작하지 않음.
docker run 에서 사용되는 대부분의 인자를 사용할 수 있음.
생성된 도커를 시작하려면 docker start 로 시작.
docker cp
컨테이너와 호스트간의 파일과 디렉토리를 복사.
docker attach
시작한 컨테이너에 접속한다.
attach 명령어는 현재 실행 중인 컨테이너의 표준 입력과 출력을 연결하는 기능을 의미함.
다음 명령을 실행하면 Bash 쎌이 표시된다.
Code Block |
---|
# sudo docker attach hello
root@6338ce52d07c:/# |
※ Bash 셸에서 exit 또는 Ctrl+D를 입력하면 컨테이너가 정지되며, Ctrl+P, Ctrl+Q를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서 빠져나오게 된다.
docker exec
컨테이너 명령어 실행하기 (exec) 또는 실행중인 컨테이너 내부에 접속하기.
실행중인 컨테이너에 들어가보거나 컨테이너의 파일을 실행하고 싶을 때 사용한다.
컨테이너 명령어를 실행하는 방법은 다음과 같다.
Code Block |
---|
# docker exec [OPTIONS] CONTAINER COMMAND [ARG...] |
run
명령어와 유사해 보이지만, 차이는 run
은 새로 컨테이너를 만들어서 실행하고 exec
는 실행중인 컨테이너에 명령어를 내리는 정도이다.
docker kill
실행중인 컨테이너를 강제로 중지하거나 전원을 끌때 사용된다.
Code Block |
---|
# docker kill [option] <container...> |
docker pause
실행중인 컨테이너 내부에 있는 모든 프로세스들을 일시 중지 한다.
중지된 프로세스는 어떠한 신호도 받을수 없으며 컨테이너 종료 또는 정리될 수 있다.
중지된 컨테이너를 다시 시작하려면 docker unpause 를 실행하면 된다.
docker start
중지 또는 종료된 컨테이너를 시작함, 또는 전원을 켠다.
Code Block |
---|
# docker start [options] <container...> |
docker restart
실행중인 컨테이너를 재시작할때 사용된다.
Code Block |
---|
# docker restart [option] <container...> |
docker stop
실행중인 컨테이너를 중지하건, 전원을 종료할때 사용된다.
Code Block |
---|
# docker stop [option] <container...> |
docker rm
컨테이너를 완전히 삭제 또는 폐기한다.
Code Block |
---|
# docker rm [option] <container...> |
다음의 명령을 사용하여 나머지 컨테이너들을 한번에 삭제 또는 폐기 할 수 있다.
Code Block |
---|
# docker rm $(docker ps -aq)
CONTAINER ID
CONTAINER ID
CONTAINER ID
... |
※ NOTE : 중지된 컨테이너 정리하기
Code Block |
---|
# docker rm -v $(docker ps -a -q -f status=exited)</p> |
중지된 컨테이너를 개별로 삭제하는게 힘들다면, 위의 명령어와 같이
중지된 컨테이너 ID를 가져와서 한번에 삭제가 가능하다.
docker rmi
images 를 완전히 삭제 또는 폐기한다.
images를 통해 얻은 이미지 목록에서 이미지 ID를 입력하면 삭제됨.
다음은 이미지를 삭제하는 rmi 명령이다. 태그를 지정하지 않으면 latest 태그를 삭제함.
Code Block |
---|
# sudo docker rm hello
# sudo docker rm hello:0.1
# sudo docker rm exampleuser/hello:0.1
# sudo docker rm 192.168.0.39:5000/hello:0.1
# sudo docker rm exampleregistry.com:5000/hello:0.1 |
다음 명령은 실행되고 있는 이미지를 강제로 삭제합니다.
Code Block |
---|
# sudo docker run -i -t -d --name hello ubuntu:14.04 /bin/bash
# sudo docker rm -f hello |
모든 이미지를 한꺼번에 삭제하려면
다음과 같이 docker images
명령의 -a
, -q
옵션을 사용하여 이미지 ID를 구한 뒤 docker rmi
명령을 실행한다.
Code Block |
---|
# sudo docker rmi `sudo docker images -aq`
# sudo docker rmi $(sudo docker images -aq) |
-a
,-q
처럼 짧은 옵션은 서로 붙여 쓸 수 있습니다.
-f, --force=false: 이미지를 강제로 삭제합니다.
--no-prune=false: 태그가 없는 부모 이미지를 삭제하지 않습니다.
※ 컨테이너가 실행중인 이미지는 삭제되지 않는다. 컨테이너는 이미지들의 레이어를 기반으로 실행중이므로 삭제가 불가능 하다.
※ 이름이 없는 모든 이미지를 삭제하는 방법은 다음과 같다.
Code Block |
---|
[root@localhost ~]# docker rmi $(docker images -q -f dangling=true) |
컨테이너 정보
docker cp
컨테이너와 호스트간의 파일과 디렉토리를 복사.docker ps
현재 실행되고 있는 컨테이너들의 상세 정보들을 반환.
Code Block |
---|
[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 사이사이에 출력결과를 깔끔하게 확인 할 수 있다.
Code Block |
---|
# docker ps -a --format "table {{.ID}}\t{{.IMAGE}}\t{{.NAME}}" |
docker ps -a
중지된 컨테이너 (공식적으로 종료된 컨테이너라고 함) 를 포함한 모든 컨테이너의 목록을 반환.
docker
start종료된 컨테이너를 재시작함.
docker rm
컨테이너를 삭제하는 명령어.
diff
컨테이너의 파일시스템 변경사항 확인 반환, 시작된 이후에 변경된 파일의 목록이 반환된다.
즉 이미지로부터 컨테이너가 생성된 이후 컨테이너의 파일시스템에 적용된 변경사항을 반환 한다.
삭제된 또는 이동된 폴더 및 이동된 또는 추가된 모든 파일들과 저장소 드라이버와 관련되어서 생성된 파일들이 이에 해당된다.
Code Block |
---|
# docker diff [option] <container> |
Code Block |
---|
[root@localhost ~]# docker rmdiff relaxed_blackwell relaxed_blackwell A /basket A /basket/bash A /basket/cat A /basket/chgrp ... |
docker events
데몬의 실시간 이벤트 출력
Ctrl + C 누르면 종료.
docker inspect
docker inspect 명령어는 컨테이너뿐만 아니라 네트워크, 볼륨, 이미지등 모든 도커 단위의 상세 정보를 얻을 때 사용한다다음의 명령을 사용하여 나머지 컨테이너들을 삭제 할 수 있다.
Code Block |
---|
# docker inspect rm $(docker ps -aq) CONTAINER ID CONTAINER ID CONTAINER ID [option] <container | image | ID ... |
TIP : 중지된 컨테이너 정리하기
Note |
---|
내용입력 |
> |
이름이 중복되는 경우 컨테이너에 대해 먼저 수행되며 이는 --type 을 명시하는것이 좋다.
아래의 예시는 relaxed_blackwell 이름으로 생성되었으며,
docker inspect [NAMES] OR [ID]
docker inspect 를 실행하면 컨테이너에 대한 자세한 정보를 확인 할 수 있다.
위의 이름은 relaxed_blackwell 이름이 생성되었으며,
--name 인수를 사용하여 이름을 직접 지정할 수 있다.
(예 : docker run --name boris debian echo "BOO")
Code Block |
---|
[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 인수를 사용하여 원하는 정보만을 필터하여 출력할 수 있다.
Code Block |
---|
[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컨테이너가 시작된 이후에 변경된 파일의 목록이 반환된다.
삭제된 또는 이동된 폴더 및 이동된 또는 추가된 모든 파일들과 저장소 드라이버와 관련되어서 생성된 파일들이 이에 해당된다.
logs
컨테이너의 로그보기
Code Block |
---|
Code Block |
[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 ... |
logs [option] <container> |
로그는 컨테이너이름으로 실행하게 되면 컨테이너 내부에서 발생된 모든 작업 로그를 확인 할 수 있다.
Code Block |
---|
[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
... |
docker port
컨테이너 노출된 포트 매핑 목록 반환.
내부 컨테이너 포트와 프로토콜 이용한 검색가능.
Code Block |
---|
# docker run -P <images> |
docker top
지정된 컨테이너에 실행중인 프로세스들의 대한 정보 반환.
ps 와 동일한 옵션을 사용할 수 있으며, 기본적으로 -ef 가 사용된다.
Code Block |
---|
# docker top [option] <container> [ps option]
[root@localhost ~]# ID=$(docker run -d redis)
[root@localhost ~]# docker top $ID
UID PID PPID C STIME TTY TIME CMD
polkitd 4021 4010 0 16:58 ? 00:00:00 redis-server *:6379 |
이미지 관리
docker images
도커 이미지 목록 확인하기
Code Block |
---|
# docker images [option]
# docker images | head -4 |
docker pull
도커 이미지를 다운로드 하기
Code Block |
---|
# docker pull [option] <image> |
※ run 명령어를 입력하면 이미지가 존재하지않을대 자동으로 다운로드 된다.
pull은 도커 이미지의 최신버전을 다시 다운받을때 사용한다.
같은 태그일경우 이미지가 업데이트 된 경우 pull 명령어를 통하여 새로운 최신 버전을 다운로드 받는다.
※ 도커 허브에서 nginx 가 기본적으로 설치되어 있는 이미지를 내려받으면,
Code Block |
---|
# docker pull nginx # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx latest 61e8f94e1d65 39 hours ago 492.7 MB ... # docker run -d -p 80:80 nginx ... |
docker search
도커 허브에서 이미지 검색하기
Code Block |
---|
# docker search [option] <team> |
docker push
도커 허브에 이미지 올리기
Code Block |
---|
# docker push [option] <image> |
docker build
도커파일을 이용하여 이미지를 생성한다
docker commit
컨테이너로부터 이미지를 생성한다. docker commit은 유용한 명령어이긴한데, 쉽게 재사용할 수 있는 docker build 를 사용한다.
.docker export
컨테이너의 파일 시스템 내용을 STDOUT 에 tar 형식으로 저장.
저장된 결과는 import 명령어를 이용하여 로드후 이미지를 재생성 할 수 있다.
docker import
docker export 에 의하여 생성된 이미지를 파일시스템을 포함하여 재생성 한다.
docker history
이미지의 각 계층에 대한 정보를 반환한다.
레지스트리 관리
도커는 자격 증명을 홈 디렉토리에 .dockercfg 확장자를 가진 파일로 저장한다.
docker login
지정된 레지스트리 서버를 등록하거나 로그인한다.
서버가 지정되지 않으면 도커허브를 사용하는것으로 간주한다.
docker logout
도커 레지스트리로부터 로그아웃한다
exit
쉘에서 빠져 나오기.