일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++
- HTML
- c# 윈폼
- 도커
- 깃
- git
- c# winform
- 포인터
- docker
- vim
- dart 언어
- Houdini
- c#
- gitlab
- Flutter
- C# delegate
- 유니티
- Algorithm
- 플러터
- jupyter
- Unity
- c# 추상 클래스
- c언어
- jupyter lab
- Python
- 다트 언어
- Data Structure
- github
- 구조체
- C언어 포인터
- Today
- Total
nomad-programmer
[DevOps/Docker] 명령어 및 옵션 목록 본문
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
'DevOps > Docker' 카테고리의 다른 글
[DevOps/Docker] mail 서버 설정 (0) | 2023.10.15 |
---|---|
[DevOps/Docker] Portainer (도커와 쿠버네티스 관리를 쉽게) (0) | 2023.08.27 |
[DevOps/Docker] 분산 환경에서의 컨테이너 운용 관리 (0) | 2020.12.10 |
[DevOps/Docker] docker-machine 명령을 사용한 실행 환경 구축 (0) | 2020.12.10 |
[DevOps/Docker] docker-compose로 의존성이 있는 서버 구성에서의 유용한 TIP (0) | 2020.12.08 |