Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[DevOps/Docker] 명령어 및 옵션 목록 본문

DevOps/Docker

[DevOps/Docker] 명령어 및 옵션 목록

scii 2020. 12. 14. 19:12

Docker Daemon의 옵션 및 기본 옵션

docker [옵션] <명령> <매개 변수>
  • --api-enable-cors=false : API를 사용할 때 CORS(Cross-origin resource sharing)를 활성화한다.
  • -b, --bridge="" : 미리 만들어 놓은 네트워크 브릿지 인터페이스를 사용한다. none을 설정하면 컨테이너에서 네트워크를 사용하지 않는다.
  • --bip="" : CIDR 표시법으로 docker0의 IP 대역을 설정한다. -b 옵션과는 함께 사용할 수 없다.
    • --bit="192.168.0.1/24"
  • -D, --debug=false : 디버그 모드를 활성화한다.
  • -d, --daemon=false : 데몬 모드로 실행한다.
  • --dns=[ ] : docker가 사용할 DNS 서버를 설정한다.
  • --dns-search=[ ] : docker가 사용할 DNS 검색 도메인을 설정한다. example.com을 설정하면 DNS 서버에 hello를 질의할 때 hello.example.com 을 먼저 찾는다.
  • -e, --exec-driver="native" : docker 실행 드라이버를 설정한다. native와 lxc를 설정할 수 있다.
  • --fixed-cidr="" : IPv4 주소를 할당하는 대역을 고정한다. 이 IP 대력은 -b 옵션으로 설정한 브릿지 네트워크 또는 --bip로 설정한 IP 대력 안에 있어야 한다.
    • --fixed-cidr="172.17.42.0/29"
    • 172.17.42.0/29로 설정하면 172.17.41.0 ~ 172.17.42.7 안에서 IP 주소를 할당한다.
  • -G, --group="docker" : 데몬 모드로 실행하면서 -H 옵션으로 유닉스 소켓을 생성했을 때 유닉스 소켓의 그룹을 설정한다. "" 빈 문자열을 지정하면 그룹을 설정하지 않는다.
  • -g, --graph="/var/lib/docker" : docker가 사용할 디렉토리의 최상위 경로를 설정한다.
  • -H, --host=[ ] : 데몬 모드로 실행할 때 소켓 경로를 설정한다.
    • tcp://<IP 주소 또는 도메인>:<포트 번호>
    • unix:///<소켓 경로>
    • fd://* 또는 fd://socketfd
  • --icc=true : 컨테이너 간의 통신을 활성화한다.
  • --insecure-registry=[ ] : 사설 인증서를 사용하여 docker 레지시트리 서버를 구축했을 때 docker 레지스트리 서버의 도메인을 설정한다. 
  • --ip=0.0.0.0 : docker run 명령의 -p 옵션으로 포트를 외부에 노출할 때 바인딩할 기본 IP 주소를 설정한다.
  • --ip-forward=true : net.ipv4.ip_forward를 활성화한다.
  • --ip-masq=true : 브릿지의 IP 대력에 대한 IP 마스커레이딩을 활성화한다.
  • --iptables=true : iptables 규칙을 활성화한다.
  • --mtu=0 : 컨테이너의 네트워크 최대 전송 단위(MTU, Maximum trasmission unit)를 설정한다. 값을 설정하지 않으면 라우터의 기본 MTU 값이나 1500이 설정된다.
  • -p, --pidfile="/var/run/docker.pid" : PID 파일 경로를 설정한다.
  • --registry-mirror=[ ] : docker 레지스트리 미러 주소를 설정한다.
  • -s, --storage-driver="" : 스토리지 드라이버를 설정한다. aufs가 기본 값이며 devicemapper를 사용할 수 있다.
  • --selinux-enabled=false : SELinux를 활성화한다. SELinux는 아직 BTRFS 스토리지 드라이버를 지원하지 않는다.
  • --storage-opt=[ ] : 스토리지 드라이버 옵션을 설정한다.
  • --tls=false : TLS를 사용한다. 
  • --tlscacert="/home/exampleuser/.docker/ca.pem" : 원격 인증에 사용할 CA 인증서 파일 경로를 설정한다.
  • --tlscert="/home/exampleuser/.docker/cert.pem" : 인증서 파일 경로를 설정한다.
  • --tlskey="/home/exampleuser/.docker/key.pem" : 키 파일 경로를 설정한다.
  • --tlsverify=false : TLS 원격 인증을 사용하며, 데몬과 클라이언트 모두 인증서로 검증한다.
  • -v, --version=false : 버전 정보를 출력한다.

attach

다음은 실행되고 있는 컨테이너에 표준 입력(stdin)과 표준 출력(stdout)을 연결하는 attach 명령이다.

docker attach <옵션> <컨테이너 이름 or ID>
  • --no-stdin=false : 표준 입력을 연결하지 않는다.
  • --sig-proxy=true : 모든 시그널을 프로세스에 전달한다(TTY 모드가 아닐 때도). 단 SIGCHLD, SIGKILL, SIGSTOP 시그널은 전달하지 않는다. 자주 사용하는 시그널은 다음과 같다.
    • SIGINT : Interrupt 시그널, ctrl+c 를 입력했을 때 발생.
    • SIGQUIT : Quit 시그널, ctrl+\ 를 입력했을 때 발생.
    • EOF : ctrl+d 를 입력했을 때 발생하며 attach된 상태를 종료한다.
SIGCHLD : 자식 프로세스가 정지되거나 종료되었을 때 부모 프로세스에 전달되는 시그널이다.
SIGKILL : 프로세스를 강제로 종료하는 시그널이다.
SIGSTOP : 프로세스를 정지하는 시그널이다.

보통 컨테이너에 bash와 같은 쉘을 실행하고 docker attach 명령으로 연결하여 각종 명령을 실행한다.

// bash쉘을 백그라운드로 실행
$ docker run -itd --name hello ubuntu /bin/bash

// attach 명령으로 쉘에 접근
$ docker attach hello

프로세스의 출력 내용을 확인할 때도 docker attach 명령을 사용한다.

$ docker container run -d --name hello ubuntu \
    /bin/bash -c "while true; do echo Hello World!; sleep 1; done"
    
$ docker attach hello

Hello World!
Hello World!
Hello World!
...

build

다음은 Dockerfile로 이미지를 생성하는 build 명령이다.

docker build [옵션] <Dockerfile 경로>

Dockerfile 경로는 로컬 경로와 URL을 사용할 수 있고, - 를 설정하면 표준 입력으로 Dockerfile 내용을 받을 수 있다.

  • --force-rm=false : 이미지 생성에 실패했을 때도 임시 컨테이너를 삭제한다.
  • --no-cahce=false : 이전 빌드에서 생성된 캐시를 사용하지 않는다. docker는 이미지 생성 시간을 줄이기 위해서 Dockerfile의 각 과정을 캐시하는데, 이 캐시를 사용하지 않고 처음부터 다시 이미지를 생성한다.
  • -q, --quiet=false : Dockerfile의 RUN이 실행한 출력 결과를 표시하지 않는다.
  • --rm=true : 이미지 생성에 성공했을 때 임시 컨테이너를 삭제한다.
  • -t, --tag="" : 저장소 이름, 이미지 이름, 태그를 설정한다. <저장소 이름>/<이미지 이름>:<태그> 형식이다.
    • hello
    • hello:1.0
    • exampleuser/hello
    • exampleuser/hello:1.0

보통 Dockerfile이 있는 경로에서 docker build 명령을 실행한다. Dockerfile이 있는 특정 경로를 설정할 수도 있다.

// Dockerfile 특정 경로 설정

$ docker build -t hello .
$ docker build -t hello /opt/hello
$ docker build -t hello ../../

다음은 인터넷에 있는 Dockerfile의 URL을 사용하여 이미지를 생성한다.

$ docker build -t hello https://raw/githubusercontent.com/abcd/dockerfile-examples/master/apache/Dockerfile

다음은 Dockerfile 경로에 - 를 설정하여 Dockerfile 내용을 표준 입력으로 받는다.

$ echo -e "FROM ubuntu\nRUN apt-get update" | docker build -t hello -

$ cat Dockerfile | docker build -t hello -

$ docker build -t hello - < Dockerfile

echo 명령으로 문자열을 직접 출력해도 되고, cat 명령으로 파일의 내용을 파이프로 보내도 된다.


commit

다음은 컨테이너의 변경 사항을 이미지로 생성하는 commit 명령이다.

docker commit [옵션] <컨테이너 이름 or ID> <저장소 이름>/<이미지 이름>:<태그>
  • -a, --author="" : "Foo Bar <foo@bar.com>" 처럼 이미지를 생성한 사람의 정보를 설정한다.
  • -m, --message="" : 변경 사항에 대한 로그 메시지를 설정한다.
  • -p, --pause=true : 이미지를 생성하는 동안 컨테이너를 일시 정지한다.
$ docker container run -it --name hello ubuntu /bin/bash

root@1234:/# echo "Hello World" > hello.txt
root@1234:/# exit

$ docker commit -a "Foo Bar <foo@bar.com>" -m "add hello.txt" hello hello:2.0

cp

컨테이너의 디렉토리나 파일을 호스트로 복사하는 cp 명령이다. 경로에 디렉토리 경로를 지정하면 디렉토리의 전체 내용을 호스트로 복사한다.

docker cp <컨테이너 이름>:<경로> <호스트 경로>
$ docker container run -it --name hello ubuntu /bin/bash

root@1234:/# echo "Hello World" > hello.txt
root@1234:/# exit

$ docker cp hello:/hello.txt .
$ ls

hello.txt

다음은 컨테이너의 /etc 디렉토리 전체를 호스트로 복사한다.

$ docker cp hello:/etc .

create

이미지로 컨테이너를 생성하는 create 명령이다. run 명령과는 달리 컨테이너를 생성만할 뿐 시작하지는 않는다.

docker create [옵션] <이미지 이름 or ID> <명령> <매개 변수>

옵션에 값을 설정할 때 =와 "는 생략해도 된다.

  • -a, --attach=[ ] : 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)를 연결한다.
    • --attach="stdin"
  • --add-host=[ ] : 컨테이너의 /etc/hosts/에 호스트 이름과 IP 주소를 추가한다.
    • --add-host=hello:192.168.0.1
  • -c, --cpu-shares=0 : CPU 자원 분배 설정이다. 설정의 기본 값은 1024이며 각 값은 상대적으로 적용된다.
    • --cpu-shares=2048 처럼 설정하면 기본 값 보다 두 배 많은 CPU 자원을 할당한다.
    • 이 설정 값은 리눅스 커널의 cgroups에서 사용된다.
  • --cap-add=[ ] : 컨테이너에서 cgroups의 특정 Capability를 사용한다. ALL을 지정하면 모든 Capability를 사용한다.
    • --cap-add="MKNOD" --cap-add="NET_ADMIN" 처럼 설정한다.
  • --cap-drop=[ ] : 컨테이너에서 cgroups의 특정 Capability를 제외한다.
  • --cidfile="" : cid 파일 경로를 설정한다. cid 파일에는 생성된 컨테이너의 ID가 저장된다.
  • --cpuset="" : 멀티코어 CPU에서 컨테이너가 실행된 코어를 설정한다.
    • --cpuset="0,1" 처럼 설정하면 첫 번째, 두 번째 CPU 코어를 사용한다.
    • --cpuset="0-3" 처럼 설정하면 첫 번째부터 네 번째 CPU 코어까지 사용한다.
  • --device=[ ] : 호스트의 장치를 컨테이너에서 사용할 수 있도록 연결한다. <호스트 장치>:<컨테이너 장치> 형식이다.
    • --device="/dev/sda1:/dev/sda1" 처럼 설정하면 호스트의 /dev/sda1 블록 장치를 컨테이너에서도 사용할 수 있다.
  • --dns=[ ] : 컨테이너에서 사용할 DNS 서버를 설정한다.
    • --dns="8.8.8.8"
  • --dns-search=[ ] : 컨테이너에서 사용할 DNS 검색 도메인을 설정한다.
    • --dns-search="example.com" 처럼 설정하면 DNS 서버에 hello를 질의할 때 hello.example.com을 먼저 찾는다.
  • -e, --env=[ ] : 컨테이너에 환경 변수를 설정한다. 보통 설정 값이나 비밀번호를 전달할 때 사용한다.
    • -e MYSQL_ROOT_PASSWORD=examplepassword
  • --entrypoint="" : Dockerfile의 ENTRYPOINT 설정을 무시하고 강제로 다른 값을 설정한다.
    • --entrypoint="/bin/bash"
  • --env-file=[ ] : 컨테이너에 환경 변수가 설정된 파일을 적용한다.
    • --env-file="/etc/environment"
  • --expose=[ ] : 컨테이너의 포트를 호스트와 연결만 하고 외부에는 노출하지 않는다.
    • --expose="3306"
  • -h, --hostname="" : 컨테이너의 호스트 이름을 설정한다.
  • -i, --interactive=false : 표준 입력(stdin)을 활성화하면 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지한다. 보통 이 옵션을 사용하여 bash에 명령을 입력한다.
  • --link=[ ] : 컨테이너끼리 연결한다. <컨테이너 이름>:<별칭> 형식이다.
    • --link="db:db"
  • --lxc-conf=[ ] : LXC 드라이버를 사용한다면 LXC 옵션을 설정할 수 있다.
    • --lxc-conf="lxc.cgroup.cpuset.cpus=0,1"
  • -m, --memory="" : 메모리 한계를 설정한다. <숫자><단위> 형식이며 단위는 b, k, m, g를 사용할 수 있다.
    • --memory="100000b"
    • --memory="1000k"
    • --memory="128m"
    • --memory="1g"
  • --name="" : 컨테이너의 이름을 설정한다.
  • --net="bridge" : 컨테이너의 네트워크 모드를 설정한다.
    • bridge : docker 네트워크 브릿지에 새 네트워크를 생성한다.
    • none : 네트워크를 사용하지 않는다.
    • container:<컨테이너 이름 or ID> : 다른 컨테이너의 네트워크를 함께 사용한다.
    • host : 컨테이너 안에서 호스트의 네트워크를 그대로 사용한다. 호스트 네트워크를 사용하면 D-Bus를 통하여 호스트의 모든 시스템 서비스에 접근할 수 있으므로 보안에 취약해진다.
  • -P, --publish-all=false : 호스트에 연결된 컨테이너의 모든 포트를 외부에 노출한다.
  • -p, --publish=[ ] : 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출한다. 보통 웹 서버의 포트를 노출할 때 주로 사용한다.
    • <호스트 포트>:<컨테이너 포트> 예) -p 80:80
    • <IP 주소>:<호스트 포트>:<컨테이너 포트> 호스트에 너트워크 인터페이스가 여러 개이거나 IP 주소가 여러 개일 때 사용한다. 예) -p 192.168.0.10:80:80
    • <IP 주소>::<컨테이너 포트> 호스트 포트를 설정하지 않으면 호스트의 포트 번호가 무작위로 설정된다. 예) -p 192.168.0.10::80
    • <컨테이너 포트> 컨테이너 포트만 설정하면 호스트의 포트 번호가 무작위로 설정된다. 예) -p 80
  • --privileged=false : 컨테이너 안에서 호스트의 리눅스 커널 기능(Capability)을 모두 사용한다.
  • --restart="" : 컨테이너 안의 프로세스 종료 시 재시작 정책을 설정한다.
    • no : 프로세스가 종료되더라도 컨테이너를 재시작하지 않는다. 예) --restart="no"
    • on-failure : 프로세스의 Exit Code가 0이 아닐 때만 재시작한다. 재시도 횟수를 지정할 수 있다. 횟수를 지정하지 않으면 계속 재시작한다. 예) --restart="on-failure:10"
    • always : 프로세스의 Exit Code와 상관없이 재시작한다. 예) --restart="always"
  • --security-opt=[ ] : SELinux, AppArmor 옵션을 설정한다.
    • --security-opt="label:level:TopSecret"
  • -t, --tty=false : TTY 모드 (pseudo-TTY)를 사용한다. bash를 사용하려면 이 옵션을 설정해야 한다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 쉘이 표시되지 않는다.
  • -u, --user="" : 컨테이너가 실행될 리눅스 사용자 계정 이름 또는 UID를 설정한다.
  • -v, --volume=[ ] : 데이터 볼륨을 설정 옵션이다. 호스트와 공유할 디렉토리를 설정하여 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장한다. 호스트 디렉토리 뒤에 :ro, :rw 를 붙여서 읽기 쓰기 설정을 할 수 있으며 기본 값은 :rw 이다. 
    • <컨테이너 디렉토리> 예) -v /data
    • <호스트 디렉토리>:<컨테이너 디렉토리> 예) -v /data:/data
    • <호스트 디렉토리>:<컨테이너 디렉토리>:<ro, rw> 예) -v /data:data:ro
    • <호스트 파일>:<컨테이너 파일> 예) -v /var/run/docker.sock:/var/run/docker.sock
  • --volumes-from=[ ] : 데이터 볼륨 컨테이너를 연결하며 <컨테이너 이름 or ID>:<ro, rw> 형식으로 설정한다. 기본적으로 읽기 쓰기 설정은 -v 옵션의 설정을 따른다. 
    • --volumes-from="hello"
    • --volumes-from="hello:ro" 처럼 설정하면 데이터 볼륨을 읽기 전용으로 사용한다.
    • --volumes-from="hello:rw" 처럼 설정하면 데이터 볼륨에 읽기 쓰기 모두 할 수 있다.
  • -w, --workdir="" : 컨테이너 안의 프로세스가 실행될 디렉토리를 설정한다.
    • --workdir="/var/www"
$ docker container create -it --name hello ubuntu /bin/bash

docker create 명령으로 생성한 컨테이너를 사용하려면 다음과 같이 docker start 명령으로 컨테이너를 시작해주어야 한다.

$ docker container start hello

$ docker container attach hello
root@abcd:/#

diff

컨테이너에서 변경된 파일을 확인하는 diff 명령이다.

docker container diff <컨테이너 이름 or ID>

변경된 파일을 비교하는 기준은 컨테이너를 생성한 이미지 내용이다.

  • A : 추가된 파일
  • C : 변경된 파일
  • D : 삭제된 파일
$ docker container run -it --name hello ubuntu /bin/bash
root@abcd:/# echo "Hello World" > hello.txt
root@abcd:/# rm /usr/bin/yes
root@abcd:/# exit

$ docker diff hello
A /.bash_history
A /hello.txt
C /usr
C /usr/bin
D /usr/bin/yes

hello.txt 파일을 생성했으므로 A /hello.txt가 출력되고, /usr/bin/yes 파일을 삭제했으므로 D /usr/bin/yes가 출력된다.
/usr/bin/yes 파일이 삭제되면서 /usr/bin, /usr 디렉토리가 변경되었으므로 C /usr, C /usr/bin 이 출력된다.
그리고 쉘에서 명령을 입력하면 .bash_history 파일도 변경되므로 A /.bash_history도 출력된다.


events

docker 서버에서 일어난 이벤트를 실시간으로 출력하는 events 명령이다.

docker events
  • --since="" : 특정 timestamp 이후의 이벤트를 출력한다.
  • --until="" : 특정 timestamp까지 이벤트를 출력한다.

docker events 명령을 실행하면 대기 상태가 된다.

$ docker events

다른 터미널을 실행하고 다음과 같이 컨테이너를 실행한다.

$ docker container run -it ubuntu /bin/bash

docker events 명령을 실행한 터미널에는 방금 실행한 명령의 이벤트가 출력된다.

docker events 명령에서 --since 옵션에는 Unix Timestamp 형식이나 날짜를 지정하면 된다.


exec 

외부에서 컨테이너 안의 명령을 실행하는 명령이다.

docker container exec [옵션] <컨테이너 이름 or ID> <명령> <매개 변수>
  • -d, --detach=false : 명령을 백그라운드로 실행한다.
  • -i, --interactive=false : 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지한다.
  • -t, --tty=false : TTY 모드(pseudo-TTY)를 사용한다. bash를 사용하려면 이 옵션을 설정해야 한다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 쉘이 표시되지 않는다.

다음 명령을 실행하여 컨테이너를 생성한다.

$ docker container run -d --name hello ubuntu \
     /bin/bash -c "while true; do echo Hello World!; sleep 1; done"

1초마다 Hello World를 출력하도록 설정하였다. 이 상태에서 다음과 같이 컨테이너 안의 /bin/bash를 실행하여 bash 쉘에 연결한다. bash 쉘을 연결할 때는 -it 옵션을 사용해야 명령을 입력하고 결과를 확인할 수 있다.

$ docker container exec -it hello /bin/bash

root@abcd:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   5555  3333 ?        Ss   14:07   0:00 /bin/bash -c while true; do echo Hello World; sleep 1; done
root        53  0.1  0.1   5555  3333 pts/0    Ss   14:08   0:00 /bin/bash

컨테이너 안에서 ps aux 명령을 실행해보면 Hello World를 출력하는 /bin/bash와는 별개로 docker exec 명령으로 실행한 /bin/bash를 볼 수 있다.

exit를 입력하여 이 bash 쉘을 빠져 나오더라도 컨테이너는 정지되지 않고 계속 실행된다. 이처럼 docker exec 명령을 활용하면 데몬이 실행되고 있는 컨테이너에 bash 쉘을 연결하여 다양한 작업을 할 수 있다.

이번에는 bash 쉘을 연결하지 않고, 다음과 같이 apt-get, yum 등의 명령을 실행하여 컨테이너 안에 redis-server 패키지를 설치해보자.

$ docker container exec hello apt-get update
$ docker container exec hello apt-get install -y redis-server

다음과 같이 -d 옵션을 사용하여 명령(프로세스)을 백그라운드로 실행할 수 있다. 

$ docker container exec -d hello redis-server
$ docker container top hello ax

export

컨테이너의 파일시스템을 tar파일로 저장하는 export 명령이다.

docker container export <컨테이너 이름 or ID>

docker export 명령만 실행하면 컨테이너의 내용이 표준 출력(stdout)으로 출력되므로 반드시 리다이렉션을 설정한다.

$ docker container run -itd --name hello ubuntu /bin/bash

$ docker container export hello > hello.tar

history

이미지의 히스토리를 출력하는 history 명령이다. 

docker history [옵션] <이미지 이름 or ID>
  • --no-trunc=false : 내용이 길어 생략된 부분을 모두 출력한다.
  • -q, --quiet=false : 이미지 ID만 출력한다.
$ echo -e "FROM ubuntu\nRUN apt-get update" | docker build -t hello -

$ docker history hello

hello 이미지는 Dockerfile에서 apt-get update 명령을 실행했으므로 히스토리에도 /bin/sh -c apt-get update가 출력된다.


images (image ls)

이미지 목록을 출력하는 images 명령이다.

docker images [옵션] <이미지 이름>

// 혹은

docker image ls [옵션] <이미지 이름>
  • -a, --all=false : 부모 이미지까지 모두 표시한다.
  • -f, --filter=[ ] : 출력 결과 필터를 설정한다. "dangling=true" 를 설정하면 이름이 없는 이미지만 출력한다.
  • --no-trunc=false : 내용이 길어서 생략된 부분을 모두 출력한다.
  • -q, --quiet=false : 이미지 ID만 출력한다.

docker images 명령에 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력된다.

$ docker images ubuntu

$ docer image ls ubuntu

-f 옵션에 "dangling=true"를 설정하여 이름이 없는 이미지만 출력한다.

$ echo -e "FROM ubuntu\nRUN apt-get update" | docker build -

$ docker images -f "dangling=true"

$ docker image ls -f "dangling=true"

이름 없는 이미지를 모두 삭제하려면 다음과 같이 명령을 실행한다.

$ docker rmi $(docker images -f "dangling=true" -q)

// 혹은

$ docker image rm $(docker image ls -f "dangling=true" -q)

import

tar 파일(.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz)로 압축된 파일 시스템으로부터 이미지를 생성하는 import 명령이다.

docker image import <tar 파일의 URL 또는 -> <저장소 이름>/<저장소 이름>/<이미지 이름>:<태그>

tar 파일의 URL을 설정할 수 있고, -를 설정하면 표준 입력으로 tar파일의 내용을 받을 수 있다. docker container export 명령으로 생성한 tar 파일을 사용해도 되고 직접 파일 시스템을 구성해도 된다.

다음 명령은 인터넷에 있는 tar 파일의 URL을 사용하여 이미지를 생성한다.

$ docker image import http:example.com/hello.tar.gz hello

다음 명령과 같이 로컬에 있는 hello.tar 파일의 내용을 파이프로 docker image import 명령에 넘겨서 이미지를 생성할 수도 있다.

$ cat hello.tar | docker image import - hello

현재 디렉토리의 내용을 바로 이미지로 생성하려면 다음과 같이 명령을 실행한다.

$ tar -c . | docker image import - hello

info

현재 시스템 정보와 docker 컨테이너, 이미지 개수, 설정 등을 출력하는 info 명령이다.

docker info

inspect

컨테이너와 이미지의 세부 정보를 JSON 형식으로 출력하는 inspect 명령이다.

docker image inspect <이미지 이름 or ID>

docker container inspect <컨테이너 이름 or ID>
  • -f, --format="" : 지정한 정보만 출력한다. "{{ .NetworkSettings.IPAddress }}" 처럼 .(점)으로 JSON 문서의 하위 항목을 설정할 수 있다.

다음 명령은 이미지의 세부 정보에서 아키텍처와 OS를 출력한다.

$ docker image inspect --format="{{ .Architecture }} {{ .Os }}" ubuntu

amd65 linux

다음 명령은 컨테이너의 IP 주소를 출력한다.

$ docker container run -itd --name hello ubuntu /bin/bash

$ docker container inspect --format="{{ .NetworkSettings.IPAddress }}" hello

다음 명령은 세부 정보의 일부 내용을 JSON 형태로 출력한다.

$ docker container inspect -f "{{ json .NetworkSettings }}" hello

다음 명령은 컨테이너의 세부 정보에서 특정 부분만 추출하여 원하는 포맷으로 출력한다.

$ docker container run -itd --name hello -p 80:80 -p 8080:8080 ubuntu /bin/bash

$ docker container inspect --format="{{ range $p, $conf := .NetworkSetting.Ports }} {{ $p }} -> {{ (index $conf 0).HostPort }} {{ end }}' hello

80/tcp -> 80    8080/tcp -> 8080
// .NetworSettings.Ports 의 내용
"Ports": {
  "80/tcp": [
    {
      "HostIp": "0.0.0.0",
      "HostPort": "80"
    }
  ],
  "8080/tcp": [
    {
      "HostIp": "0.0.0.0",
      "HostPort": "8080"
    }
  ]
}

여기서 {{ range $p, $conf := .NetworkSettings.Ports }} 으로 .NetworkSettings.Ports 의 내용을 순회하면서 $p, $conf에 대입한다. 그리고 $p는 그대로 출력하고, $conf 배열에서 첫 번째 항목(index $conf 0)의 .HostPort를 출력한다.

{{ range $p, $conf := .NetworkSettings.Ports }} {{ $p }} -> {{ (index $conf 0).HostPort }} {{ end }}

kill

컨테이너에 KILL 시그널을 보내 컨테이너를 종료하는 kill 명령이다.

docker container kill [옵션] <컨테이너 이름 or ID>
  • -s, --signal="KILL" : 특정 시그널을 보낸다.
$ docker container run -itd --name hello ubuntu /bin/bash

$ docker container kill hello

load

tar 파일로 이미지를 생성하는 load 명령이다.

docker image load [옵션]

tar 파일을 docker image load 명령의 표준 입력(stdin)으로 보내서 이미지를 생성한다. tar 파일은 docker save 명령으로 생성하며 이미지 이름과 태그가 모두 포함되어 있다.

  • -i, --input="" : 표준 입력을 사용하지 않고 파일 경로를 설정하여 이미지를 생성한다.

다음은 ubuntu 이미지를 docker image save 명령을 사용하여 ubuntu.tar 파일로 생성한 뒤 다시 docker image load 명령을 사용하여 이미지로 생성한다.

// docker 이미지 내보내기
$ docker image save -o /tmp/ubuntu.tar ubuntu

// docker 이미지 불러오기
$ docker image load -i /tmp/ubuntu.tar

login

docker 레지스트리에 로그인하는 login 명령이다.

docker login [옵션] <docker 레지스트리 URL>
  • -p, --password="" : 로그인할 때 사용할 비밀번호를 설정한다.
  • -u, --username="" : 로그인할 때 사용할 docker 레지스트리 계정을 설정한다.
$ docker login

logout

docker 레지스트리에서 로그아웃하는 logout 명령이다.

docker logout <docker 레지스트리 서버 URL>
docker logout

logs

컨테이너의 로그를 출력하는 logs 명령이다.

docker container logs <컨테이너 이름 or ID>

docker container attach 명령은 입력도 할 수 있지만 docker contaienr logs 명령은 로그를 출력만 할 수 있따.

  • -f, --follow=false : 로그를 실시간으로 계속 출력한다.
  • -t, --timestamps=false : 로그 앞에 시간 값을 표시한다.
  • --tail="all" : 숫자를 지정하여 최종 로그에서 일정 개수만 출력한다.
$ docker container run -d --name hello ubuntu \
     /bin/bash -c "while true; do echo Hello World; sleep 1; done"
     
$ docker container logs -f hello

Hello World
Hello World
...

port

컨테이너에서 포트가 열려 있는지 확인하는 port 명령이다.

docker port <컨테이너 이름 or ID> <포트>
$ docker container run -itd --name hello -p 80:80 ubuntu /bin/bash

$ docker container port hello 80

0.0.0.0:80

pause

컨테이너에서 실행되고 있는 모든 프로세스를 일시 정지하는 pause 명령이다.

docker container pause <컨테이너 이름 or ID>
$ docker container run -itd --name hello ubuntu /bin/bash

$ docker continer pause hello

ps

컨테이너 목록을 출력하는 ps 명령이다.

docker container ps [옵션]
  • -a, --all=false : 모든 컨테이너를 출력한다. docker container ps 명령은 기본적으로 시작된 컨테이너만 출력한다.
  • --before="" : 특정 컨테이너가 생성되기 전에 생성된 컨테이너를 출력한다. 정지된 컨테이너도 포함된다.
  • -f, --filter=[ ] : 출력 필터를 설정한다. 예) "exited=0"
  • -l, --latest=false : 가장 마지막에 생성된 컨테이너를 출력한다. 정지된 컨테이너도 포함된다.
  • -n=-1 : 숫자를 지정하여 최근에 생성된 컨테이너를 일정 개수만 출력한다. 정지된 컨테이너도 포함된다.
  • --no-trunc=false : 내용이 길어서 생략된 부분을 모두 출력한다.
  • -q, --quiet=false : 컨테이너 ID만 출력한다.
  • -s, --size=false : 컨테이너에서 변경된 데이터의 크기를 출력한다.
  • --since="" : 특정 컨테이너가 생성된 후에 생성된 컨테이너를 출력한다. 정지된 컨테이너도 포함된다.

다음은 정지된 -a 옵션을 사용하여 정지된 컨테이너까지 모두 출력한다.

$ docker container run -itd --name hello1 ubuntu /bin/bash
$ docker container run -itd --name hello2 ubuntu /bin/bash

$ docker container stop hello1

$ docker container ps -a

pull

docker 레지스트리에서 이미지를 받아오는 pull 명령이다.

docker pull [옵션] <저장소 이름>/<이미지 이름>:<태그>
  • -a, --all-tags=false : 이미지의 모든 태그를 받아온다.
  • 저장소 이름에는 docker hub 사용자명을 지정할 수도 있고, 저장소 주소를 지정할 수도 있다.
  • 공식 이미지는 docker hub 사용자명을 생략하고 이미지 이름만 지정한다.
  • 태그를 지정하지 않으면 가장 최근의(latest) 이미지를 받는다.
$ docker image pull centos
$ docker image pull exampleuser/hello:1.0

// 다음은 개인 저장소에서 이미지를 받는다.
$ docker image pull 192.168.0.1:5000/hello:1.0
$ docker image pull exampleregistry.com:5000/hello:1.0

push

docker 레지스트리에 이미지를 올리는 push 명령이다.

docker push <저장소 이름>/<이미지명>:<태그>
  • 저장소 이름에는 docker hub 사용자명을 지정할 수도 있고, 저장소 주소를 지정할 수도 있다.
$ docker image tag hello:1.0 exampleuser/hello:1.0
$ docker image push exampleuser/hello:1.0

// 다음 명령은 개인 저장소에 이미지를 올린다.
$ docker image tag hello:1.0 192.168.0.1:5000/hello:1.0
$ docker image push 192.168.0.1:5000/hello:1.0

$ docker image tag hello:1.0 exampleregistry.com:5000/hello:1.0
$ docker image push exampleregistry.com:5000/hello:1.0

restart

컨테이너를 재시작하는 restart 명령이다.

docker containter restart [옵션] <컨테이너 이름 or ID>
  • -t, --time=10 : 일정 시간동안 컨테이너가 정지될 때까지 기다렸다가 컨테이너를 재시작한다. 초 단위로 설정한다.
$ docker container run -itd --name hello ubuntu /bin/bash

$ docker container restart hello

rm (container rm)

컨테이너를 삭제하는 rm 명령이다.

docker container rm [옵션] <컨테이너 이름 or ID>
  • -f, --force=false : 컨테이너를 강제로 정지한 뒤 삭제한다. (SIGKILL 시그널 사용)
  • -l, --link=false : docker container run 명령의 --link 옵션을 사용하여 연결된 링크만 삭제한다. 컨테이너는 삭제하지 않는다.
  • -v, --volumes=false : 컨테이너에 연결된 데이터 볼륨을삭제한다.

다음 명령은 컨테이너 간의 링크만 삭제한다.

$ docker container run -itd --name db ubuntu /bin/bash
$ docker container run -itd --name hello --link db:db ubuntu /bin/bash

// hello 컨테이너의 /etc/hosts 확인
$ docker container exec hello cat /etc/hosts
172.17.0.3    db 73f313ds3s
172.17.0.4    7432kd8soa

$ docker container rm --link hello/db

// hello 컨테이너의 /etc/hosts 확인
$ docker container exec hello cat /etc/hosts
172.17.0.4    7432kd8soa

모든 컨테이너를 한꺼번에 삭제하려면 다음과 같이 docker container ps 명령의 -a, -q 옵션을 사용하여 컨테이너 ID를 구한 뒤 docker container rm 명령에 넘겨준다.

$ docker container rm `docker container ps -aq`

// 혹은

$ docker container rm $(docker container ps -aq)

-a, -q 처럼 짧은 옵션은 서로 붙여 쓸 수 있다.


rm (image rm)

이미지를 삭제하는 rm 명령이다. 태그를 지정하지 않으면 latest 태그를 삭제한다.

docker rmi <저장소 이름>/<이미지 이름 or ID>:<태그>

// 혹은

docker image rm <저장소 이름>/<이미지 이름 or ID>:<태그>
  • -f, --force=false : 이미지를 강제로 삭제한다.
  • --no-prune=false : 태그가 없는 부모 이미지를 삭제하지 않는다.

모든 이미지를 한꺼번에 삭제하려면 다음과 같이 docker image ls 명령의 -a, -q 옵션을 사용하여 이미지 ID를 구한 뒤 docker image rm 명령에 넘겨준다.

$ docker image rm `docker image ls -aq`

// 혹은

$ docker image rm $(docker image ls -aq)

run

이미지로 컨테이너를 생성하는 run 명령이다.

docker container run [옵션] <이미지 이름 or ID> [명령] [매개 변수]

옵션에 값을 설정할 때 =와 "는 생략해도 된다.

  • -a, --atach=[ ] : 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)를 연결한다.
    • --attach="stdin"
  • --add-host=[ ] : 컨테이너의 /etc/hosts에 호스트 이름과 IP 주소를 추가한다.
    • --add-host=hello:192.168.1.0
  • -c, --cpu-shares=0 : CPU 자원 분배 설정이다. 설정의 기본 값은 1024이며 각 값은 상대적으로 적용된다.
    • --cpu-shares=2048처럼 설정하면 기본 값보다 두 배 많은 CPU 자원을 할당한다.
    • 이 설정 값은 리눅스 커널의 cgroups에서 사용된다.
  • --cap-add=[ ] : 컨테이너에서 cgroup의 특정 Capability를 사용한다. ALL을 지정하면 모든 Capability를 사용한다.
    • --cap-add="MKNOD" --cap-add="NET_ADMIN" 처럼 설정한다.
  • --cap-drop=[ ] : 컨테이너에서 cgroups의 특정 Capability를 제외한다.
  • --cidfile="" : cid 파일 경로를 설정한다. cid 파일에는 생성된 컨테이너의 ID가 저장된다.
  • --cpuset="" : 멀티코어 CPU에서 컨테이너가 실행될 코어를 설정한다.
    • --cpuset="0,1"처럼 설정하면 첫 번째, 두 번째 CPU 코어를 사용한다.
    • --cpuset="0-3"처럼 설정하면 첫 번째부터 네 번째 CPU 코어까지 사용한다.
  • -d, --detach=false : Detached 모드이다. 보통 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행된다.
  • --device=[ ] : 호스트의 장치를 컨테이너에서 사용할 수 있도록 연결한다. <호스트 장치>:<컨테이너 장치> 형식이다.
    • --device="/dev/sda1:/dev/sda1"처럼 설정하면 호스트의 /dev/sda1 블록 장치를 컨테이너에서도 사용할 수 있다.
  • --dns=[ ] : 컨테이너에서 사용할 DNS 서버를 설정한다.
    • --dns="8.8.8.8"
  • --dns-search=[ ] : 컨테이너에서 사용할 DNS 검색 도메인을 설정한다.
    • --dns-search="example.com"처럼 설정하면 DNS 서버에 hello를 질의할 때 hello.example.com을 먼저 찾는다.
  • -e, --env=[ ] : 컨테이너에 환경 변수를 설정한다. 보통 설정 값이나 비밀번호를 전달할 때 사용한다.
    • -e MYSQL_ROOT_PASSWORD=examplepassword
  • --entrypoint="" : Dockerfile의 ENTRYPOINT 설정을 무시하고 강제로 다른 값을 설정한다.
    • --entrypoint="/bin/bash"
  • --env-file=[ ] : 컨테이너에 환경 변수가 설정된 파일을 적용한다.
    • --env-file="/etc/envrionment"
  • --expose=[ ] : 컨테이너의 포트를 호스트와 연결만 하고 외부에는 노출하지 않는다.
    • --expose="3306"
  • -h, --hostname="" : 컨테이너의 호스트 이름을 설정한다.
  • -i, --interactive=false : 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지한다. 보통 이 옵션을 사용하여 bash에 명령을 입력한다.
  • --link=[ ] : 컨테이너끼리 연결한다. <컨테이너 이름>:<별칭> 형식이다.
    • --link="db:db"
  • --lxc-conf=[ ] : LXC 드라이버를 사용한다면 LXC 옵션을 설정할 수 있다.
    • --lxc-conf="lxc.cgroup.cpuset.cpus=0,1"
  • -m, --memory="" : 메모리 한계를 설정한다. <숫자><단위> 형식이며 단위는 b, k, m, g를 사용할 수 있다.
    • --memory="100000b"
    • --memory="1000k"
    • --memory="128m"
    • --memory="1g"
  • --name="" : 컨테이너에 이름을 설정한다.
  • --net="bridge" : 컨테이너의 네트워크 모드를 설정한다.
    • bridge : docker 네트워크 브릿지에 새 네트워크를 생성한다.
    • none : 네트워크를 사용하지 않는다.
    • container:<컨테이너 이름 or ID> : 다른 컨테이너의 네트워크를 함께 사용한다.
    • host : 컨테이너 안에서 호스트의 네트워크를 그대로 사용한다. 호스트 네트워크를 사용하면 D-Bus를 통하여 호스트의 모든 시스템 서비스에 접근할 수 있으므로 보안에 취약해진다.
  • -P, --publish-all=flase : 호스트에 연결된 컨테이너의 모든 포트를 외부에 노출한다.
  • -p, --publish=[ ] : 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출한다. 보통 웹 서버의 포트를 노출할 때 주로 사용한다.
    • <호스트 포트>:<컨테이너 포트> 예) -p 80:80
    • <IP 주소>:<호스트 포트>:<컨테이너 포트> 호스트에 네트워크 인터페이스가 여러 개이거나 IP 주소가 여러 개일 때 사용한다. 예) -p 192.168.0.1:80:80
    • <IP 주소>::<컨테이너 포트> 호스트 포트를 설정하지 않으면 호스트의 포트 번호가 무작위로 설정된다. 예) -p 192.168.0.1::80
    • <컨테이너 포트> 컨테이너 포트만 설정하면 호스트의 포트 번호가 무작위로 설정된다. 예) -p 80
  • --privileged=false : 컨테이너 안에서 호스트의 리눅스 커널 기능(Capability)을 모두 사용한다.
  • --restart="" : 컨테이너 안의 프로세스 종료 시 재시작 정책을 설정한다.
    • no : 프로세스가 종료되더라도 컨테이너를 재시작하지 않는다. 예) --restart="no"
    • on-failure : 프로세스의 Exit Code가 0이 아닐 때만 재시작한다. 재시도 횟수를 지정할 수 있다. 횟수를 지정하지 않으면 계속 재시작한다. 예) --restart="on-failure:10"
    • always : 프로세스의 Exit Code와 상관없이 재시작한다. 예) --restart="always"
  • --rm=false : 컨테이너 안의 프로세스가 종료되면 컨테이너를 자동으로 삭제한다. -d 옵션과 함께 사용할 수 없다.
  • --security-opt=[ ] : SELinux, AppArmor 옵션을 설정한다.
    • --security-opt="label:level:TopSecret"
  • --sig-proxy=true : 모든 시그널을 프로세스에 전달한다(TTY 모드가 아닐 때도). 단 SIGCHLD, SIGKILL, SIGSTOP 시그널은 전달하지 않는다.
  • -t, --tty=false : TTY 모드(pseudo-TTY)를 사용한다. bash를 사용하려면 이 옵션을 설정해야 한다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 쉘이 표시되지 않는다.
  • -u, --user="" : 컨테이너가 실행될 리눅스 사용자 계정 이름 또는 UID를 설정한다.
  • -v, --volume[ ] : 데이터 볼륨을 설정한다. 호스트와 공유할 디렉토리를 설정하여 파일을 컨테이너에 저장하지 않고 호스트에 바로 저장한다. 호스트 디렉토리 뒤에 :ro, :rw를 붙여서 읽기 쓰기 설정을 할 수 있으며 기본 값은 :rw이다.
    • <컨테이너 디렉토리> 예) -v /data
    • <호스트 디렉토리>:<컨테이너 디렉토리> 예) -v /data:/data
    • <호스트 디렉토리>:<컨테이너 디렉토리>:<ro, rw> 예) -v /data:/data:ro
    • <호스트 파일>:<컨테이너 파일> 예) -v /var/run/docker.sock:/var/run/docker.sock
  • --volumes-from=[ ] : 데이터 볼륨 컨테이너를 연결하며 <컨테이너 이름 or ID>:<ro, rw> 형식으로 설정한다. 기본적으로 읽기 쓰기 설정은 -v 옵션의 설정을 따른다.
    • --volumes-from="hello"
    • --volumes-from="hello:ro"처럼 설정하면 데이터 볼륨을 읽기 전용으로 사용한다.
    • --volumes-from="hello:rw"처럼 설정하면 데이터 볼륨을 읽기 쓰기 모두 할 수 있다.
  • -w, --workdir="" : 컨테이너 안의 프로세스가 실행될 디렉토리를 설정한다.
    • --workdir="/var/www"
=[ ] 는 옵션을 사용할 때 설정 값을 달리하여 여러 번 사용할 수 있다는 뜻이다. -p, --publish=[ ] 옵션을 예로 들면 다음과 같다.

$ docker container run -d -p 80:80 -p 443:443 nginx

다음은 -i, -a 옵션을 사용하여 "Hello World" 문자열을 컨테이너 안에 있는 cat 명령의 표준 입력으로 보낸다. docker container logs 명령으로 로그를 출력해보면 cat 명령이 출력한 문자열이 표시된다.

$ ID=$(echo "Hello World" | docker container run -i -a stdin ubuntu cat -)

$ docker container logs $ID
Hello World

다음은 --cap-add 옵션을 사용하여 컨테이너에서 SYS_ADMIN_Capability를 사용할 수 있도록 설정한다.

$ docker container run -it --rm ubuntu bash

root@abcd:/# mount -t tmpfs none /mnt
mount: permission denied

// ---------------------------------------------------

$ docker container run -it --rm --name hello --cap-add SYS_ADMIN ubuntu bash

root@abcd:/# mount -t tmpfs none /mnt
root@abcd:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
none             63G     0   63G   0% /mnt
...

다음 명령은 -p 옵션을 사용하여 컨테이너의 8080번 포트를 호스트의 192.168.0.10, 80번 포트에 연결하고 외부에 노출한다.

$ docker container run -p 192.168.0.1:80:8080 ubuntu bash

다음 명령은 --expose 옵션을 사용하여 80번 포트를 호스트에 연결만 하고 외부에 노출하지 않는다. 이렇게 하면 외부에서는 접속할 수 없고, 호스트와 --link 옵션으로 연결한 컨테이너에서만 접속할 수 있다.

$ docker container run --expose 80 ubuntu bash

다음은 -e 옵션을 사용하여 컨테이너에서 환경 변수 HELLO_VAR를 설정한다.

$ docker containter run -it -e HELLO_VAR="Hello World" ubuntu bash

root@abcd:/# echo $HELLO_VAR
Hello World

다음 내용과 같이 환경 변수 파일을 작성한다.

// example-env.sh

HELLO=1234
WORLD=abcd
EXAMPLE

--env-file 옵션으로 환경 변수 파일을 지정하면 컨테이너 안에서 설정한 환경 변수를 사용할 수 있다. 여기서 --env-file 옵션으로 읽어온 환경 변수의 이름과 -e 옵션으로 설정한 환경 변수의 이름이 같으면 -e 옵션이 이전 환경 변수의 값을 덮어 쓴다.

$ docker container run -it --env-file \
     ./example-env.sh -e HELLO="Hello World" ubuntu bash
     
root@abcd:/# echo $HELLO
Hello World
root@abcd:/# echo $WORLD
abcd

다음과 같이 example-env.sh 파일에 EXAMPLE 처럼 값을 설정하지 않았을 때 -e 옵션을 사용하지 않고 프로세스의 환경 변수로 값을 설정할 수 있다.

$ EXAMPLE=10

$ docker container run -it --env-file ./example-env.sh ubuntu bash

root@abcd:/# echo $EXAMPLE
10

다음 명령은 --link 옵션으로 Redis 컨테이너를 연결한다. 다른 컨테이너 안에서 별칭으로 설정한 cache로 Redis 컨테이너에 접속할 수 있다.

$ docker container run -d --name cache redis

$ docker container run -it --link cache:cache ubuntu bash

root@abcd:/# ping cache

save

이미지를 tar 파일로 저장하는 save 명령이다.

docker image save [옵션] <이미지 이름>:<태그>
  • -o, --output="" : 저장할 파일명을 지정한다.

-o 옵션을 설정하지 않으면 tar 파일이 표준 출력(stdout)으로 출력되므로 반드시 리다이렉션을 설정한다. 이미지 이름만 지정하고 태그를 지정하지 않으면 모드 태그를 tar 파일 하나로 저장한다.

$ docker image save -o ~/nginx.tar nginx:latest

$ docker image save nginx:latest > ~/nginx.tar

tar 파일은 docker image load 명령을 사용하여 다시 이미지로 생성할 수 있다.

$ docker image load -i ~/nginx.tar

$ docker image load < ~/nginx.tar

search

docker hub에서 이미지를 검색하는 search 명령이다.

docker search [옵션] <검색어>
  • --automated=false : docker hub의 automated build로 생성한 이미지만 표시한다.
  • --no-trunc=false : 내용이 길어서 생략된 부분을 모두 출력한다.
  • -s, --stars=0: 특정 개수 이상 별표가 있는 이미지를 출력한다.
$ docker search --stars=10 ubuntu

start

컨테이너를 시작하는 start 명령이다.

docker container start [옵션] <컨테이너 이름 or ID>
  • -a, --attach=false : 컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)를 연결하고 모든 시그널을 전달한다.
  • -i, --interactive=false : 표준 입력(stdin)을 활성화한다.

다음 명령은 데몬 모드로 생성한 컨테이너를 강제 종료하고 -a, -i 옵션을 사용하여 출력 내용을 표시한다.

$ docker container run -d --name ubuntu \
     /bin/bash -c "whild true; do echo Hello World; sleep 1; done"
     
$ docker container kill hello
$ docker container start -ai hello
Hello World
Hello World
...

stop

컨테이너를 정지하는 stop 명령이다.

docker container stop [옵션] <컨테이너 이름 or ID>
  • -t, --time=10 : 컨테이너를 정지하기 전에 대기하는 시간을 설정한다. 초 단위이다.

다음 명령은 -t 옵션에 0을 설정하여 기다리지 않고 바로 컨테이너를 정지한다.

$ docker container run -d --name hello ubuntu \
     /bin/bash -c "while true; do echo Hello World; sleep 1; done"
     
$ docker container stop -t 0 hello

tag

이미지에 태그를 설정하는 tag 명령이다.

docker image tag [옵션] <이미지 이름>:<태그> <저장소 주소, 사용자명>/<이미지 이름>:<태그>
  • -f, --force=false : 이미 태그가 있더라도 강제로 설정한다.

docker image push 명령으로 docker hub나 개인 저장소에 이미지를 올릴 때는 다음과 같이 태그를 설정해야 한다.

$ echo "FROM ubuntu" | docker build -t hello:latest -
$ docker image tag hello:latest hello:1.0
$ docker image tag hello:latest exampluser/hello:1.0
$ docker image tag hello:latest 192.168.0.1/hello:1.0

top

컨테이너에서 실행되고 있는 프로세스 목록을 출력하는 top 명령이다.

docker contianer top <컨테이너 이름 or ID> [ps 옵션]

ps 옵션에는 리눅스 ps 명령의 옵션을 설정한다.

$ docker container run -d --name hello redis:latest

$ docker top hello aux
  • -a : 모든 사용자의 프로세스를 출력한다.
  • -u : 각 프로세스의 사용자(UID)를 표시한다.
  • -s : 시그널을 표시한다.
  • -v : 가상 메모리를 표시한다.
  • -x : 자신을 실행시킨 쉘이 없는 프로세스를 출력한다.
  • -c : 커널에서 사용되는 프로세스 이름으로 표시한다.
  • -e : 환경 변수를 표시한다.
  • -f : 내용을 완전한 형태로 표시한다.
  • -l : 자세한 형식으로 출력한다.
  • -n : WCHAN 값을 숫자로 출력한다.

unpause

pause 명령으로 일시 정지된 컨테이너를 다시 시작하는 unpause 명령이다.

docker container unpause <컨테이너 이름 or ID>
$ docker container run -itd --name hello ubuntu /bin/bash

$ docker container pause hello

$ docker container unpause hello

version

docker 버전을 출력하는 version 명령이다.

docker version

wait

컨테이너가 정지될 때까지 기다린 뒤 Exit Code를 출력하는 wait 명령이다.

docker container wait <컨테이너 이름 or ID>

다음 명령을 실행하여 Redis 컨테이너를 생성한다. 그리고 docker container wait 명령을 실행하면 대기 상태가 된다.

$ docker container run -d --name hello redis:latest

$ docker container wait hello

다른 터미널을 실행하고 hello 컨테이너를 강제 종료한다.

$ docker container kill hello

docker container wait 명령을 실행한 터미널에는 Exit Code가 출력된다.

$ docker container wait hello
-1
Comments