Docker는 다양한 명령어를 옵션과 함께 제공합니다. 이번 글에서는 build / push / pull / run / exec에 대해 알아보도록 하겠습니다.


Docker build

build를 할 경우 Dockerfile이 레이어화 되어 이미지가 로컬에 생성됩니다. (빌드 후 조회방법 $ docker images)

docker build [OPTIONS] PATH | URL | -

OPTIONS (https://docs.docker.com/engine/reference/commandline/build/#usage)
NAME DEFAULT DESCRIPTION
–add-host   호스트 - IP 매핑 추가 (호스트 : ip)
–build-arg   빌드 타임 변수 추가
–cache-from   캐시 소스로 고려할 이미지 지정
–cgroup-parent   컨테이너의 선택적 부모 cgroup
–compress FALSE gzip을 사용하여 빌드 컨텍스트 압축
–cpu-period 0 CPU CFS 기간 제한
–cpu-quota 0 CPU CFS 할당량 제한
–cpu-shares, -c 0 CPU 점유율 (상대적 가중치)
–cpuset-cpus   실행을 허용하는 CPU (0-3, 0,1)
–cpuset-mems   실행을 허용 할 MEM (0-3, 0,1)
–disable-content-trust TRUE 이미지 확인 건너 뛰기
–file, -f   Dockerfile의 이름 (기본값 : ‘PATH / Dockerfile’)
–force-rm FALSE 이미지 생성을 실패했을때 임시컨테이너 제거
–iidfile   이미지 ID를 파일에 기록
–isolation   컨테이너 격리 기술
–label   이미지 메타데이터 설정
–memory, -m 0 메모리 제한
–memory-swap 0 스왑 한도는 메모리 + 스왑과 같음, ‘-1’은 무제한 스왑을 가능하게 하는 설정
–network default 빌드하는 동안 RUN 명령어의 네트워킹 모드 설정
–no-cache FALSE 이미지를 만들 때 이전 빌드 때 사용한 캐시 미사용
–pull FALSE 항상 최신 버전의 이미지 pull
–quiet, -q FALSE 성공시 빌드 출력 및 인쇄 이미지 ID 미표시
–rm TRUE 성공적인 빌드 후에 임시 컨테이너 제거
–security-opt   보안 옵션
–shm-size 0 / dev / shm의 크기
–squash FALSE 새로운 레이어로 생성
–tag, -t   저장소, 이름 (‘name(저장소) : tag’)
–target   빌드 할 대상의 단계 설정 (Dockerfile 내에서 단계를 지정가능)
–ulimit   컨테이너 내 제한조건 설정

Docker push

로컬에 있는 이미지를 Docker Hub(public)이나 각 사용자가 생성한 Private 보관소에 업로드 하는 명령어입니다.

docker push [OPTIONS] NAME[:TAG]

OPTIONS (https://docs.docker.com/engine/reference/commandline/push/#description)
NAME DEFAULT DESCRIPTION
–disable-content-trust true 키를 이용한 이미지 서명 건너뛰기 (이미지 변조 방지 목적)

Docker pull

Docker Hub(public)이나 각 사용자가 생성한 Private 보관소의 이미지를 로컬로 불러오는 명령어입니다.

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS (https://docs.docker.com/engine/reference/commandline/pull/)
NAME DEFAULT DESCRIPTION
–all-tags, -a false 저장소에있는 모든 태그가 있는 이미지 다운로드
–disable-content-trust true 이미지 서명 건너 뛰기

Docker run

이미지를 컨테이너화시키는 명령어입니다. (실행 후 확인 명령어 docker ps)
build는 이미지를 생성하는 명령어, run은 실제 동작하는 프로세스로 컨테이너화 한다고 보시면 됩니다.

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

OPTIONS (https://docs.docker.com/engine/reference/commandline/run/#description)
NAME DEFAULT DESCRIPTION
add-host   맞춤 호스트 - IP 매핑 추가 (호스트 : ip)
–attach, -a   표준 입력(STDIN), 표준 출력(STDOUT) 또는 표준 에러(STDERR)를 연결
–blkio-weight 0 10과 1000 사이의 IO(상대적 가중치)를 차단하거나 사용하지 않으려면 0
–blkio-weight-device   block IO 가중치 (상대 장치 무게)
–cap-add   cgroups의 특정 Capability를 사용, ALL을 지정하면 모든 Capability를 사용
–cap-drop   cgroups의 특정 Capability를 사용을 제외
–cgroup-parent   컨테이너의 부모 cgroup 선택
–cidfile   파일에 컨테이너 ID를 사용
–cpu-count 0 CPU 수 (Windows 만 해당)
–cpu-percent 0 CPU 비율 (Windows 만 해당)
–cpu-period 0 CPU CFS (완전 공정 스케줄러) 기간 제한
–cpu-quota 0 CPU CFS (완전 공정한 스케줄러) 할당량 제한
–cpu-rt-period 0 마이크로 초 단위로 CPU 실시간 기간 제한
–cpu-rt-runtime 0 마이크로 초 단위로 CPU 실시간 런타임 제한
–cpu-shares, -c 0 CPU 점유율 (기본 값은 1024이며 각 값은 상대적 가중치)
–cpus   CPU 수
–cpuset-cpus   실행을 허용하는 CPU (0-3, 0,1)
–cpuset-mems   실행을 허용 할 MEM (0-3, 0,1)
–detach, -d FALSE 백그라운드에서 컨테이너 실행
–detach-keys   컨테이너를 분리하기 위한 key sequence 재정의
–device   컨테이너에 호스트 장치 추가
–device-cgroup-rule   cgroup allowed devices 목록에 규칙 추가
–device-read-bps   장치에서 읽기 속도 (바이트 / 초) 제한
–device-read-iops   장치에서 읽기 속도 (초당 IO) 제한
–device-write-bps   장치에 쓰기 속도 (바이트 / 초) 제한
–device-write-iops   장치에 쓰기 속도 (초당 IO) 제한
–disable-content-trust TRUE 이미지 서명 확인 건너 뛰기
–dns   사용자 지정 DNS 서버 설정
–dns-opt   DNS 옵션 설정
–dns-option   DNS 옵션 설정
–dns-search   사용자 지정 DNS 검색 도메인 설정
–entrypoint   이미지의 기본 ENTRYPOINT를 덮어쓰기
–env, -e   환경 변수 설정
–env-file   환경 변수 파일 읽기
–expose   포트 또는 포트 범위 노출
–group-add   가입 할 추가 그룹추가
–health-cmd   Health 상태 점검
–health-interval 0s 검사를 실행하는 시간 (ms | s | m | h) (기본값 0)
–health-retries 0 Health 체크 시 시도하는 횟수
–health-start-period 0s Health-Retries Countdown (ms | s | m | h)을 시작하기 전에 컨테이너를 초기화하는 시작 기간 (기본값 0)
–health-timeout 0s 하나의 검사를 실행할 수있는 최대 시간 (ms | s | m | h) (기본값 0)
–help FALSE 도움말
–hostname, -h   컨테이너 호스트 이름
–init FALSE ex)/bin/bash를 PID를 1로 실행 (TRUE일 경우 /dev/init가 pid 1)
–interactive, -i FALSE 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지
–io-maxbandwidth 0 시스템 드라이브의 최대 입출력 대역폭 제한 (Windows 만 해당)
–io-maxiops 0 시스템 드라이브의 최대 입출력 제한 (Windows에만 해당)
–ip   IPv4 주소 (예 : 172.30.100.104)
–ip6   IPv6 주소 (예 : 2001 : db8 :: 33)
–ipc   사용할 IPC 네임 스페이스
–isolation   컨테이너의 격리유형을 설정
–kernel-memory 0 커널 메모리 제한
–label, -l   컨테이너에 메타 데이터 설정
–label-file   레이블로 구분 된 파일을 읽기
–link   다른 컨테이너에 링크 추가
–link-local-ip   컨테이너 IPv4 / IPv6 링크 로컬 주소
–log-driver   컨테이너에 대한 로깅 드라이버
–log-opt   로깅 드라이버 옵션
–mac-address   컨테이너 MAC 주소 (예 : 92 : d0 : c6 ​​: 0a : 29 : 33)
–memory, -m 0 메모리 제한
–memory-reservation 0 유동적인 메모리 제한
–memory-swap 0 스왑 한도 = 메모리 + 스왑, ‘-1’은 무제한 스왑을 가능
–memory-swappiness -1 컨테이너 메모리 스왑 (0 ~ 100) 조정
–mount   컨테이너에 파일 시스템을 마운트
–name   컨테이너에 이름 지정
–net default 컨테이너를 네트워크에 연결
–net-alias   컨테이너에 네트워크 범위 별칭 추가
–network default 컨테이너를 네트워크에 연결
–network-alias   컨테이너에 네트워크 범위 별칭 추가
–no-healthcheck FALSE 컨테이너가 지정한 HEALTHCHECK 비활성화
–oom-kill-disable FALSE OOM 킬러 미사용
–oom-score-adj 0 호스트의 OOM 환경 설정 조정 (-1000 - 1000)
–pid   사용할 PID 네임 스페이스
–pids-limit 0 컨테이너 pids 한도 조정 (무제한의 경우 -1로 설정)
–privileged FALSE 이 컨테이너에 확장 된 리눅스 커널 기능(Capability) 권한을 부여
–publish, -p   컨테이너의 포트를 호스트에 게시
–publish-all, -P FALSE 호스트에 연결된 컨테이너의 모든 포트를 외부에 노출
–read-only FALSE 컨테이너의 루트 파일 시스템을 읽기 전용으로 마운트
–restart no 컨테이너가 종료 할 때 적용 할 정책을 다시 시작
–rm FALSE 컨테이너가 종료되면 컨테이너도 자동으로 제거합니다.
–runtime   이 컨테이너에 사용하는 런타임
–security-opt   보안 옵션
–shm-size 0 / dev / shm의 크기
–sig-proxy TRUE 모든 시그널을 프로세스에 전달(TTY 모드가 아닐 때도). 단 SIGCHLD, SIGKILL, SIGSTOP 시그널은 전달
–stop-signal SIGTERM 컨테이너를 멈추게하는 신호
–stop-timeout 0 컨테이너를 중지하는 시간 초과 (초)
–storage-opt   컨테이너의 저장소 드라이버 옵션
–sysctl map[] Sysctl 옵션
–tmpfs   tmpfs 디렉토리 마운트
–tty, -t FALSE 가상 TTY 할당
–ulimit   컨테이너 내 제한조건 설정
–user, -u   사용자 이름 또는 UID (형식 : <name | uid> [: <group | gid>])
–userns   사용할 사용자 이름 공간
–uts   사용할 UTS 네임 스페이스
–volume, -v   볼륨 마운트
–volume-driver   컨테이너 용 선택적 볼륨 드라이버
–volumes-from   지정된 컨테이너에서 볼륨 마운트
–workdir, -w   컨테이너 내부 작업 디렉토리

참고 사이트