Docker 개인 저장소 registry에서 이미지를 pull 하여 받는 중 아래와 같은 에러 로그가 발생하였습니다.
$ sudo docker pull 192.168.0.210:5000/nginxtest:0.1
Error response from daemon: Get "https://192.168.0.210:5000/v2/": http: server gave HTTP response to HTTPS client
$
해당 에러 로그가 발생하는 사유는 Docker 구성파일 데몬에 insecure-registries 부분이 등록이 안되어 있으면 에러가 발생합니다.
해결방법
Docker 구성 파일을 사용하여 설정
vi 편집기를 이용하여 daemon.json을 설정 (파일이 없다면 생성)
$ sudo vi /etc/docker/daemon.json
사용하는 URL 및 IP를 등록하여 저장
$ cat /etc/docker/daemon.json
{
"insecure-registries": ["192.168.0.210:5000"]
}
$
daemon.json 저장 후 docker 데몬 재시작
$ sudo systemctl restart docker
문제없이 잘 받아오는 것을 확인
$ sudo docker pull 192.168.0.210:5000/nginxtest:0.1
0.1: Pulling from nginxtest
Digest: sha256:6d2ee764d8d6ce21b62c9cab92e28555c69b1a7028db7cf170b269ff97f901c1
Status: Downloaded newer image for 192.168.0.210:5000/nginxtest:0.1
192.168.0.210:5000/nginxtest:0.1
$
history 명령은 동작중인 컨테이너에 입력된 명령어 history를 확인하는 명령어입니다.
이전 글에서 dockerfile로 만든 nginx 컨테이너입니다. 만들면서 사용된 RUN 커맨드가 history에 기록됩니다.
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61edbce54f41 nginxtest:0.1 "nginx" 18 minutes ago Up 18 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp jinsu-nginx
$
$sudo docker history [NAMES]:[TAG]
EX)
$ sudo docker history nginxtest:0.1
IMAGE CREATED CREATED BY SIZE COMMENT
740379f9b11b 29 minutes ago /bin/sh -c #(nop) EXPOSE 443 0B
929f903e2540 29 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
ed64817830f8 29 minutes ago /bin/sh -c #(nop) CMD ["nginx"] 0B
2282172fd290 29 minutes ago /bin/sh -c #(nop) WORKDIR /etc/nginx 0B
de12d0c872bc 29 minutes ago /bin/sh -c #(nop) VOLUME [/data /etc/nginx/… 0B
3da13963d2b2 29 minutes ago /bin/sh -c chown -R www-data:www-data /var/l… 0B
94c41b3f9ed3 29 minutes ago /bin/sh -c echo "\n daemon off;" >> /etc/ngi… 1.61kB
d6e387a15b8b 29 minutes ago /bin/sh -c apt-get install -y nginx 21.1MB
2f20874facdc 29 minutes ago /bin/sh -c apt-get update 14.1MB
abbb27fabc8c 29 minutes ago /bin/sh -c #(nop) MAINTAINER jinsu <djwlstn… 0B
13b66b487594 14 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 14 months ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 14 months ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 0B
<missing> 14 months ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 195kB
<missing> 14 months ago /bin/sh -c #(nop) ADD file:276b5d943a4d284f8… 196MB
$
Docker cp 명령으로 복사하기
cp 명령은 컨테이너에서 있는 파일을 복사하는 명령입니다.
명령어 입력 전
$ ls -al
total 12
drwxrwxr-x 2 djwlstn123 djwlstn123 4096 Jun 2 09:42 .
drwxr-xr-x 5 djwlstn123 djwlstn123 4096 Jun 2 08:54 ..
-rw-rw-r-- 1 djwlstn123 djwlstn123 325 Jun 2 08:54 Dockerfile
$
동작중인 컨테이너 확인
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61edbce54f41 nginxtest:0.1 "nginx" 30 minutes ago Up 30 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp jinsu-nginx
$
$ sudo docker cp [NAMES]:[경로] [저장경로]
EX)
$ sudo docker cp jinsu-nginx:/etc/nginx/nginx.conf ./
명령어 입력 후
$ ls -al
total 16
drwxrwxr-x 2 djwlstn123 djwlstn123 4096 Jun 2 09:44 .
drwxr-xr-x 5 djwlstn123 djwlstn123 4096 Jun 2 08:54 ..
-rw-rw-r-- 1 djwlstn123 djwlstn123 325 Jun 2 08:54 Dockerfile
-rw-r--r-- 1 root root 1615 Jun 2 09:05 nginx.conf
$
Docker commit 명령으로 컨테이너 변경된 내용 이미지로 생성하기
commit 명령은 컨테이너의 추가로 변경된 사항을 이미지 파일로 생성하는 명령입니다.
명령어 입력 전
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginxtest 0.1 740379f9b11b 43 minutes ago 232MB
ubuntu 14.04 13b66b487594 14 months ago 197MB
$
$ sudo docker commit [옵션] [컨테이너 이름] [이미지 이름]:[태그]
EX)
$ sudo docker commit jinsu-nginx nginxtest:0.2
sha256:45fe3bfa31b6a7b9eb73603decb26779e348acd6e41ecd176cbeaf0c54c0c967
$
명령어 입력 후
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginxtest 0.2 45fe3bfa31b6 11 seconds ago 232MB
nginxtest 0.1 740379f9b11b 46 minutes ago 232MB
ubuntu 14.04 13b66b487594 14 months ago 197MB
$
Docker diff 명령으로 컨테이너 변경된 파일 확인하기
diff 명령은 컨테이너가 실행되면서 변경된 파일 목록을 출력하여 보여줍니다.
비교 기준은 컨테이너 생성한 이미지입니다.
A : 추가된 파일
C : 변경된 파일
D : 삭제된 파일
$ sudo docker diff [컨테이너 이름]
EX)
$ sudo docker diff jinsu-nginx
A /data
C /etc
C /etc/nginx
A /etc/nginx/site-enabled
C /var
C /var/lib
C /var/lib/nginx
A /var/lib/nginx/body
A /var/lib/nginx/fastcgi
A /var/lib/nginx/proxy
A /var/lib/nginx/scgi
A /var/lib/nginx/uwsgi
C /run
A /run/nginx.pid
$
RUN 명령은 현재 생성되는 과정의 이미지 위에 스크립트 또는 명령을 실행해주는 명령입니다.
실행한 결과는 새 이미지로 생성되며, 실행 내역은 이미지 히스토리에 기록됩니다.
RUN [명령어]
RUN ["실행파일", "매개변수1", "매개변수2"]
EX)
RUN apt-get -y update
RUN /bin/bash -c
CMD
CMD 명령은 컨테이너가 시작될 때 실행할 실행 파일 또는 쉘 스크립트 명령입니다.
Dockerfile에는 하나의 CMD 명령만 있을 수 있습니다. (둘 이상의 CMD를 나열하면 마지막 CMD만 적용됩니다.)
여러 명령어를 사용하려면 따로 스크립트를 생성하여 설정해주어야합니다.
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
CMD [명령]
EX)
CMD ["nginx"]
ENTRYPOINT
ENTRYPOINT 명령은 컨테이너가 시작될 떄 스크립트 또는 명령을 실행합니다.
docker run, start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다.
ENTRYPOINT는 Dockerfile에 단 한번만 사용할 수 있습니다.
ENTRYPOINT [명령]
ENTRYPOINT ["실행파일", "매개변수1", "매개변수2"]
EX)
셸(/bin/sh)로 명령 실행
ENTRYPOINT cat /home/study/test.text
셸없이 바로 실행
ENTRYPOINT ["cat", "/home/study/test.text"]
## 출력 리다이렉션 명령 실행의 표준 출력을 파일로 저장합니다. 명령어 실행 결과를 특정 장치로 보낼 수도 있습니다. EX) $ sudo echo "Good day" > ./Good.txt -rw-rw-r-- 1 guest guest 9 Jun 1 08:00 Good.txt
<
## 입력 리다이렉션 파일의 내용을 읽어 명령의 표준 입력을 사용 EX) $ cat < ./Good.txt Good day
>>
## 명령 실행의 표준 출력을 파일에 추가 >는 이미 파일에 내용을 덮어 쓰지만 >>는 파일 뒷부분에 내용을 추가 EX) $ sudo echo "Today" >> ./Good.txt Good day Today
2>
## 명령 실행의 표준 에러를 파일로 저장
2>>
## 명령 실행의 표준 에러를 파일에 추가
&>
## 표준 출력과 표준 에러를 모두 파일로 저장
1>&2
## 표준 출력을 표준 에러로 보내기
2>&1
## 표준에어를 표준 출력으로 보냅니다.
|
## 파이프 명령 실행의 표준 출력을 다른 명령의 표준 입력으로 보내줍니다. 첫번째 명령의 출력 값을 두번째 명령에서 처리합니다. EX) $ ls -al | grep Good -rw-rw-r-- 1 djwlstn123 djwlstn123 15 Jun 1 08:04 Good.txt
명령어 사용 전
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 3 days ago Exited (127) 3 days ago hello
$
$ sudo docker start [NAMES] or [CONTAINER ID]
EX)
$ sudo docker start hello
hello
$
명령어 사용 후
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 5 seconds hello
$
사용 전 Exited 3 days ago 상태였는데 start 명령어를 사용하여 Up 5 seconds 상태가 되었습니다.
Docker restart 명령으로 컨테이너 재시작하기
restart 명령어는 PC를 재부팅하는 것처럼 컨테이너를 재시작하게 만들어 줍니다.
명령어 사용 전
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 8 minutes hello
$
$ sudo docker restart [NAMES] or [CONTAINER ID]
EX)
$ sudo docker restart hello
hello
$
명령어 사용 후
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 2 seconds hello
$
사용 전 Up 8 minutes 상태였는데 restart 재시작 후 Up 2 seconds 상태가 되었습니다.
Docker attach 명령으로 컨테이너에 접속하기
attach 명령어는 생성하여 동작 상태인 컨테이너에 접속하는 명령입니다.
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 2 seconds hello
$
$ sudo docker attach [NAMES] or [CONTAINER ID]
EX)
$ sudo docker attach hello
root@68bf744c5a56:/#
컨테이너를 생성할때 /bin/bash 설정은 안해줬을때 아래 옵션으로 접속
$ sudo docker exec -it [이미지 이름] /bin/bash
root@0ebf237f91f0:/#
사전에 컨테이너를 생성할 때 /bin/bash를 실행하여 컨테이너에 접속핵서 자유롭게 입력 출력이 가능합니다.
명령어 사용 전
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bf744c5a56 ubuntu "/bin/bash" 4 days ago Up 16 hours hello
$
$ sudo docker stop [NAMES]
EX)
$ sudo docker stop hello
hello
$
명령어 입력 후
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 4 days ago Exited (0) 16 hours ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 4 days ago Exited (137) 47 seconds ago hello
$
pull 명령어는 Docker Hub 및 여러 사람들이 올린 이미지를 다운 받는 명령입니다.
$ sudo docker pull [image name]:[tag] 형식으로 입력됩니다.
$ sudo docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
0551a797c01d: Pull complete
512123a864da: Pull complete
Digest: sha256:96a36dd3bcd8f149fa9874c4e28c35c01f715b3e5f8f1a8e06b45887619bf43b
Status: Downloaded newer image for ubuntu:14.04
docker.io/library/ubuntu:14.04
$ sudo docker pull ubuntu:latest
latest: Pulling from library/ubuntu 125a6e411906: Pull complete Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
이미지 이름에 jinsu/ubuntu 처럼 /앞에 사용자명을 입력하면 Docker Hub에서 해당 사용자가 올린 이미지를 다운받습니다.
$ sudo docker pull jinsu/ubuntu:latest
Docker images 명령으로 설치된 이미지 목록 확인
images 명령어는 다운받거나 설치된 이미지 목록을 출력해주는 명령입니다.
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d2e4e1f51132 4 weeks ago 77.8MB
ubuntu 14.04 13b66b487594 14 months ago 197MB
EX)
$ sudo docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d2e4e1f51132 4 weeks ago 77.8MB
ubuntu 14.04 13b66b487594 14 months ago 197MB
Docker run 명령으로 컨테이너 실행하기
run 명령어는 이미지를 컨테이너로 생성하는 명령입니다.
$ Docker run [option] [image name] [file name]
EX)
$ sudo docker run -i -t --name hello ubuntu /bin/bash
-i, -t 옵션을 사용하여 생성할 컨테이너안에 Bash를 사용하여 나중에 접속하여 입력 및 출력이 가능합니다.
--name 옵션으로 컨테이너 이름을 지정 할 수 있습니다.
Docker ps 명령으로 컨테이너 목록 확인하기
ps 명령어는 모든 컨테이너 목록을 출력하는 명령입니다.
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 3 days ago Exited (127) 3 days ago hello
ps -a 옵션을 사용하면 정지된 컨테이너까지 모두 출력하는 명령입니다.
옵션없이 ps만 사용하면 Up 상태인 컨테이너만 출력됩니다.
Docker rm 명령으로 컨테이너 삭제하기
run 명령어는 생성된 컨테이너를 삭제하는 명령입니다.
명령어 입력 전
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
750026f56674 ubuntu "bash" 4 days ago Exited (0) 17 hours ago jinsu
68bf744c5a56 ubuntu "/bin/bash" 4 days ago Exited (137) 54 minutes ago hello
$
$ sudo docker rm [NAMES] or [CONTAINER ID}
EX)
$ sudo docker rm jinsu
jinsu
$
명령어 입력 후
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bf744c5a56 ubuntu "/bin/bash" 4 days ago Exited (137) 55 minutes ago hello
$
Docker rmi 명령으로 이미지 삭제하기
rmi 명령어는 다운받은 이미지를 삭제하는 명령입니다.
명령어 입력 전
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest d2e4e1f51132 4 weeks ago 77.8MB
ubuntu 14.04 13b66b487594 14 months ago 197MB
$
$ sudo docker rmi [NAMES]:[TAG]
EX)
$ sudo docker rmi ubuntu:latest
Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container 68bf744c5a56 is using its referenced image d2e4e1f51132
$
지우려는 이미지가 컨테이너로 사용중이라면 위와같이 제거 할 수 없다는 에러 로그가 나옵니다.
컨테이너 확인 해보면 해당 이미지로 생성된 컨테이너가 존재합니다.
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bf744c5a56 ubuntu "/bin/bash" 4 days ago Exited (137) 59 minutes ago hello
$
생성된 컨테이너 제거
$ sudo docker rm hello
hello
$
이미지 삭제 명령
$ sudo docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Deleted: sha256:d2e4e1f511320dfb2d0baff2468fcf0526998b73fe10c8890b4684bb7ef8290f
Deleted: sha256:e59fc94956120a6c7629f085027578e6357b48061d45714107e79f04a81a6f0c
$
명령어 입력 후
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 13b66b487594 14 months ago 197MB
$