Versions Compared

Key

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

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

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

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

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

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 kill

실행중인 컨테이너를 강제로 중지하거나 전원을 끌때 사용된다.

Code Block
# docker kill [option] <container...>


Docker rm

컨테이너를 완전히 삭제 또는 폐기한다.

Code Block
# docker rm [option] <container...>


다음의 명령을 사용하여 나머지 컨테이너들을 한번에 삭제 또는 폐기 할 수 있다.

Code Block
# docker rm $(docker ps -aq)
CONTAINER ID
CONTAINER ID
CONTAINER ID
...

Docker rmi

images 를 완전히 삭제 또는 폐기한다.

images를 통해 얻은 이미지 목록에서 이미지 ID를 입력하면 삭제됨.

※ 컨테이너가 실행중인 이미지는 삭제되지 않는다. 컨테이너는 이미지들의 레이어를 기반으로 실행중이므로 삭제가 불가능 하다.

※ NOTE : 중지된 컨테이너 정리하기 

Note

# docker rm -v $(docker ps -a -q -f status=exited)

중지된 컨테이너를 개별로 삭제하는게 힘들다면, 위의 명령어와 같이

중지된 컨테이너 ID를 가져와서 한번에 삭제가 가능하다.


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

Docker ps -a 

중지된 컨테이너 (공식적으로 종료된 컨테이너라고 함) 를 포함한 모든 컨테이너의 목록을 반환.

Docker start

종료된 컨테이너를 시작함.

Docker stop

실행중인 컨테이너를 중지함.


Docker

rm

컨테이너를 완전히 삭제함.

docker rm [옵션] [NAME]

Code Block
[root@localhost ~]# docker rm relaxed_blackwell
relaxed_blackwell

다음의 명령을 사용하여 나머지 컨테이너들을 삭제 할 수 있다.

Code Block
# docker rm $(docker ps -aq)
CONTAINER ID
CONTAINER ID
CONTAINER ID
...

Docker rmi

images 를 완전히 삭제함.

images를 통해 얻은 이미지 목록에서 이미지 ID를 입력하면 삭제됨.

※ 컨테이너가 실행중인 이미지는 삭제되지 않는다. 컨테이너는 이미지들의 레이어를 기반으로 실행중이므로 삭제가 불가능 하다.

TIP : 중지된 컨테이너 정리하기 

Note

# docker rm -v $(docker ps -a -q -f status=exited)

중지된 컨테이너를 개별로 삭제하는게 힘들다면, 위의 명령어와 같이

중지된 컨테이너 ID를 가져와서 한번에 삭제가 가능하다.

Docker

run 

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

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

옵션설명
-ddetached mode 흔히 말하는 백그라운드 모드
-p호스트와 컨테이너의 포트를 연결 (포워딩)
-v호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e컨테이너 내에서 사용할 환경변수 설정
–name컨테이너 이름 설정
–rm프로세스 종료시 컨테이너 자동으로 삭제
-it-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link컨테이너 연결 [컨테이너명:별칭]
-i일반적으로 대화형 컨테이너 섹션을 시작하기 위함.
-t가상 tty 를 할당


Docker images

도커 이미지 목록 확인하기

Code Block
# Docker images [option]


Docker create

이미지를 이용하여 컨테이너를 생성하지만 컨테이너를 시작하지 않음.

docker run 에서 사용되는 대부분의 인자를 사용할 수 있음.

생성된 도커를 시작하려면 docker start  로 시작.


Docker

images

도커 이미지 목록 확인하기

Docker pull

도커 이미지를 다운로드 하기

Code Block
# docker pull [option] <image>

※ run 명령어를 입력하면 이미지가 존재하지않을대 자동으로 다운로드 된다.

pull은 도커 이미지의 최신버전을 다시 다운받을때 사용한다.

같은 태그일경우 이미지가 업데이트 된 경우 pull 명령어를 통하여 새로운 최신 버전을 다운로드 받는다.


※ 도커 허브에서 nginx 가 기본적으로 설치되어 있는 이미지를 내려받으면,

Code Block

docker cp

 컨테이너와 호스트간의 파일과 디렉토리를 복사.

# 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 inspect

Docker inspect [NAMES] OR [ID] ★

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 top

컨테이너의 프로세스 보기

Code Block
# docker top [option] <container> [ps option]

Docker diff

컨테이너의 파일시스템 변경사항 확인이 가능하며,

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
A /basket/chmod
A /basket/chown
A /basket/cp
A /basket/dash
A /basket/date
...

Docker history

[NAMES] OR [ID] 

docker history 명령을 통해 이미지가 어떤 레이어로 어떻게 생성되었는지 출력한다.

docker log

로그는 컨테이너이름으로 실행하게 되면 컨테이너 내부에서 발생된 모든 작업 로그를 확인 할 수 있다.

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
...

exit

쉘에서 빠져 나오기.



컨테이너 명령어 실행하기 (exec)

실행중인 컨테이너에 들어가보거나 컨테이너의 파일을 실행하고 싶을 때 사용한다.

컨테이너 명령어를 실행하는 방법은 다음과 같다.

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

run 명령어와 유사해 보이지만, 차이는 run은 새로 컨테이너를 만들어서 실행하고 exec는 실행중인 컨테이너에 명령어를 내리는 정도이다.