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
$
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"]
명령어 사용 전
$ 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
$