Docker 개인 저장소 registry에서 이미지를 pull 하여 받는 중 아래와 같은 에러 로그가 발생하였습니다.
$sudo docker pull 192.168.0.210:5000/nginxtest:0.1Error 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.10.1: Pulling from nginxtestDigest: sha256:6d2ee764d8d6ce21b62c9cab92e28555c69b1a7028db7cf170b269ff97f901c1Status: Downloaded newer image for 192.168.0.210:5000/nginxtest:0.1192.168.0.210:5000/nginxtest:0.1$
RUN 명령은 현재 생성되는 과정의 이미지 위에 스크립트 또는 명령을 실행해주는 명령입니다.
실행한 결과는 새 이미지로 생성되며, 실행 내역은 이미지 히스토리에 기록됩니다.
RUN [명령어]RUN ["실행파일", "매개변수1", "매개변수2"]EX)RUN apt-get -y updateRUN /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"]
ADD
ADD 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.
절대경로를 사용할 수 없으며, 디렉토리를 지정하면 디렉토리 모든 파일을 복사합니다.
인터넷에 있는 URL을 설정할 수 있습니다.
ADD [복사할 파일 경로][이미지에 파일이 위치할 경로]EX)ADD *.txt /root/
COPY
COPY 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.
ADD 명령과 달리 URL을 사용할 수 없으며 압축 파일 그대로 복사됩니다. 절대경로 방식으로 설정해야 합니다.
COPY [복사할 파일 경로][파일이 위치할 경로]EX)COPY test.txt relativeDir/
ENV
ENV 명령은 환경 변수를 설정하는 명령입니다.
ENV로 설정한 변수는 RUN, CMD, ENTRYPOINT에 적용됩니다.
ENV [환경변수][값]EX)ENV PATH /go/bin:$PATH
EXPOSE
EXPOSE 명령은 호스트와 연결할 포트 번호를 설정하는 명령입니다.
docker run --expose 옵션과 같은 설정입니다.
EXPOSE [포트번호]EX)EXPOSE 80EXPOSE 443
USER
USER 명령은 실행할 사용자 계정을 설정하는 명령입니다.
RUN, CMD, ENTRYPOINT에 적용됩니다.
USER [계정 사용자명]EX)USER nobody
VOLUME
VOLUME 명령은 디렉토리의 내용을 컨테이너에 저장하지 않고 외부 호스트(파일시스템)에 저장하도록 설정하는 명령입니다.
명령어 사용 전 $sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu68bf744c5a56 ubuntu "/bin/bash" 3 days ago Exited (127) 3 days ago hello$$ sudo docker start [NAMES] or [CONTAINER ID]EX)$sudo docker start hellohello$명령어 사용 후$sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu68bf744c5a56 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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 8 minutes hello$$sudo docker restart [NAMES] or [CONTAINER ID]EX)$sudo docker restart hellohello$명령어 사용 후$sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 2 seconds hello$
사용 전 Up 8 minutes 상태였는데 restart 재시작 후 Up 2 seconds 상태가 되었습니다.
Docker attach 명령으로 컨테이너에 접속하기
attach 명령어는 생성하여 동작 상태인 컨테이너에 접속하는 명령입니다.
$sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES750026f56674 ubuntu "bash" 3 days ago Exited (0) 3 days ago jinsu68bf744c5a56 ubuntu "/bin/bash" 3 days ago Up 2 seconds hello$$sudo docker attach [NAMES] or [CONTAINER ID]EX)$sudo docker attach helloroot@68bf744c5a56:/#컨테이너를 생성할때 /bin/bash 설정은 안해줬을때 아래 옵션으로 접속$sudo docker exec -it [이미지 이름] /bin/bashroot@0ebf237f91f0:/#
사전에 컨테이너를 생성할 때 /bin/bash를 실행하여 컨테이너에 접속핵서 자유롭게 입력 출력이 가능합니다.
명령어 사용 전$sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES68bf744c5a56 ubuntu "/bin/bash" 4 days ago Up 16 hours hello$$sudo docker stop [NAMES]EX)$sudo docker stop hellohello$명령어 입력 후$sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES750026f56674 ubuntu "bash" 4 days ago Exited (0) 16 hours ago jinsu68bf744c5a56 ubuntu "/bin/bash" 4 days ago Exited (137) 47 seconds ago hello$