반응형

 

 

 

 

 

Docker

registry pull 에러해결  "Error response from daemon"


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

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
$

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

 

 

Dockerfile 

Dockerfile은 Docker 이미지 설정 파일이며, Dockerfile에 설정된 내용으로 이미지를 생성할 수 있습니다.

  • Dockerfile은 대소문자를 구분하지 않습니다.
  • Dockerfile 명령은 순서대로 실행됩니다.
  • Dockerfile은 FROM 명령으로 시작해야 합니다.
  • #은 주석으로 사용합니다.
  • 각 명령들은 독입적으로 실행됩니다. 

 

 

 

Dockerfile 에서 사용하는 환경 변수 목록

 

  • FROM

FROM 명령은 기본 베이스 이미지를 설정하는 명령입니다.

이미지 이름만 설정하면 latest를 사용하여 생성됩니다. 

이미지 이름은 생략할 수 없습니다.

Dockerfile 하나에 FROM을 여러개 생성할 수 있으나 --tag 옵션으로 이미지 이름을 설정했다면 마지막 FROM에 적용됩니다.

FROM [이미지이름]:[태그]

EX)
FROM ubuntu:14.04

 

 

  • MAINTAINER

MAINTAINER 명령은 이미지 생성하는 관리자의 정보를 설정하는 명령입니다.

빌드에 영향을 주지 않기 때문에 생략하는 경우도 있습니다.

MAINTAINER [NAME] [Email]

EX)
MAINTAINER JinSu <djwlstn123@naver.com>

 

 

  • RUN

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"]

 

 

  • 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 80
EXPOSE 443

 

 

  • USER

USER 명령은 실행할 사용자 계정을 설정하는 명령입니다.

RUN, CMD, ENTRYPOINT에 적용됩니다.

USER [계정 사용자명]

EX)
USER nobody

 

 

  • VOLUME

VOLUME 명령은 디렉토리의 내용을 컨테이너에 저장하지 않고 외부 호스트(파일시스템)에 저장하도록 설정하는 명령입니다.

VOLUME [컨테이너 디렉토리]
VOLUME ["컨테이너 디렉토리1", "컨테이너 디렉토리2"]

EX)
VOLUME /data
VOLUME ["/data", "/var/log/hello"]

 

 

  • WORKDIR

WORKDIR 명령은 RUN, CMD, ENTRYPOINT 명령이 실행될 디렉토리를 설정하는 명령입니다.

절대경로 대신 상대경로도 사용 할 수 있습니다.

WORKDIR [경로]

EX)
WORKDIR /var/www

 

 

  • ONBUILD

ONBUILD 명령은 생성한 이미지를 기반으로 다른 이미지가 생성될 떄 명령을 실행하는 명령입니다.

최초에 ONBUILD 사용한 상태에서는 아무 명령도 실행하지 않으며, 다음 이미지가 FROM으로 사용될 때 실행할 명령을 예약하는 기능입니다.

ONBUILD [Dockerfile 명령] [Dockerfile 명령의 매개변수]

EX)
ONBUILD RUN touch /test.txt
ONBUILD ADD test.txt /test.txt

 

 

 

 

 

 

Dockerfile 예제 작성하기

 

컨테이너 이미지를 만들기 위해 Dockerfile를 설정합니다.

$ vi Dockerfile

FROM ubuntu:14.04
MAINTAINER jinsu <djwlstn123@Naver.com>

RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\n daemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx

VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]

WORKDIR /etc/nginx

CMD ["nginx"]

EXPOSE 80
EXPOSE 443
  • FROM : 베이스 이미지 선택 [이미지] [태그] 
  • MAINTAINER : 제작자 정보
  • RUN : nginx를 설치하기 위해 필요한 셸 스크립트 또는 명령을 입력
  • VOLUME : /data 경로를 이미지를 외부 저장소랑 공유하는 디렉토리 목록
  • CMD : 컨테이너가 동작하게 됐을 때 실행할 실행 파일이나 셸 스크립트
  • WORKDIR : CMD에서 설정한 실행파일이 실행될 디렉토리
  • EXPOSE : 외부와 연결할 포트 번호

 

 

 

Docker build 명령으로 이미지 생성하기

 

Docker build 명령은 Dockerfile에 설정된 이미지를 생성하는 명령입니다.

$ sudo docker build -t nginxtest:0.1 .

Sending build context to Docker daemon  2.048kB
Step 1/11 : FROM ubuntu:14.04
 ---> 13b66b487594
Step 2/11 : MAINTAINER jinsu <djwlstn123@Naver.com>
 ---> Running in 9d3596a43146
Removing intermediate container 9d3596a43146
 ---> abbb27fabc8c
Step 3/11 : RUN apt-get update
 ---> Running in 620216d05c75
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]
Get:2 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:3 http://archive.ubuntu.com trusty-backports InRelease [65.9 kB]
Get:4 http://security.ubuntu.com trusty-security/main amd64 Packages [1032 kB]
Get:5 https://esm.ubuntu.com trusty-infra-security InReleas
...
..
.
계속 설치중

$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginxtest    0.1       740379f9b11b   About a minute ago   232MB
ubuntu       14.04     13b66b487594   14 months ago        197MB
$
  • 아까 지정한 nginxtest 이름과 tag 0.1이 생성되었습니다.

 

 

 

Docker run 명령으로 컨테이너 생성하기

 

Dockerfile로 nginx를 설치하는 이미지를 설정하고 build하여 생성된 이미지를 run 명령을 통해 컨테이너를 생성하여 실행시키는 명령입니다.

$ sudo docker run --name jinsu-nginx -d -p 80:80 -v /root/data:/data nginxtest:0.1
61edbce54f412f5445422515247b95af982c6c99ad24d758c855056c8d69ab28
$ 

$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS         PORTS                                        NAMES
61edbce54f41   nginxtest:0.1   "nginx"   10 seconds ago   Up 9 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   jinsu-nginx
$
  • docker run -d 옵션은 컨테이너를 백그라운드 상태로 실행하는 옵션입니다.
  • docker run -p 80:80 옵션은 제 ubuntu 80번 포트와 생성하는 컨테이너 80번 포트를 연결하는 옵션입니다.
  • docker run -v 옵션은 제 ubuntu /root/data 디렉토리를 생성하는 컨테이너 /data 디렉토리에 연결하는 명령으로 제 /root/data 디렉토리에 파일을 넣으면 생성된 컨테이너에서 해당 파일을 읽을 수 있습니다.

 

 

http://[ubuntu server IP]:80 으로 접속하면 nginx가 정상적으로 동작하는 모습을 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

Docker

Ubuntu 환경에서 Docker 명령어 사용하기


 

Ubuntu 20.04.4 LTS 환경으로 테스트 진행

 

 

 

 

 

Docker start 명령으로 컨테이너 동작하기

 

start 명령어는 정지된 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   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를 실행하여 컨테이너에 접속핵서 자유롭게 입력 출력이 가능합니다.
  • Bash 셸에서 exit 또는 Ctrl + D를 입력하면 컨테이너가 정지되면서 접속이 끊어지게 됩니다.
  • Ctrl + P, Ctrl + Q를 순서대로 입력하면 컨테이너를 정지하지 않고 컨테이너에서 나오게 됩니다.

 

 

 

Docker exec 명령으로 외부에서 컨테이너 안의 명령 실행하기

 

exec 명령어는 컨테이너의 /bin/bash를 통해 접속하여 입출력하는 것이 아닌 외부에서 컨테이너 안의 명령을 실행하는 명령입니다.

명령어를 실행하려면 컨테이너가 Up 상태에서만 가능합니다.
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED      STATUS                    PORTS     NAMES
750026f56674   ubuntu    "bash"        3 days ago   Exited (0) 16 hours ago             jinsu
68bf744c5a56   ubuntu    "/bin/bash"   4 days ago   Up 16 hours                         hello
$ 

$ sudo docker exec [NAMES] [명령] [매개 변수]

EX)
$ sudo docker exec hello echo "Good day"
Good day
$

EX)
$ sudo docker exec hello apt-get update
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [4653 B]
Get:4 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB]
Get:5 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [156 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:7 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [159 kB]
Get:8 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [71.8 kB]
Get:9 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 Packages [266 kB]
Get:10 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages [1792 kB]
Get:11 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages [17.5 MB]
Get:12 http://archive.ubuntu.com/ubuntu jammy/restricted amd64 Packages [164 kB]
Get:13 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 Packages [4653 B]
Get:14 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [277 kB]
Get:15 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [157 kB]
Get:16 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [126 kB]
Get:17 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [1202 B]
Fetched 21.2 MB in 5s (4319 kB/s)
Reading package lists...
$

 

 

 

 

 

Docker stop 명령으로 컨테이너 정지시키기

 

stop 명령어는 Up상태, 동작중인 상태의 컨테이너를 정지시키는 명령입니다.

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

 

 

 

 

반응형
반응형

 

 

 

Ubuntu 20.04.4 LTS 환경에서 Docker 설치하기

 

 

 

Docker를 설치하기전에 이전 버전의 Docker가 설치되어있는지 확인하고 지워줍니다.

# sudo apt-get remove docker docker-engine docker.io containerd runc

 

 

apt 패키지를 업데이트 해주세요.

# sudo apt-get update
# sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

 

Docker 공식 GPG key 추가하기 위해 다음 명령을 입력합니다.

# sudo mkdir -p /etc/apt/keyrings
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 
 

repository 설정을 위해 다음 명령을 입력합니다.

# echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

 

Docker Engine 설치

# sudo apt-get update
# sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

 

설치가 완료되면 버전을 확인합니다.

# sudo docker version

 

 

Docker 서비스 등록 및 실행을 위해 다음 명령을 입력합니다.

# sudo systemctl enable docker
# sudo systemctl start docker

 

Docker가 정상 작동하는지 확인

# sudo docker run hello-world

 

 

 

반응형

+ Recent posts