1. 사용(명령어)
Docker의 명령은 docker run, docker push와 같이 docker <명령> 형식입니다. 그리고 항상
root 권한으로 실행해야 합니다. (docker계정에 대한 권한 설정을 했다면 sudo를 제외할 수 있다)
먼저 Docker의
기본적인 사용법을 알아보기 위해 Docker Hub에서 제공하는 이미지를 받아서 실행해보겠습니다.
아래의 명령어 순서대로 실행을 하여 실제 image생성 및 모든 기능들을 테스트 할 수 있다.
1.1
search
Docker는 Docker Hub14를 통해 이미지를 공유하는 생태계가 구축되어 있습니다.
search 명령으로 Docker Hub에서 이미지를 검색할 수 있습니다.
$
sudo docker search ubuntu
NAME DESCRIPTION
STARS OFFICIAL AUTOMATED
ubuntu Official Ubuntu base
image 383
stackbrew/ubuntu Official Ubuntu base image 40
crashsystems/gitlab-docker A trusted, regularly updated build of
GitL... 19 [OK]
dockerfile/ubuntu Trusted Ubuntu
(http://www.ubuntu.com/) Bu...
15 [OK]
ubuntu-upstart Upstart is an event-based
replacement for ... 7
cmfatih/phantomjs PhantomJS [ phantomjs 1.9.7,
casperjs 1.1.... 5 [OK]
dockerfile/ubuntu-desktop Trusted Ubuntu Desktop (LXDE)
(http://lxde... 5 [OK]
lukasz/docker-scala Dockerfile for installing Scala
2.10.3, Ja... 5 [OK]
litaio/ruby Ubuntu 14.04 with Ruby
2.1.2 compiled from... 5 [OK]
|
엄청나게 많은 이미지가 검색될 것입니다. 보통 ubuntu, centos, redis 등 OS나 프로그램 이름을 가진 이미지가 공식 이미지입니다. 나머지는
사용자들이 만들어 공개한 이미지입니다.
Docker
Hub에서 이미지를 검색한 뒤 해당 이미지의 Tags
탭을 보면 현재 사용할 수 있는 이미지의 버전을 볼 수 있습니다.
1.2
pull
우분투 이미지를 받아보겠습니다.
$
sudo docker pull ubuntu:latest
|
docker
pull <이미지 이름>:<태그> 형식입니다. latest를 설정하면 최신 버전을 받습니다. ubuntu:14.04, ubuntu:12.10처럼 태그를 지정해 줄 수도 있습니다.
이미지 이름에서 pyrasis/ubuntu처럼 / 앞에 사용자명을 지정하면 Docker Hub에서 해당 사용자가
올린 이미지를 받습니다. 공식 이미지는 사용자명이 붙지 않습니다.
________________________________________
참고
호스트에 설치된 리눅스 배포판과 Docker 이미지의 배포판의 종류가 달라도 됩니다. CentOS 위에서
우분투 컨테이너를 실행할 수 있습니다.
________________________________________
1.3
images
이제 받은 이미지의 목록을 출력해보겠습니다.
$
sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB
|
docker
images는 모든 이미지 목록을 출력합니다. docker
images ubuntu처럼 이미지 이름을 설정하면 이름은 같지만 태그가 다른 이미지가 출력됩니다.
1.4
run
이미지를 컨테이너로 생성한 뒤 Bash Shell을 실행해보겠습니다.
$
sudo docker run -i -t --name hello ubuntu /bin/bash
root@6338ce52d07c:/#
|
docker
run <옵션> <이미지 이름> <실행할 파일> 형식입니다. 여기서는 ubunbu 이미지를 컨테이너로 생성한 뒤 ubuntu 이미지 안의/bin/bash를 실행합니다. 이미지 이름 대신 이미지 ID를 사용해도 됩니다.
-i(interactive),
-t(Pseudo-tty) 옵션을 사용하면 실행된 Bash Shell에
입력 및 출력을 할 수 있습니다. 그리고 --name 옵션으로
컨테이너의 이름을 지정할 수 있습니다. 이름을 지정하지 않으면
Docker가 자동으로 이름을 생성하여 지정합니다.
이제 호스트 OS와
완전히 격리된 공간이 생성되었습니다. cd, ls 명령으로 컨테이너 내부를 한번 둘러봅니다. 호스트 OS와는 다르다는 것을 알 수 있습니다. exit를 입력하여 Bash Shell에서 빠져나옵니다. 우분투 이미지에서 /bin/bash 실행 파일을 직접 실행했기 때문에
여기서 빠져나오면 컨테이너가 정지(stop)됩니다.
________________________________________
참고
CentOS에서 아래와
같은 에러가 발생하면
unable
to remount sys readonly: unable to mount sys as readonly max retries reached
/etc/sysconfig/docker
파일에서
아래와 같이 --exec-driver=lxc를 추가합니다.
/etc/sysconfig/docker
#
/etc/sysconfig/docker
#
#
Other arguments to pass to the docker daemon process
#
These will be parsed by the sysv initscript and appended
#
to the arguments list passed to docker -d
other_args="--selinux-enabled
--exec-driver=lxc"
|
Docker
서비스를
재시작합니다.
$ sudo
service docker restart
________________________________________
옵션정리
-a,
--attach=[]: 컨테이너에 표준 입력(stdin), 표준
출력(stdout), 표준 에러(stderr)를 연결합니다.
--attach=”stdin”
--add-host=[]:
컨테이너의 /etc/hosts에 호스트 이름과 IP 주소를 추가합니다.
--add-host=hello:192.168.0.10
-c,
--cpu-shares=0: CPU 자원 분배 설정입니다. 설정의 기본
값은 1024이며 각 값은 상대적으로 적용됩니다.
--cpu-shares=2048처럼
설정하면 기본 값 보다 두 배 많은 CPU 자원을 할당합니다.
이 설정 값은 리눅스 커널의 cgroups에서 사용됩니다.
--cap-add=[]:
컨테이너에서 cgroups의 특정 Capability를 사용합니다. ALL을 지정하면 모든 Capability를 사용합니다.
--cap-add=”MKNOD” --cap-add=”NET_ADMIN”처럼
설정합니다. 모든 Capability 목록은 다음 링크를
참조하기 바랍니다.
http://linux.die.net/man/7/capabilities
--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/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:<컨테이너
이름, 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”
--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입니다. 자세한 내용은 ‘6.4
Docker 데이터 볼륨 사용하기’를 참조하기 바랍니다.
<컨테이너
디렉터리> 예) -v /data
<호스트
디렉터리>:<컨테이너 디렉터리> 예) -v /data:/data
<호스트
디렉터리>:<컨테이너 디렉터리>:<ro,
rw> 예) -v /data:/data:ro
<호스트
파일>:<컨테이너 파일> 예) -v /var/run/docker.sock:/var/run/docker.sock
--volumes-from=[]:
데이터
볼륨 컨테이너를 연결하며 <컨테이너 이름,
ID>:<ro, rw> 형식으로 설정합니다. 기본적으로 읽기 쓰기 설정은 -v 옵션의 설정을 따릅니다. 자세한 내용은 ‘6.5 Docker 데이터 볼륨 컨테이너 사용하기’를 참조하기 바랍니다.
--volumes-from=”hello”
--volumes-from=”hello:ro”처럼 설정하면 데이터 볼륨을 읽기 전용으로 사용합니다.
--volumes-from=”hello:rw”처럼 설정하면 데이터 볼륨에 읽기 쓰기 모두 할 수 있습니다.
-w,
--workdir=””: 컨테이너 안의 프로세스가
실행될 디렉터리를 설정합니다.
--workdir=”/var/www”
|
1.5
ps
아래 명령을 입력하여 모든 컨테이너 목록을 출력합니다.
$
sudo docker ps -a
CONTAINER
ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6338ce52d07c ubuntu:latest /bin/bash
4 seconds ago Exited (0) Less
than a second ago hello
|
docker
ps 형식입니다. -a 옵션을 사용하면 정지된
컨테이너까지 모두 출력하고, 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력합니다.
우리는 앞에서 컨테이너를 생성할 때 이름을 hello로 지정했으므로 컨테이너 목록에서도 hello로 표시됩니다.
1.6
start
방금 정지한 컨테이너를 다시금 시작해보겠습니다.
$
sudo docker start hello
|
docker
start <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
아래 명령을 입력하여 실행된 컨테이너 목록을 출력합니다.
$
sudo docker ps
CONTAINER
ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6338ce52d07c ubuntu:latest /bin/bash
15 minutes ago Up 3
seconds hello
|
hello 컨테이너가 시작되었습니다.
restart
OS 재부팅처럼 컨테이너를
재시작해보겠습니다.
$
sudo docker restart hello
|
docker
restart <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
1.7
attach
이제 시작한 컨테이너에 접속해보겠습니다. 아래 명령을 실행한 뒤 엔터를 한번 더 입력하면 Bash Shell이
표시됩니다.
$
sudo docker attach hello
root@6338ce52d07c:/#
|
docker
attach <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
우리는
/bin/bash를 실행했기 때문에 명령을 자유롭게 입력할 수 있지만, DB나 서버 어플리케이션을
실행하면 입력은 할 수 없고 출력만 보게 됩니다.
Bash
Shell에서 exit 또는 Ctrl+D를 입력하면 컨테이너가 정지됩니다. 여기서는 Ctrl+P, Ctrl+Q를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서
빠져나옵니다.
1.8
exec
현재 컨테이너가
/bin/bash로 실행된 상태입니다. 이번에는
/bin/bash를 통하지 않고 외부에서 컨테이너 안의 명령을 실행해보겠습니다.
$
docker exec hello echo "Hello World"
Hello
World
|
docker
exec <컨테이너 이름> <명령> <매개 변수> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다. 컨테이너가 실행되고 있는 상태에서만 사용할 수 있으며 정지된 상태에서는 사용할 수 없습니다.
컨테이너 안의 echo
명령을 실행하고 매개 변수로 "Hello World"를 지정했기 때문에 Hello World가 출력됩니다. docker exec 명령은 이미
실행된 컨테이너에 apt-get, yum 명령으로 패키지를 설치하거나,
각종 데몬을 실행할 때 활용할 수 있습니다.
1.9
stop
이번에는 컨테이너를 정지해보겠습니다. 먼저 실행된 컨테이너 목록을 출력합니다.
$
sudo docker ps
CONTAINER
ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6338ce52d07c ubuntu:latest /bin/bash 51 minutes ago Up 2 minutes hello
|
아래 명령으로 컨테이너를 정지합니다.
$
sudo docker stop hello
|
docker
stop <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
실행된 컨테이너 목록을 출력합니다.
$
sudo docker ps
CONTAINER
ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
hello 컨테이너를 정지했기
때문에 아무것도 안 나옵니다.
1.10rm
생성된 컨테이너를 삭제해보겠습니다.
$
sudo docker rm hello
|
docker
rm <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
모든 컨테이너 목록을 출력합니다.
$
sudo docker ps -a
CONTAINER
ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
hello 컨테이너를 삭제했기
때문에 아무것도 안 나옵니다.
1.11rmi
이번에는 이미지를 삭제해보겠습니다.
$
sudo docker rmi ubuntu:latest
|
docker
rmi <이미지 이름>:<태그> 형식입니다. 이미지 이름 대신 이미지 ID를 사용해도 됩니다. docker rmi ubuntu처럼 이미지
이름만 지정하면 태그는 다르지만 ubuntu 이름을 가진 모든 이미지가 삭제됩니다.
이미지 목록을 출력합니다.
$
sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
ubuntu
이미지를
삭제했기 때문에 아무것도 안나옵니다.
1.12history
앞에서 생성한
hello:0.1 이미지의 히스토리를 조회해보겠습니다.
$
sudo docker history hello:0.1
IMAGE CREATED CREATED BY SIZE
e54ca5efa2e9 Less than a second ago /bin/sh -c apt-get update &&
apt-get install 8 B
6c37f792ddac Less than a second ago /bin/sh -c apt-get update &&
apt-get install 83.43 MB
83ff768040a0 Less than a second ago /bin/sh -c sed -i
's/^#\s*\(deb.*universe\)$/ 1.903 kB
2f4b4d6a4a06 Less than a second ago /bin/sh -c echo '#!/bin/sh' >
/usr/sbin/polic 194.5 kB
|
docker
history <이미지 이름>:<태그> 형식입니다. 이미지 이름 대신 이미지 ID를 사용해도 됩니다.
이렇게
Dockefile에 설정한 대로 히스토리가 생성됩니다.
1.13cp
hello-nginx
컨테이너에서
파일을 꺼내보겠습니다.
$
sudo docker cp hello-nginx:/etc/nginx/nginx.conf ./
|
docker
cp <컨테이너 이름>:<경로> <호스트 경로> 형식입니다.
현재 디렉터리에
nginx.conf 파일이 복사되었습니다.
1.14commit
docker
commit 명령은 컨테이너의 변경 사항을 이미지 파일로 생성합니다.
hello-nginx
컨테이너
안의 파일 내용이 바뀌었다고 치고, 컨테이너를 이미지 파일로 생성해보겠습니다.
$
sudo docker commit -a "Foo Bar <foo@bar.com>" -m "add
hello.txt" hello-nginx hello:0.2
|
docker
commit <옵션> <컨테이너 이름> <이미지 이름>:<태그> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
-a
"Foo Bar <foo@bar.com>"과 -m
"add hello.txt" 옵션으로 커밋한 사용자와 로그 메시지를 설정합니다.
hello-nginx 컨테이너를hello:0.2 이미지로 생성합니다.
이미지 목록을 출력합니다.
$
sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04 e54ca5efa2e9 Less than a second ago 276.1 MB
ubuntu latest e54ca5efa2e9 Less than a second ago 276.1 MB
hello 0.2 d2e8c352b303 About a minute ago 298.4 MB
hello 0.1 2031ee0736e8 44 minutes ago 298.4 MB
|
hello:0.2
이미지가
생성되었습니다.
1.15diff
docker
diff 명령은 컨테이너가 실행되면서 변경된 파일 목록을 출력합니다. 비교 기준은 컨테이너를 생성한 이미지 내용입니다.
$
sudo docker diff hello-nginx
A
/data
C
/run
A
/run/nginx.pid
C
/var/lib/nginx
A
/var/lib/nginx/body
A
/var/lib/nginx/fastcgi
A
/var/lib/nginx/proxy
A
/var/lib/nginx/scgi
A
/var/lib/nginx/uwsgi
C
/etc/nginx
A
/etc/nginx/site-enabled
C
/dev
C
/dev/kmsg
|
docker
diff <컨테이너 이름> 형식입니다. 컨테이너 이름 대신 컨테이너 ID를 사용해도 됩니다.
A는 추가된 파일, C는 변경된 파일, D는 삭제된 파일입니다.
1.16inspect
docker
inspect 명령은 이미지와 컨테이너의 세부 정보를 출력합니다.
$
sudo docker inspect registry
[{
"Args": [],
"Config": {
"AttachStderr": false,
"AttachStdin": false,
"AttachStdout": false,
"Cmd": [
"nginx"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": null,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"ExposedPorts": {
"443/tcp": {},
"80/tcp": {}
},
"Hostname":
"d4369f661b0a",
"Image":
"hello:0.1",
... 생략 ...
},
"Name":
"/hello-nginx",
"NetworkSettings": {
"Bridge":
"docker0",
"Gateway":
"172.17.42.1",
"IPAddress":
"172.17.0.40",
"IPPrefixLen": 16,
"PortMapping": null,
"Ports": {
"443/tcp": null,
"80/tcp": [
{
"HostIp":
"0.0.0.0",
"HostPort":
"80"
}
]
}
},
"Path": "nginx",
"ProcessLabel": "",
"ResolvConfPath":
"/etc/resolv.conf",
"State": {
"ExitCode": 0,
"FinishedAt":
"0001-01-01T00:00:00Z",
"Paused": false,
"Pid": 19804,
"Running": true,
"StartedAt":
"2014-06-03T22:25:42.838118718Z"
},
... 생략 ...
}]
|
docker
inspect <이미지 또는 컨테이너 이름> 형식입니다. 이미지, 컨테이너 이름 대신 이미지 ID나, 컨테이너 ID를
사용해도 됩니다.
1.17build
다음은 Dockerfile로 이미지를 생성하는 build 명령입니다.
docker
build <옵션> <Dockerfile 경로>
Dockerfile
경로는 로컬
경로와 URL을 사용할 수 있고, -를 설정하면 표준 입력으로 Dockerfile 내용을 받을 수 있습니다.
--force-rm=false:
이미지 생성에
실패했을 때도 임시 컨테이너를 삭제합니다.
--no-cache=false:
이전 빌드에서
생성된 캐시를 사용하지 않습니다. Docker는 이미지 생성 시간을 줄이기 위해서 Dockerfile의 각 과정을 캐시하는데, 이 캐시를 사용하지 않고
처음부터 다시 이미지를 생성합니다.
-q,
--quiet=false: Dockerfile의 RUN이 실행한 출력 결과를 표시하지 않습니다.
--rm=true:
이미지 생성에
성공했을 때 임시 컨테이너를 삭제합니다.
-t,
--tag=””: 저장소 이름, 이미지 이름, 태그를
설정합니다. <저장소 이름>/<이미지 이름>:<태그> 형식입니다.
보통 Dockerfile이 있는 경로에서 docker build 명령을
실행합니다. Dockerfile 있는 특정 경로를 설정할 수도 있습니다.
docker
build -t test_api:0.1 .
$
sudo docker build -t test_api:0.1 /opt/hello
$
sudo docker build -t test_api:0.1 ../../
|
다음은 인터넷에
있는 Dockerfile의 URL을 사용하여 이미지를 생성합니다.
$
sudo docker build -t test_api:0.1 https://raw.githubusercontent.com/kstaken/dockerfile-examples/master/apache/Dockerfile
|
다음은 Dockerfile 경로에 -를 설정하여 Dockerfile 내용을 표준 입력으로 받습니다.
$
echo -e "FROM ubuntu:14.04\nRUN apt-get update" | sudo docker build
-t hello -
$
cat Dockerfile | sudo docker build -t hello -
$
sudo docker build -t hello - < Dockerfile
|
echo
명령으로 문자열을
직접 출력해도 되고, cat 명령으로 파일의 내용을 파이프로 보내도 됩니다.
잘 참고하였습니다~ 감사합니다!
답글삭제