Docker 명령
Docker 이미지 조작
Docker Hub
Docker Hub는 GitHub나 Bitbucket과 같은 소스코드 관리 툴과 연계하여 코드를 빌드하는 기능이나 실행 가능한 애플리케이션의 이미지를 관리하는 기능을 갖춘 Docker의공시 리포지토리 서비스 이다.
Docker Hub를 사용하여 물리 서버든, 가상 머신이든, 클라우드든 Docker 이미지를 배포할 수 있다.
Docker Hub Site
이미지 검색 가능
이미지 상세 정보
Docker 이미지 상세 정보가 표시된다.
리포지토리에서 공개되어 있는 버전 정보나 주의사항, 지원하는 Docker의 버전 등과 같은 정보가 기재되어 있다.
이미지 Tags
Docker 이미지 지정
이미지명 [: 태그명]
latest는 리포지토리에 공개되어 있는 최신판 이미지이다.
따로 태그명을 직접 주어서 Version을 명시해서 이미지를 가져올 수 있다.
이미지 다운로드
docker image pull [Option] 이미지명 [: 태그명]
docker image pull centos:7
Tag = 7인 Centos image를 다운받는 명령어 이다.
Option
- a: 모든 태그를 취득할 수 있다.
이미지명 같은 경우 URL로 지정 가능하다.
이미지 목록 표시
명령어
docker image ls [Option] [리포지토리 명]
Option
Option | 설명 |
IMAGE | nginx |
-all, -a | 모든 이미지를 표시 |
--digests | 다이제스트(이미지를 고유하게 식별하기 위한)를 표시할지 말지 |
--no-trunc | 결과를 모두 표시 |
--quiet, -q | Docker 이미지 ID만 표시 |
실행 결과
REPOSITORY | 이미지 이름 |
TAG | 이미지 태그명 |
IMAGE ID | 이미지 ID |
CREATED | 작성일 |
SIZE | 이미지 크기 |
이미지 상세 정보 확인
docker image inspect [Image 이름]
Image의 상세 정보를 확인할 수 있다.
ID, 작성일, Docker 버전, CPU 아키텍쳐 등 다양한 정보가 JSON 형태로 Return된다.
따라서 Json format 형식을 맞춰서 Filtering 가능 하다.
docker image inspect --format="" nginx
linux
이미지 태그 설정
docker image tag [image 이름] [설정할 이름: [태그명]]
docker image tag nginx wjddyd66/webserver:1.0
docker image ls
확인 결과 새롭게 설정된 이미지 Tag와 복사한 Image의 ID가 같은 것을 알 수 있다.
즉, 이미지에 별명을 붙일 뿐 이미지 자체를 복사하거나 이름을 바꾼 것이 아니다
이미지 검색
명령어
docker search [Option] [검색 키워드]
Option
--no-trunc | 결과를 모두 표시 |
--limit | n건의 검색 결과를 표시 |
--filter=stars=n | 즐겨찾기의 수(n 이상)를 지정 |
실행 결과
Name | 이미지 이름 |
DESCRIPTION | 이미지 설명 |
STARS | 즐겨찾기 수 |
OFFICIAL | 공식 이미지인지 아닌지 |
AUTOMATED | Dockerfile을 바탕으로 자동 생성된 이미지인지 아닌지 |
인기있는 이미지 검색
$ docker search --filter=stars=1000 nginx
NAME DESCRIPTION STARS OFFICIAL ...
nginx Official build of Nginx. 12008 [OK] ...
Docker 이미지 삭제
docker image rm [Option] 이미지명 [이미지명]
Option
--force, -f | 이미지를 강제로 삭제 |
--no-prune | 중간 이미지를 삭제하지 않음 |
중간 이미지: 이미지를 빌드하는 과정에서 생기는 모든 이미지
사용하지 않는 이미지 삭제
docker image prune [Option]
Option
--all, -a | 사용하지 않는 이미지를 모두 삭제 |
--force, -f | 이미지를 강제로 삭제 |
사용하지 않는 Docker 이미지는 디스크 용량을 쓸데없이 차지하기 때문에 정기적으로 삭제하는 것이 권장
Docker Hub에 로그인
docker login [Option] [Server]
Option
--password, -p | 비밀번호 |
--username, -u | 사용자명 |
Docker Hub에 로그아웃
docker logout [Server]
서버명을 지정하지 않았을 때는 Docker Hub에 엑세스 한다.
Docker 컨테이너 생성/시작/정지
Container Life Cycle
컨테이너 생성
docker container create
이미지로부터 컨테이너를 생성
Linux의 작동에 필요한 /etc, /bin등과 같은디렉토리 및 파일들의 스냅샷을 취한다.
스냅샷: 스토리지 안에 존재하는 파일과 디렉토리를 특정 타이밍에서 취하는 것
컨테이너 생성 및 시작
docker container run [Option] 이미지명[: 태그명] [인수]
Option
--attach, -a | 표준입력(STDIN), 표준출력(STDOUT), 표준 오류 출력(STDERR)에 어태치 |
--cidfile | 컨테이너 ID를 파일로 출력 |
--detach, -d | 컨테이너를 생성하고 백그라운드에서 실행한다. |
--interactive, -i | 컨테이너 표준을 출력 |
--tty, -t | 단말기 디바이스를 사용 |
docker container run -it --name "test1" centos /cin/cal
October 2019
Su Mo Tu We Th Fr Sa
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 31
컨테이너 백그라운드 실행
docker container run [Option] 이미지명[: 태그명] [인수]
Option
--detach, -d | 컨테이너를 생성하고 백그라운드에서 실행한다. |
--user, -u | 사용자명을 지정 |
--restart=[no | on-failure | onfailure: 횟수n | always | unless-stopped] | 명령의 실행 결과에 따라 재시작을 하는 옵션 |
--rm | 명령 실행 완료 후에 컨테이너를 자동으로 삭제 |
restart Option
no | 재시작하지 않는다. |
on-failure | 종료 스테이터스가 0이 아닐 때 재시작한다. |
onfailure: 횟수n | 종료 스테이터스가 0이 아닐 때 n번 재시작한다. |
always | 항상 재시작한다. |
unless-stopped | 최근 컨테이너가 정지 상태가 아니라면 항상 재시작한다. |
백그라운드 컨테이너 로그 확인
docker container logs -t [Container ID]
docker container logs -t 77eb88a965d5
root@77eb88a965d5:/# echo "안녕하세요! 여기는 우분투 컨테이너입니다."
2019-09-18T03:15:25.490026619Z 안녕하세요! 여기는 우분투 컨테이너입니다.
2019-09-18T03:15:28.257840559Z root@77eb88a965d5:/# echo "안녕하세요! 여기는 우분투 컨테이너입니다."
2019-09-18T03:15:28.258025222Z 안녕하세요! 여기는 우분투 컨테이너입니다.
자원을 지정하여 컨테이너 생성 및 실행
docker container run [자원 Option] 이미지명[: 태그명] [인수]
네트워크 Option
--cpu-share, -c | COU의 사용 배분 |
--memory, -m | 사용할 메모리를 제한하여 실행 |
--volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v | 호스트와 컨테이너의 디렉토리를 공유 |
컨테이너를 생성 및 시작하는 환경을 지정
docker container run [환경 Option] 이미지명[: 태그명] [인수]
환경 Option
--env=[환경변수], -e | 환경변수를 설정한다. |
--env-file=[파일명] | 환경변수를 파일로부터 설정한다. |
--read-only=[true | false] | 컨테이너의 파일 시스템을 읽기 전용으로 만든다. |
--workdir=[패스], -w | 컨테이너의 작업 디렉토리를 지정한다. |
-u, --user=[사용자명] | 사용자명 또는 UID를 지정한다. |
가동 컨테이너 목록 표시
docker container ls [Option]
Option
--all, -a | 실행 중/정지 중인 것도 포함하여 모든 컨테이너를 표시 |
--filter, -f | 표시할 컨테이너의 필터링 |
--format | 표시 포맷을 지정 |
--last, -n | 마지막으로 실행된 n건의 컨테이너만 표시 |
--latest, -l | 마지막으로 실행된 컨테이너만 표시 |
--no-trunc | 정보를 생략하지 않고 표시 |
--quiet, -q | 컨테이너 ID만 표시 |
--size, -s | 파일 크기 표시 |
Format Option
JSON 형태로서 대입
.ID | 컨테이너 ID |
.Image | 이미지 ID |
.Command | 실행 명령 |
.CreatedAt | 컨테이너가 작성된 시간 |
.RunningFor | 컨테이너 가동 시간 |
.Ports | 공개 포트 |
.Status | 컨테이너 상태 |
.Size | 컨테이너 디스크 크기 |
.Names | 컨테이너 명 |
.Mounts | 볼륨 마운트 |
.Networks | 네트워크 명 |
명령어 결과
CONTAINER ID | 컨테이너의 ID |
IMAGE | 컨테이너의 바탕이 된 이미지 |
COMMAND | 컨테이너 안에서 실행되고 있는 명령 |
CREATED | 컨테이너 작성 후 경과 시간 |
STATUS | 컨테이너의 상태 |
PORTS | 할당된 포트 |
NAMES | 컨테이너 이름 |
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS ...
77eb88a965d5 ubuntu "bash" 13 days ago Up 13 days ...
docker container ls --format ":"
clever_hamilton: Up 13 days
gallant_lamarr: Up 2 weeks
recursing_beaver: Up 2 weeks
컨테이너 가동 확인
docker container stats [컨테이너 식별자]
출력 결과
CONTAINER ID | 컨테이너 식별자 |
NAME | 컨테이너명 |
CPU% | CPU 사용률 |
MEM USAGE/LIMIT | 메모리 사용량/컨테이너에서 사용할 수 있는 메모리 제한 |
MEM % | 메모리 사용률 |
NET I/O | 네트워크 I/O |
BLOCK I/O | 블록 I/O |
PIDS | PID |
sudo docker container stats 77eb88a965d5
CONTAINER ID NAME CPU % MEM USAGE / LIMIT ...
77eb88a965d5 clever_hamilton 0.00% 2.195MiB / 31.33GiB ...
컨테이너 안의 프로세스 확인
docker container top [프로세스 명]
docker container top 77eb88a965d5
UID PID PPID C ...
root 13947 13927 0 ...
컨테이너 시작
docker container start [Option] [컨테이너 식별자]
Option
--attach, -a | 표준출력, 표준 오류 출력을 연다. |
--interactive, -i | 컨테이너의 표준 출력을 연다. |
컨테이너 재시작
docker container restart [Option] [컨테이너 식별자]
Option
--time, -t | 컨테이너의 재시작 시간을지정(기본값은 10초) |
컨테이너 삭제
docker container rm [Option] [컨테이너 식별자]
Option
--force, -f | 실행중인 컨테이너를 강제로 삭제 |
--volumes, -v | 할당한 볼륨을 삭제 |
컨테이너 중단/재개
docker container pause [컨테이너 식별자]
실행중인 컨테이너에서 작동 중인 프로세스를 모두 중단
Docker 컨테이너 네트워크
네트워크 목록 표시
docker network [Option]
Option
-f, --filter=[] | 출력을 필터링한다. |
--no-trunc | 상세 정보를 출력한다. |
-q, --quiet | 네트워크 ID만 표시한다. |
Filter Key
필터링을 할때는 key=value형식으로 지정할 수 있다.
driver | 드라이버 지정 |
id | 네트워크 ID |
label | 네트워크에 설정된 label |
name | 네트워크명 |
scope | 네트워크 스코프 |
type | 네트워크의 타입 |
sudo docker network ls -q --filter driver=bridge
fa2634bde6c
네트워크 작성
docker network create [Option] [네트워크]
Option
--driver, -d | 네트워크 브리지 또는 오버레이 |
--ip-range | 컨테이너에 할당하는 IP 주소의 범위를 지정 |
--subnet | 서브넷 CIDR 형식으로 지정 |
--ipv6 | IPv6 네트워크를 유효화할지 말지 |
--label | 네트워크에 설정하는 라벨 |
네트워크 연결
docker network connect [Option] [네트워크] [컨테이너]
Option
--ip | IPv4 주소 |
--ip6 | IPv6 주소 |
--alias | 앨리어스명 |
--link | 다른 컨테이너에 대한 링크 |
--label | 네트워크에 설정하는 라벨 |
네트워크 상세 정보 확인
docker network inspect [Option] [네트워크]
네트워크 삭제
docker network rm [Option] [네트워크]
단, 네트워크를삭제하려면 docker network disconnet 명령을 사용하여 연결 중인 모든 컨테이너와의 연결을 해제해야 한다.
가동중인 Docker 컨테이너 조작
가동 컨테이너 연결
docker container attach
가동 컨테이너에서 프로세스 실행
실행중인 컨테이너 안의 프로세스 실행시
docker container exec [Option] [컨테이너 식별자] [실행할 명령] [인수]
Option
--detatch, -d | 명령을 백그라운드에서 실행한다. |
--interactive, -i | 컨테이너의 표준 입력을 연다. |
--tty, -t | tty(단말 디바이스)를 사용한다. |
--user, -u | 사용자명을 지정한다. |
가동 컨테이너의 프로세스 확인
docker container top [컨테이너 이름]
가동 컨테이너의 포트 전송 확인
docker container port [컨테이너 이름]
컨테이너의 이름 변경
docker container rename [Old 컨테이너 이름] [New 컨테이너 이름]
컨테이너안의 파일을 복사
- 컨테이너에서 호스트로 파일 복사
docker container cp [컨테이너 식별자]:[컨테이너 안의 파일 경로] [호스트의 디렉토리 경로]
- 호스트에서 컨테이너로 파일 복사
docker container cp [호스트의 디렉토리 경로] [컨테이너 식별자]:[컨테이너 안의 파일 경로]
컨테이너 조작의 차분 확인
컨테이너 안에서 어떤 조작을 하여 컨테이너가 이미지로부터 생성되었을 때와 달라진 점(차분)을 확인
docker container diff [컨테이너 식별자]
변경의 구분
A | 파일 추가 |
D | 파일 삭제 |
C | 파일 수정 |
docker container diff b03d885b68f0
...
A /home/theia/.local/lib/python3.6/site-packages/numpy/core/tests/__pycache__/test_errstate.cpython-36.pyc
A /home/theia/.local/lib/python3.6/site-
...
Docker 이미지 생성
컨테이너로부터 이미지 작성
docker container commit [Option] [컨테이너 식별자] [이미지명[: 태그명]]
Option
--author, -a | 작성자를 지정한다. |
--message, -m | 메세지를 지정한다. |
--change, -c | 커미트 시 Dockerfile 명령을 지정한다. |
--pause, -p | 컨테이너를 일시 정지하고 커미트한다. |
컨테이너를 tar 파일로 출력
docker container export [컨테이너 식별자] > [파일이름.tar]
tar 파일로부터 이미지 작성
docker image import [파일 또는 URL] | - [이미지명[: 태그명]]
이미지 저장
docker image save [Option] [저장파일명] [이미지명]
이미지 읽어 들이기
tar 이미지로부터 이미지를 읽어 들일 수 있다.
docker image load [Option]
불필요한 이미지/컨테이너를 일괄 삭제
사용하지 않는 리소스를 모두 삭제할 수 있기 떄문에 쓸 데 없는 디스크 영역 낭비를 줄일 수 있다.
docker system prune [Option]
Option
--all, -a | 사용하지 않는 리소스를 모두 삭제한다. |
--force, -f | 강제적으로 삭제한다. |
참조: 완벽한 IT 인프라 구축을 위한 Docker
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.
Leave a comment