docker container create
docker container create
docker container create는 새 컨테이너를 만드는 명령이에요. 시작하지 않고 컨테이너만 준비해 두고 싶을 때 사용해요.
출처: 문서
본문
docker create 명령은 옵션 대부분을 docker run 명령과 공유해요. 사용 가능한 플래그와 옵션의 상세는 docker run CLI reference를 참고해요.
docker container create(줄여서 docker create)는 지정한 이미지에서 새 컨테이너를 만들지만 시작하지는 않아요. Docker 데몬이 이미지 위에 쓰기 가능한 컨테이너 레이어를 만들고 지정한 명령을 실행할 준비를 하며, 컨테이너 ID를 STDOUT으로 출력해요. docker run -d와 비슷하지만 컨테이너를 시작하지 않는다는 점이 달라요. 나중에 docker container start(또는 docker start)로 컨테이너를 시작할 수 있어요.
컨테이너를 필요할 때 바로 시작할 수 있게 미리 구성해 두고 싶을 때 유용해요. 새 컨테이너의 초기 상태는 created예요.
The docker create command shares most of its options with the docker run command.
지원하는 옵션은 다음과 같아요.
| 옵션 | 기본값 | 설명 |
|---|---|---|
--add-host |
커스텀 host-to-IP 매핑을 추가해요 (host:ip) |
|
--annotation |
컨테이너에 주석(annotation)을 추가해요 (OCI 런타임으로 전달돼요) | |
-a, --attach |
STDIN·STDOUT·STDERR에 연결해요 | |
--blkio-weight |
블록 IO(상대 가중치)를 정해요. 10~1000 사이, 0이면 비활성화 (기본 0) | |
--blkio-weight-device |
블록 IO 가중치(상대 디바이스 가중치)를 정해요 | |
--cap-add |
Linux 역량(capability)을 추가해요 | |
--cap-drop |
Linux 역량을 빼요 | |
--cgroup-parent |
컨테이너의 상위 cgroup을 정해요 | |
--cgroupns |
사용할 cgroup 네임스페이스를 정해요 (host | |
--cidfile |
컨테이너 ID를 파일에 써요 | |
--cpu-count |
CPU 개수를 정해요 (Windows 전용) | |
--cpu-percent |
CPU 비율을 정해요 (Windows 전용) | |
--cpu-period |
CPU CFS(Completely Fair Scheduler) 주기를 제한해요 | |
--cpu-quota |
CPU CFS 할당량을 제한해요 | |
--cpu-rt-period |
CPU 실시간 주기를 마이크로초로 제한해요 | |
--cpu-rt-runtime |
CPU 실시간 런타임을 마이크로초로 제한해요 | |
-c, --cpu-shares |
CPU 공유(상대 가중치)를 정해요 | |
--cpus |
CPU 개수를 정해요 | |
--cpuset-cpus |
실행을 허용할 CPU를 정해요 (0-3, 0,1) | |
--cpuset-mems |
실행을 허용할 MEM을 정해요 (0-3, 0,1) | |
--device |
컨테이너에 호스트 디바이스를 추가해요 | |
--device-cgroup-rule |
cgroup 허용 디바이스 목록에 규칙을 추가해요 | |
--device-read-bps |
디바이스의 읽기 속도를 제한해요 (초당 바이트) | |
--device-read-iops |
디바이스의 읽기 속도를 제한해요 (초당 IO) | |
--device-write-bps |
디바이스의 쓰기 속도를 제한해요 (초당 바이트) | |
--device-write-iops |
디바이스의 쓰기 속도를 제한해요 (초당 IO) | |
--dns |
커스텀 DNS 서버를 설정해요 | |
--dns-option |
DNS 옵션을 설정해요 | |
--dns-search |
커스텀 DNS 검색 도메인을 설정해요 | |
--domainname |
컨테이너 NIS 도메인 이름을 설정해요 | |
--entrypoint |
이미지의 기본 ENTRYPOINT를 덮어써요 | |
-e, --env |
환경 변수를 설정해요 | |
--env-file |
환경 변수 파일을 읽어요 | |
--expose |
포트 또는 포트 범위를 노출해요 | |
--gpus |
컨테이너에 추가할 GPU 디바이스를 정해요 ('all'이면 모든 GPU 전달) | |
--group-add |
추가로 포함할 그룹을 더해요 | |
--health-cmd |
헬스 체크를 실행할 명령을 정해요 | |
--health-interval |
체크를 실행할 간격을 정해요 (ms | |
--health-retries |
비정상으로 판정할 연속 실패 횟수를 정해요 | |
--health-start-interval |
시작 구간에 체크를 실행할 간격을 정해요 (ms | |
--health-start-period |
헬스 재시도 카운트다운 전 컨테이너 초기화 시간을 정해요 (ms | |
--health-timeout |
체크 하나에 허용할 최대 시간을 정해요 (ms | |
--help |
사용법을 출력해요 | |
-h, --hostname |
컨테이너 호스트 이름을 정해요 | |
--init |
컨테이너 안에서 신호를 전달하고 프로세스를 정리하는 init을 실행해요 | |
-i, --interactive |
STDIN을 유지해요 | |
--io-maxbandwidth |
시스템 드라이브의 최대 IO 대역폭을 제한해요 (Windows 전용) | |
--io-maxiops |
시스템 드라이브의 최대 IOps를 제한해요 (Windows 전용) | |
--ip |
<nil> |
IPv4 주소를 정해요 (예: 172.30.100.104) |
--ip6 |
<nil> |
IPv6 주소를 정해요 (예: 2001:db8::33) |
--ipc |
사용할 IPC 모드를 정해요 | |
--isolation |
컨테이너 격리 기술을 정해요 | |
-l, --label |
컨테이너에 메타데이터를 설정해요 | |
--label-file |
줄 단위 라벨 파일을 읽어요 | |
--link |
다른 컨테이너에 링크를 추가해요 | |
--link-local-ip |
컨테이너 IPv4/IPv6 link-local 주소를 정해요 | |
--log-driver |
컨테이너의 로깅 드라이버를 정해요 | |
--log-opt |
로그 드라이버 옵션을 정해요 | |
--mac-address |
컨테이너 MAC 주소를 정해요 (예: 92:d0:c6:0a:29:33) | |
-m, --memory |
메모리 제한을 정해요 | |
--memory-reservation |
메모리 소프트 제한을 정해요 | |
--memory-swap |
메모리와 스왑의 합과 같은 스왑 제한: '-1'이면 무제한 스왑 | |
--memory-swappiness |
-1 |
컨테이너 메모리 스와피니스를 조정해요 (0~100) |
--mount |
컨테이너에 파일시스템 마운트를 추가해요 | |
--name |
컨테이너에 이름을 지정해요 | |
--network |
컨테이너를 네트워크에 연결해요 | |
--network-alias |
컨테이너에 네트워크 범위 별칭을 추가해요 | |
--no-healthcheck |
컨테이너가 지정한 HEALTHCHECK를 비활성화해요 | |
--oom-kill-disable |
OOM Killer를 비활성화해요 | |
--oom-score-adj |
호스트 OOM 선호도를 조정해요 (-1000~1000) | |
--pid |
사용할 PID 네임스페이스를 정해요 | |
--pids-limit |
컨테이너 pids 제한을 조정해요 (무제한은 -1) | |
--platform |
서버가 멀티플랫폼을 지원하면 플랫폼을 설정해요 | |
--privileged |
컨테이너에 확장 권한을 부여해요 | |
-p, --publish |
컨테이너의 포트를 호스트에 게시해요 | |
-P, --publish-all |
노출된 모든 포트를 임의 포트로 게시해요 | |
--pull |
missing |
생성 전에 이미지를 가져올지 정해요 (always, missing, never) |
-q, --quiet |
구성만 검증하고 아무것도 출력하지 않아요 | |
--read-only |
컨테이너 루트 파일시스템을 읽기 전용으로 마운트해요 | |
--restart |
no |
컨테이너 종료 시 적용할 재시작 정책을 정해요 |
--rm |
종료 시 컨테이너와 익명 볼륨을 자동으로 제거해요 | |
--runtime |
컨테이너에 사용할 런타임을 정해요 | |
--security-opt |
보안 옵션을 정해요 | |
--shm-size |
/dev/shm 크기를 정해요 |
|
--stop-signal |
컨테이너를 멈추는 신호를 정해요 | |
--stop-timeout |
컨테이너를 멈추는 타임아웃(초)을 정해요 | |
--storage-opt |
컨테이너의 스토리지 드라이버 옵션을 정해요 | |
--sysctl |
sysctl 옵션을 정해요 | |
--tmpfs |
tmpfs 디렉터리를 마운트해요 | |
-t, --tty |
의사-TTY를 할당해요 | |
--ulimit |
ulimit 옵션을 정해요 | |
--umask |
<nil> |
컨테이너의 umask를 설정해요 |
--use-api-socket |
experimental (CLI) Docker API 소켓과 필요한 인증을 바인드 마운트해요 | |
-u, --user |
사용자 이름 또는 UID를 정해요 | |
--userns |
사용할 사용자 네임스페이스를 정해요 | |
--uts |
사용할 UTS 네임스페이스를 정해요 | |
-v, --volume |
볼륨을 바인드 마운트해요 | |
--volume-driver |
볼륨 드라이버를 정해요 | |
--volumes-from |
지정한 컨테이너에서 볼륨을 마운트해요 | |
-w, --workdir |
컨테이너 안 작업 디렉터리를 정해요 |
Create and start a container
다음 예제는 의사-TTY가 연결된 대화형 컨테이너를 만들고, 시작한 뒤 연결해요.
$ docker container create -i -t --name mycontainer alpine
6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752
$ docker container start --attach -i mycontainer
/ # echo hello world
hello world
위는 docker run과 동등해요.
$ docker run -it --name mycontainer2 alpine
/ # echo hello world
hello world
Initialize volumes
컨테이너 볼륨은 docker create 단계(즉 docker run도 마찬가지)에서 초기화돼요. 예를 들어 data 볼륨 컨테이너를 create한 뒤 다른 컨테이너에서 사용할 수 있어요.
$ docker create -v /data --name data ubuntu
240633dfbb98128fa77473d3d9018f6123b99c454b3251427ae190a7d951ad57
$ docker run --rm --volumes-from data ubuntu ls -la /data
total 8
drwxr-xr-x 2 root root 4096 Dec 5 04:10 .
drwxr-xr-x 48 root root 4096 Dec 5 04:11 ..
마찬가지로 호스트 디렉터리를 바인드 마운트한 볼륨 컨테이너를 create하고, 이후 컨테이너에서 사용할 수도 있어요.
$ docker create -v /home/docker:/docker --name docker ubuntu