Docker 명령

7 minute read

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
01.jpg
컨테이너 생성
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을 남겨주세요.

Categories:

Updated:

Leave a comment