본문 바로가기

IT 인프라/DevOps

나만의 Docker Cheat Sheet

반응형

초창기 Docker 명령어들은 docker --help 입력 시 그룹화 없이 쭉 나열해 보여줬다.
때문에 처음 봤을 때 보기 어려울 뿐만 아니라 내가 사용한 명령어임에도 불구하고 기억에 잘 남지 않았다.

Docker 개발자들도 이를 인지했는지 Docker 1.13 버전부터 Management Commands라는 것을 발표했다.
Docker Command가 제공하는 기능들을 conatiner, image, network, service, volume, system 등으로 Top-Level에서 분류하고, 각 하위 명령어가 관련 명령어들을 포함하는 기능이다.

기존 사용자를 위해 예정 명령어들도 그대로 유지하는 것 같다.
그러나 실제로 사용해보니 Management Commands를 사용한 지 얼마 안 되었음에도 예전 방식보다 더 체계적이고, 직관적으로 다가와서 기억에 잘 남았다. 따라서 이 문서에서는 Management Commands를 기준으로 작성할 것이다.

 

 

Docker 1.13 Management Commands | The Couchbase Blog

Check out the video which introduces new features of Docker 1.13. Learn the problems with Docker CLI which were fixed in Docker 1.13.

blog.couchbase.com

Docker 정보 확인

Docker 버전 확인

$ docker version

Docker 실행 환경 확인

$ docker system info

Docker 디스크 사용 현황 확인

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              10                  10                  846.2MB             48.41MB (5%)
Containers          20                  0                   6.019kB             6.019kB (100%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

 

Docker Image

Image 조회하기

$ docker search nginx

Image 가져오기

$ docker image pull nginx:latest

Local에 존재하는 Image 목록 확인

$ docker image ls

Image 상세 정보 확인

$ docker image inspect nginx:latest

$ docker image inspect --format="{{ .Os}}" nginx:latest
linux

Image에 Tag 설정

$ docker image tag nginx hyunto/webserver:0.1

Docker Hub에 Image 업로드

###
# Docker Hub 로그인
###
$ docker login

###
# Docker Hub에 이미지 업로드
###
$ docker image push hyunto/webserver:0.1

Image 삭제

###
# 특정 이미지 삭제
###
$ docker image rm ubuntu:latest

###
# 사용하지 않는 이미지 모두 삭제
###
$ docker image prune

Image Export / Import

###
# Docker Image를 tar 파일로 저장
###
$ docker image save -o export.tar nginx:latest

###
# tar 파일로 저장된 Image를 읽어오기
###
$ docker image load -i export.tar

 

Docker Container

Conatiner 생성 및 실행

컨테이너 생성 및 실행 시 다양한 추가 옵션이 존재한다. 필요에 맞게 추가해 사용한다.

  • CPU, Memory 사용량
  • 로컬 디렉토리를 컨테이너의 특정 경로와 공유 (Volume)
  • DNS 서버, IP 주소, MAC 주소, Hostname
  • Network 타입
  • /etc/hosts 파일에 내용 추가
  • 포트 매핑, 노출
  • 백그라운드(Detach 모드) 사용 여부
  • 환경변수, 사용자, Working Directory
  • Read Only 여부
###
# 생성 후 실행
###
$ docker container create --name webserver -p 10080:80 nginx:latest
$ docker container start webserver

###
# 생성과 실행을 한 번에
###
$ docker container run --name webserver2 -d -p 10081:80 nginx:latest

###
# 일시정지 및 해제
###
$ docker container pause webserver
$ docker container unpause webserver

###
# 재실행
###
$ docker container restart webserver

###
# 종료
### 
$ docker container stop webserver

###
# 컨테이너 생성 및 Interactive 실행
#   - 컨테이너 생성, 실행 후 bash 쉘 실행
###
$ docker container run -it --name test ubuntu:latest /bin/bash

Container 목록과 상태 확인

###
# 아래의 명령어는 모두 List Containers 기능을 수행한다.
###
$ docker container ls
$ docker container ps
$ docker container list

Container 시스템 자원 사용 현황 확인

$ docker container stats webserver
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b90ed107fa90        webserver           0.00%               1.867MiB / 1.952GiB   0.09%               1.42kB / 1.27kB     0B / 0B             2

Container에서 실행 중인 프로세스 확인

$ docker container top webserver
PID                 USER                TIME                COMMAND
3473                root                0:00                nginx: master process nginx -g daemon off;
3513                101                 0:00                nginx: worker process

Container 포트 사용 현황 확인

$ docker container port webserver
80/tcp -> 0.0.0.0:10080

Container 로그 출력

$ docker container logs webserver
172.17.0.1 - - [16/Nov/2019:13:53:40 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"

Container 안의 파일 복사

###
# Container -> Host
###
$ docker container cp webserver:/etc/nginx/nginx.conf /tmp/nginx.conf

###
# Host -> Container
###
$ docker container cp ./nginx.conf webserver:/etc/nginx/nginx.conf

Container 생성 이후 변경점 확인

컨테이너가 생성된 이후 부터 컨테이너 안에서 직접 변경/조작을 한 내용을 출력한다.

$ docker container diff webserver

실행 중인 Container를 Export / Import

###
# 실행 중인 Container의 디렉토리와 파일들을 모아 tar 파일로 생성
###
$ docker container export webserver > webserver.tar

###
# 
###
$ cat webserver.tar | docker image import - hyunto/webserver:1.0

Container 접속

$ docker container exec -it webserver /bin/bash
root@b90ed107fa90:/#

Container 삭제

###
# 정지 중인 특정 컨테이너 삭제
###
$ docker container rm webserver

###
# 정지 중인 모든 컨테이너 삭제
###
$ docker container prune

Docker Network

네트워크 목록 확인

도커 컨테이너 실행시 네트워크를 명시적으로 지정하지 않으면 기본값인 "bridge" 네트워크로 설정된다.
(docker container inspect 명령어로 확인 가능)

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0152ec479c2f        bridge              bridge              local
eceaa9fe24e5        host                host                local
19e8ff8eb010        none                null                local

네트워크 생성

--drive 옵션으로 "bridge", "overay" 또는 커스텀 네트워크 드라이브를 선택할 수 있다.

사용자 정의 네트워크를 사용하는 컨테이너들은 dockerd 내부 DNS 서버에 의해 Name Resolve가 된다.
따라서 사용자 정의 네트워크 내에 생성된 컨테이너들 간에 컨테이너 이름 또는 --net-alias 옵션으로 설정된 앨리어스 이름으로 쉽게 통신할 수 있다.

반면 기본 브릿지 네트워크는 자동으로 Name Resolve를 할 수 없기 때문에 docker container run 명령어 실행시 --link 옵션을 추가하여 컨테이너 내 /etc/hosts 파일에 등록해야 한다.

$ docker network create --driver=bridge custom-network
cc2a78046af11c2c91f6a2c9755749589da49751649af2587c20e5e391ab766f

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0152ec479c2f        bridge              bridge              local
cc2a78046af1        custom-network      bridge              local
eceaa9fe24e5        host                host                local
19e8ff8eb010        none                null                local

네트워크 연결

###
# 생성된 컨테이너에 custom-network 연결
###
$ docker network connect custom-network webserver

###
# 컨테이너 시작 시 custom-network 지정
###
$ docker container run -itd --name webserver --net=custom-network nginx:latest

###
# 네트워크 연결 해제
###
$ docker network disconnect custom-network webserver

네트워크 상세 정보 확인

$ docker network inspect custom-network

네트워크 삭제

$ docker network rm custom-network

Docker 관리

불필요한 이미지와 컨테이너 일괄 삭제

$ docker system prune --all
반응형

'IT 인프라 > DevOps' 카테고리의 다른 글

Docker 이미지 용량을 줄이는 Tip  (0) 2019.11.19
나만의 Docker Compose Cheat Sheet  (0) 2019.11.18
나만의 Dockerfile Cheat Sheet  (0) 2019.11.18
일반 계정으로 docker 명령어 사용하기  (0) 2019.11.16
git-secret  (0) 2019.11.16