Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel3


Tip

도커는 매우 빨리 변화와 업데이트가 이루어 짐으로 설명되는 명령어는 참조만 하며, 

상세 설명 및 업데이트 관련해서는 도커의 공식 사이트를 참조한다. 

또한 도커의 명령어에 대한 자세한 내용은 기본적으로 제공되는 도움말 기능을 이용한다.

"--help" 인자를 명령어와 함께 사용하거나 docker help 명령어를 이용하면 도움말 기능을 이용할 수 있다.

docker run 

Docker run

컨테이너의 시작과 관련된 명령어인 만큰 가장 복잡하면서 많은 인자들을 지원하고 있다.

인자에서 지원하는 대표적인 기능에는 이미지를 실행하는 방법, 도커파일 설정, 네트워크설정, 컨테이너의 권한과 리소스 설정등이 있다.

옵션설명
-ddetached 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+PCtrl+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 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 diff

컨테이너의 파일시스템 변경사항 확인 반환, 시작된 이후에 변경된 파일의 목록이 반환된다.

즉 이미지로부터 컨테이너가 생성된 이후 컨테이너의 파일시스템에 적용된 변경사항을 반환 한다.

삭제된 또는 이동된 폴더 및 이동된 또는 추가된 모든 파일들과 저장소 드라이버와 관련되어서 생성된 파일들이 이에 해당된다.

Code Block
# docker diff [option] <container>
Code Block
[root@localhost ~]# docker diff 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 [option] <container | image | ID ...>

이름이 중복되는 경우 컨테이너에 대해 먼저 수행되며 이는 --type 을 명시하는것이 좋다.

아래의 예시는 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,
...

※ 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 logs

컨테이너의 로그보기

Code Block
# docker 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

Docker

images

도커 이미지 목록 확인하기

Code Block
# Dockerdocker images [option]
Docker

# 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

docker search

도커 허브에서 이미지 검색하기

Code Block
# docker search [option] <team>
Docker

docker push

도커 허브에 이미지 올리기

Code Block
# docker push [option] <image>
Docker

docker build 

도커파일을 이용하여 이미지를 생성한다

Docker

docker commit

컨테이너로부터 이미지를 생성한다. docker commit은 유용한 명령어이긴한데, 쉽게 재사용할 수 있는 docker build 를 사용한다.

docker export

컨테이너의 파일 시스템 내용을 STDOUT 에 tar 형식으로 저장.

저장된 결과는 import 명령어를 이용하여 로드후 이미지를 재생성 할 수 있다.

docker import

docker export 에 의하여 생성된 이미지를 파일시스템을 포함하여 재생성 한다.

docker history

이미지의 각 계층에 대한 정보를 반환한다.




레지스트리 관리

도커는 자격 증명을 홈 디렉토리에 .dockercfg 확장자를 가진 파일로 저장한다.

docker login

지정된 레지스트리 서버를 등록하거나 로그인한다.

서버가 지정되지 않으면 도커허브를 사용하는것으로 간주한다.

docker logout

도커 레지스트리로부터 로그아웃한다.