반응형

 

Docker 컨테이너 레지스트리를 S3와 연결하여 이미지를 올리는 방법

 

 

 

 

AWS S3 버킷 생성

 

 

 

위에 본인 계정을 눌러서 보안 자격증명 선택

 

 

 

액세스 키를 생성하고 액세스 키 ID, 보안 액세스 키 정보를 저장하세요

 

 

 

 

 

이미지 공유하는 서버

# docker pull registry:latest

# docker run -d -p 5000:5000 --name S3-registry \
> -e SETTINGS_FAVOR=s3 \
> -e AWS_BUCKET=myjinsubucket \
> -e STORAGE_PATH=/registry \
> -e AWS_KEY=AKIAXTQDBB4IWDCCQ7G71 \
> -e AWS_SECRET=jB+PT5NNL38XRR7mw+I1KnGm0+sr+GEl99waCxJy1 \
> registry
ef05e0f6c4f5dd66e05557de5e5efd4ac95dc11914abeaf51baca2642d42cc76

# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS         PORTS                                       NAMES
ef05e0f6c4f5   registry            "/entrypoint.sh /etc…"   9 minutes ago   Up 9 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   S3-registry
  • Docker 레지스트리 이미지를 받습니다.
  • registry:latest 이미지를 컨테이너로 실행합니다.
  • AWS S3 저장소 설정 
  • > SETTINGS_FLAVOR : 이미지 저장 방법입니다. S3를 설정합니다.
  • > AWS_BUCKET : 이미지 데이터를 저장할 S3 버킷 이름입니다.
  • > STORAGE_PATH : 이미지 데이터 저장할 경로입니다.
  • > AWS_KEY : AWS 액세스 키를 설정합니다.
  • > AWS_SECRET : AWS 시크릿 키를 설정합니다.

 

 

 

 

 

 

 

반응형
반응형

 

Docker 개인 저장소 구축하기

 

보통은 알려진 CA에서 발급한 TLS 인증서를 사용하여 레지스트리를 보호하는 것이 매우 권장되지만, 자체 서명된 인증서를 사용하거나 암호화되지 않은 HTTP 연결을 통해 레지스트리를 사용하도록 선택할 수 있습니다. 만약 인터넷이 안되거나 그냥 개인이 따로 저장하겠다고하면 HTTP 연결을 통해 개인 저장소를 구축할 수 있습니다.

 

Docker 명령은 기본적으로 Docker Hub를 사용합니다. 

Docker 저장소 서버는 Docker registry 서버라고 부릅니다.

# docker push 명령으로 레지스트리 서버에 이미지를 올리고,

# docker pull 명령으로 이미지를 받을 수 있습니다.

 

 

 

insecure-registry 설정

# vi /etc/docker/daemon.json

{
  "insecure-registries" : ["192.168.0:201:5000"]
}

# systemctl restart docker
  • daemon.json 생성 및 해당 내용 저장
  • docker restart

 

 

 

개인 저장소가 잘 구축 되었는지 ubuntu 서버 2개로 테스트 해봤습니다.

 

 

개인저장소 구축한 서버

# docker run -d -p 5000:5000 --name hello-registry \
> -v /tmp/registry:/tmp/registry \
> registry
2976da0da8d746a1ba60f88930dd46bff8143795c516dd9653fcf1a6942432e5
#
# docker ps 
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                       NAMES
2976da0da8d7   registry            "/entrypoint.sh /etc…"   3 seconds ago    Up 2 seconds    0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   hello-registry
  • 이미지 파일은 호스트의 /tmp/registry 디렉터리에 저장됩니다.

 

 

 

이미지 tag, push 설정하기

# docker build --tag hello:0.1 .

# docker images
REPOSITORY                       TAG           IMAGE ID       CREATED          SIZE
hello                            0.1           75f0625417ad   36 seconds ago   232MB

# docker tag hello:0.1 localhost:5000/hello:0.1

# docker images
REPOSITORY                       TAG           IMAGE ID       CREATED              SIZE
hello                            0.1           75f0625417ad   About a minute ago   232MB
localhost:5000/hello             0.1           75f0625417ad   About a minute ago   232MB

# docker push localhost:5000/hello:0.1
The push refers to repository [localhost:5000/hello]
2d1630f34efb: Pushed 
0492b535da40: Pushed 
1db69eba3ab3: Pushed 
b9b64cd744c9: Pushed 
83109fa660b2: Pushed 
30d3c4334a23: Pushed 
f2fa9f4cf8fd: Pushed 
0.1: digest: sha256:6b8296113e568e6184eb893fd02f006034c26b0778c86922cd65554f0f379106 size: 1782
  • 가지고있는 Dockerfile을 build 하여 name : hello | tag : 0.1로 image 생성
  • tag 생성 : docker tag <이미지이름>:<tag> <registry URL>/<이미지 이름>:<tag>
  • push 명령 : docker push <registry URL>/<이미지 이름>:<tag>

 

 

 

개인저장소에 있는 이미지를 Pull 받을 서버

# docker pull 192.168.0.201:5000/hello:0.1
Error response from daemon: Get "https://192.168.0.201:5000/v2/": http: server gave HTTP response to HTTPS client
  • pull 명령으로 개인저장소 서버에서 이미지를 받아오는데 오류 로그 발생
  • 해결방법 : insecure-registries 설정 필요

 

 

# vi /etc/docker/daemon.json
{
          "insecure-registries" : ["192.168.0.201:5000"]
}

# docker pull 192.168.0.201:5000/hello:0.1
0.1: Pulling from hello
2e6e20c8e2e6: Pull complete 
0551a797c01d: Pull complete 
512123a864da: Pull complete 
0cde67eab025: Pull complete 
119857f951bc: Pull complete 
41786f85cd57: Pull complete 
56705ad25a7d: Pull complete 
Digest: sha256:6b8296113e568e6184eb893fd02f006034c26b0778c86922cd65554f0f379106
Status: Downloaded newer image for 192.168.0.201:5000/hello:0.1
192.168.0.201:5000/hello:0.1

# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
192.168.0.201:5000/hello   0.1       75f0625417ad   14 minutes ago   232MB
  • insecure-registries 설정 후 pull 했을때 이미지 받아오기 완료

 

 

 

참고링크 : https://docs.docker.com/registry/insecure/

 

 

 

 

 

 

 

 

반응형
반응형

 

 

도커 명령어를 입력하려면 관리자 계정이 아니고는 sudo를 항상 입력해줘야하지만 해당 명령어를 이용하여 일반 사용자에서도 명령어 입력이 가능하게 설정하는 방법입니다.

$ sudo usermod -aG docker ${USER}
$ sudo service docker restart

현재 계정에서 로그아웃 한 뒤 다시 로그인합니다.

 

 

 

 

 

반응형
반응형

 

 

 

 

 

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 환경으로 테스트 진행

 

 

 

 

 

 

 

 

Docker history 명령으로 이미지 history 확인하기

 

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
$

 

 

 

 

 

 

Docker inspect 명령으로 이미지와 컨테이너 세부 정보 확인하기

 

inspect 명령은 이미지와 컨테이너의 세부 정보를 출력하는 명령입니다.

$ sudo docker inspect [이미지] or [컨테이너 이름]

EX)
$ sudo docker inspect jinsu-nginx
[
    {
        "Id": "61edbce54f412f5445422515247b95af982c6c99ad24d758c855056c8d69ab28",
        "Created": "2022-06-02T09:08:38.839283565Z",
        "Path": "nginx",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 94810,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-06-02T09:08:39.140534723Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
...
..
.
내용이 길게 출력중

 

 

 

 

반응형
반응형

 

 

 

 

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
$

 

 

 

 

반응형
반응형

 

 

 

Docker

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


 

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

 

 

 

 

Docker search 명령으로 이미지 검색하기

 

search 명령어는 Docker Hub 및 여러 사람들이 올린 이미지를 검색하는 명령입니다.

$ sudo docker search [image name]

EX)
$ sudo docker search ubuntu
 
 

 

 

 

Docker pull 명령으로 이미지 받기

 

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
$

 

 

 

반응형
반응형

 

 

 

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