Versions Compared

Key

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

도커는 매우 빨리 변화와 업데이트가 이루어 짐으로 설명되는 명령어는 참조만 하며, 상세 설명 및 업데이트 관련해서는 도커의 공식 사이트를 참조한다. 

또한 도커의 명령어에 대한 자세한 내용은 기본적으로 제공되는 도움말 기능을 이용한다. "--help" 인자를 명령어와 함께 사용하거나 docker help 명령어를 이용하면 도움말 기능을 이용할 수 있다.

docker run 

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

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

-a, --attach

주어진 스트림을 터미널에 연결

옵션이 지정되지 않으면 stdout, stderr 가 연결됨.

옵션을 지정하지 않고 컨테이너가 대화형 모드(-i, interactive) 로 시작되었다면 stdin도 연결됨.

-d, --detach컨테이너 분리모드로 실행, 컨테이너를 백그라운드로 실행시키고 컨테이너 ID로 반환.-i, --interactiveStdin을 열어둔 상태로 유지, 일반적으로 대화형 컨테이너 섹션을 시작하기 위해서 -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

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

Docker start

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

Docker stop

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

docker

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 create

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

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

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

Docker images

도커 이미지 목록 확인하기


Docker pull

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

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

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

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













docker cp

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


Docker inspect [NAMES] OR [ID] ★

docker inspect 명령어는 컨테이너뿐만 아니라 네트워크, 볼륨, 이미지등 모든 도커 단위의 정보를 얻을 때 사용한다.

이름이 중복되는 경우 컨테이너에 대해 먼저 수행되며 이는 --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 diff

컨테이너가 시작된 이후에 변경된 파일의 목록이 반환된다.

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

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는 실행중인 컨테이너에 명령어를 내리는 정도이다.