반응형

 

 

 

Docker에서 기본 인증 사용하기

도커 레지스트리에는 로그인 기능이 없기 때문에 Nginx의 기본인증 기능을 사용해야하며, HTTP 프로토콜에는 인증을 지원하지 않습니다. 따라서 HTTPS 프로토콜을 사용해야합니다.

 

 

 

/etc/hosts 파일 수정

# vi /etc/hosts
127.0.0.1 localhost
127.0.1.1 master
192.168.0.201 registry.example.com


# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

 

 

 

 

사설 SSL 인증서 생성 및 설정

# openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................................+++++
..................................+++++
e is 65537 (0x010001)

 

 

사설 SSL 인증서 키 파일 설정

# openssl req -new -key server.key -out server.csr
Can't load /root/.rnd into RNG
139832043372992:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KO
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Company
Common Name (e.g. server FQDN or YOUR name) []:registry.example.com
Email Address []:jinsu@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  • Country Name : 국가 코드이며, 대문자 KO를 입력합니다.
  • State or Province Name : 주 또는 도입니다. 상황에 맞게 입력
  • Locality Name : 도시입니다. 상황에 맞게 입력
  • Organization Name : 회사이름 입력
  • Organizational Unit Name : 회사 조직 이름 입력
  • Common Name : Docker 레지스트리를 실행하는 서버의 도메인 주소 /etc/hosts 파일에 설정한대로 입력
  • Email Address : 이메일 주소 입력

 

 

 

서버 인증서 파일을 생성하고 시스템에 설치

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt   
Signature ok
subject=C = KO, ST = Some-State, L = Seoul, O = Company, OU = Company, CN = registry.example.com, emailAddress = jinsu@example.com
Getting Private key

# ls
total 68
-rw-r--r--  1 root root 1350 Oct 30 07:23 server.crt
-rw-r--r--  1 root root 1070 Oct 30 07:23 server.csr
-rw-------  1 root root 1675 Oct 30 07:05 server.key

# cp server.crt /usr/share/ca-certificates/
# echo "server.crt" | tee -a /etc/ca-certificates.conf
server.crt
# update-ca-certificates 
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

# service docker restart

 

 

 

 

이어서...

반응형
반응형

 

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

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

 

 

 

 

 

반응형
반응형

 

Error response from daemon 해결 방법

 

Ubuntu 서버에서 처음으로 Docker login을 하게되면 아래와 같은 에러가 발생하는 경우가 있다.

Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password

 

 

 

구글의 DNS 주소를 /etc/resolv.conf 에 추가해주세요.

# vi /etc/resolv.conf

nameserver 8.8.8.8
naveserver 8.8.4.4

 

 

설정이 완료되었다면, Docker 데몬을 restart 해주세요.

# systemctl daemon-reload
# systemctl restart docker

 

 

 

또한 login 계정에 @뒤에 이메일주소가 들어가있는지 확인해보세요.

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: djwlstn12345
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

만약 위 방법으로 안된다면 docker logout 후 다시 login 해보시길 바랍니다.

# docker logout

 

 

 

 

 

 

감사합니다.

 

 

반응형
반응형

 

 

Docker

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


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

 

 

 

 

 

Dockerfile을 생성하여 파일을 docker build 하려고 할 때 아래와 같은 에러가 발생합니다.

원인을 몰라 한참 찾아봤었는데 처음에는 뭐가 문제인지 잘몰랐었는데 Dockerfile을 만들어서

build 해줄 때 filename을 Dockerfile 이라고 만들어줘야 하는 거였다.

 

Dockerfile을 만들때에는 디렉토리를 새로만들고 해당 디렉토리로 들어가서 build 해줘야한다.

 

나는 바보인가보다 ㅠ

 

unable to prepare context: unable to evaluate symlinks in Dockerfile path:

 

 

$ sudo docker build -t kubers:1 .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/djwlstn123/k8s/Dockerfile: no such file or directory

EX)
$ sudo docker build -t kuard-amd64:1 .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM alpine

 

 

반응형
반응형

 

 

 

 

 

Docker

Ubuntu 환경에서 Docker 컨테이너간 통신 설정하기


 

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

 

 

 

 

 

 

Docker 컨테이너간 연결하기

nginx 컨테이너와 DB 컨테이너를 생성하여 컨테이너 연결하기

mongo db 이미지를 다운받아 컨테이너 동작시키기
$ sudo docker run --name db -d mongo
Unable to find image 'mongo:latest' locally
latest: Pulling from library/mongo
d5fd17ec1767: Pull complete 
a3d1e6b0e1ff: Pull complete 
015ccc3eeca8: Pull complete 
0129deec1aaf: Pull complete 
3b9522656704: Pull complete 
42557cfd554b: Pull complete 
99e708669a41: Pull complete 
0e35f8644443: Pull complete 
e25527cd13cc: Pull complete 
Digest: sha256:d8f48972427a3d62bbb7e953bd5afb609ab6e9b69f347c01c7cfda133cf15b9c
Status: Downloaded newer image for mongo:latest
0ebf237f91f049d751e476fe149af216da534ff8f217c1cd85e9c737816d599e
$

동작중인 컨테이너 확인
$ sudo docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                  PORTS                                       NAMES
0ebf237f91f0   mongo           "docker-entrypoint.s…"   19 minutes ago   Up 19 minutes           27017/tcp                                   db                                            jinsu-nginx
$
  • docker run 명령은 호스트서버에 이미지를 가지고 있지 않으면 자동으로 이미지를 받아옵니다.
  • docker run -d 옵션은 백그라운드에서 컨테이너 실행하는 명령입니다.

 

 

web서버 nginx 이미지를 다운받아 컨테이너 동작시키고 컨테이너간 연결 설정
$ sudo docker run --name web -d -p 80:80 --link db:db nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
42c077c10790: Pull complete 
62c70f376f6a: Pull complete 
915cc9bd79c2: Pull complete 
75a963e94de0: Pull complete 
7b1fab684d70: Pull complete 
db24d06d5af4: Pull complete 
Digest: sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514
Status: Downloaded newer image for nginx:latest
4bbda3ace123d448f92fa860433b75b5aad49fbadf78979859ba1eab5f654b6d
$

동작중인 컨테이너 확인
$ sudo docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
4bbda3ace123   nginx     "/docker-entrypoint.…"   4 minutes ago    Up 4 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp   web
0ebf237f91f0   mongo     "docker-entrypoint.s…"   21 minutes ago   Up 18 seconds   27017/tcp                           db
$
  • docker run --link 옵션은 컨테이너에서 다른 컨테이너로 접근할 떄 별명으로 접근하도록 설정하는 옵션입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

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 insecure-registry 구성 및 설정


 

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

 

 

 

 

 

 

 

Docker 개인 저장소 구축하기

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

개인 저장소 서버는 Docker registry 서버라고 부릅니다. Docker push, pull 명령으로 저장소 서버에 이미지를 올리고, 받을 수 있습니다.

이제 Docker 개인 저장소를 구축하겠습니다.

현재 동작중인 docker 데몬 상태
$ systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-06-05 03:41:17 UTC; 1h 58min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 969 (dockerd)
      Tasks: 9
     Memory: 111.4M
     CGroup: /system.slice/docker.service
             └─969 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

동작중인 Docker 데몬을 stop 시키기
$ sudo systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
$

동작중인 docker 데몬을 stop 시킨 상태
$ systemctl status docker   
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sun 2022-06-05 05:47:23 UTC; 3s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 4671 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited,>
   Main PID: 4671 (code=exited, status=0/SUCCESS)

 

 

docker insecure-registry 수정하기

Docker 데몬을 멈춘상태에서 /etc/init.d/docker 파일을 수정해주어야합니다.

'DOCKER_OPTS=' 부분 뒤에 내용을 추가해주세요,

$ cat /etc/init.d/docker
DOCKER_OPTS=--insecure-registry localhost:5000

수정이 완료된 상태에서 docker 데몬을 재시작해주세요.
$ sudo systemctl docker restart

동작중인 상태 확인
$ systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-06-05 05:53:21 UTC; 5s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 5170 (dockerd)
      Tasks: 10
     Memory: 32.5M
     CGroup: /system.slice/docker.service
             └─5170 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

 

 

Docker registry 이미지 설정

Docker Hub를 통해 Docker registry 이미지를 받습니다.

Docker registry 이미지 받기
$ sudo docker pull registry:latest
latest: Pulling from library/registry
Digest: sha256:bedef0f1d248508fe0a16d2cacea1d2e68e899b2220e2258f1b604e1f327d475
Status: Image is up to date for registry:latest
docker.io/library/registry:latest
$ 

Docker 이미지 확인
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
registry     latest    773dbf02e42e   9 days ago      24.1MB
$

docker registry 이미지를 컨테이너로 생성
$ sudo docker run -d -p 5000:5000 --name jinsu-registry \
> -v /tmp/registry:/tmp/registry \
> registry
8d4a67d87d99a9dd4aab1d0c513c58b21c560da939fa4960ee98fbc4a3692841
$ 

생성된 컨테이너 동작 상태 확인
$ sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS                  PORTS                                       NAMES
8d4a67d87d99   registry        "/entrypoint.sh /etc…"   2 minutes ago   Up 2 minutes            0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   jinsu-registry
$
  • docker run -p 옵션을 통해 5000:5000 포트로 호스트서버 5000 포트와 컨테이너 5000 포트를 연결해줍니다.
  • docker run -v 옵션을 통해 호스트서버 /tmp/registry 디렉토리와 컨테이너 /tmp/registry 디렉토리를 공유 시켜줍니다.

 

 

Docker 개인 저장소에 이미지 올리기

tag 명령을 통해 앞서 만든 이미지를 태그로 생성해주고

push 명령을 통해 개인 저장소로 올려줍니다.

Docker registry 컨테이너가 동작중인지 확인
$sudo docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED      STATUS                  PORTS     NAMES
61edbce54f41   nginxtest:0.1   "nginx"   2 days ago   Exited (0) 2 days ago             jinsu-nginx
$ 

현재 가지고 있는 이미지 확인
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginxtest    0.3       df69b2bb7f48   2 days ago      232MB
nginxtest    0.2       45fe3bfa31b6   2 days ago      232MB
nginxtest    0.1       740379f9b11b   2 days ago      232MB
registry     latest    773dbf02e42e   9 days ago      24.1MB
ubuntu       14.04     13b66b487594   14 months ago   197MB
$

Dodcker tag 생성하기
$ sudo docker tag [이미지 이름]:[TAG] [Docker registry URL]:[TAG]

EX)
$ sudo docker tag nginxtest:0.1 localhost:5000/nginx:0.1

Docker registry 서버로 업로드하기
$ sudo docker push [Docker registry URL]/[이미지 이름]:[TAG]

EX)
$ sudo docker push localhost:5000/nginxtest:0.1
The push refers to repository [localhost:5000/nginxtest]
c4adbf8d4df4: Pushed 
56104874600e: Pushed 
79b16ae8ffe2: Pushed 
958dcff7226f: Pushed 
83109fa660b2: Pushed 
30d3c4334a23: Pushed 
f2fa9f4cf8fd: Pushed 
0.1: digest: sha256:6d2ee764d8d6ce21b62c9cab92e28555c69b1a7028db7cf170b269ff97f901c1 size: 1782
$
  • 개인 저장소에 이미지를 업로드할때는 먼저 태그를 먼저 생성해야합니다.

 

 

Docker 개인 저장소에 있는 이미지 다운받기

pull 명령을 통해 개인 저장소에 있는 이미지를 다운로드 

이미지 다운받기 전 
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginxtest    0.3       df69b2bb7f48   2 days ago      232MB
nginxtest    0.2       45fe3bfa31b6   2 days ago      232MB
nginxtest    0.1       740379f9b11b   2 days ago      232MB
registry     latest    773dbf02e42e   9 days ago      24.1MB
ubuntu       14.04     13b66b487594   14 months ago   197MB
$ 

$sudo doker pull [Docker registry URL]/[이미지 이름]:[TAG]

EX)
$ 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
$

이미지 다운로드 후
$ sudo docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
nginxtest                      0.3       df69b2bb7f48   2 days ago      232MB
nginxtest                      0.2       45fe3bfa31b6   2 days ago      232MB
nginxtest                      0.1       740379f9b11b   2 days ago      232MB
192.168.0.210:5000/nginxtest   0.1       740379f9b11b   2 days ago      232MB
registry                       latest    773dbf02e42e   9 days ago      24.1MB
ubuntu                         14.04     13b66b487594   14 months ago   197MB
$

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

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"
...
..
.
내용이 길게 출력중

 

 

 

 

반응형

+ Recent posts