반응형

#docker 명령어 모음

https://www.daleseo.com/dockerfile/     // 다커 명령어 모음

# docker pull // docker-hub로부터 컨테이너 생성을 위한 이미지 가져오기

[ec2-user@ip-xxxx nodejs]$ docker pull python:3.9-slim

3.9-slim: Pulling from library/python

214ca5fb9032: Pull complete 

fa7d81b69b9a: Pull complete 

96a5a0a62ab5: Pull complete 

7d3628511179: Pull complete 

ea3879bc1c47: Pull complete 

Digest: sha256:364ada4cb4f943b603d330cbb3d26f689c8b54de51cb12bad1202de7dba31814

Status: Downloaded newer image for python:3.9-slim

docker.io/library/python:3.9-slim

// docker pull을 하면 하나의 파일이 다운되지 않고 여러 파일이 다운로드 된다.

docker는 레이어(layer)라는 것으로 이미지가 여러 개의 레이어가 되어있는데, 이게 다운로드 되는 것이다.

받아진 이미지를 분석해보고 싶다면 "docker inspect python:3.9-slim" 를 입력하면 이미지 구성을 볼 수 있다.

 

 

[ec2-user@ip-xxxx nodejs]$ docker images

REPOSITORY   TAG        IMAGE ID       CREATED      SIZE

python       3.9-slim   29cc46b21611   5 days ago   125MB

 

[ec2-user@ip-xxxx nodejs]$ docker run -it --name=jane_python python:3.9-slim /bin/bash

root@c0b5a0c315fb:/# ls

bin  boot  dev etc  home  lib lib64  media  mnt  opt proc  root  run  sbin  srv  sys  tmp  usr  var

 

#docker_image삭제  // 삭제가 안될 때가 있음. 그럴 땐 container 확인

[ec2-user@ip-xxxx nodejs]$ docker rmi $(docker images -q). 

Error response from daemon: conflict: unable to delete 29cc46b21611 (must be forced) - image is being used by stopped container 7fabb7cdfd7a

 

#docker_container_조회

[ec2-user@ip-xxxx nodejs]$ docker container ls -a

CONTAINER ID   IMAGE             COMMAND     CREATED         STATUS                     PORTS     NAMES

7fabb7cdfd7a   python:3.9-slim   "python3"   4 minutes ago   Exited (0) 4 minutes ago             jane-test

 

#docker_container_삭제

[ec2-user@ip-xxxx nodejs]$ docker container rm 7fabb7cdfd7a 

7fabb7cdfd7a

 

[ec2-user@ip-xxxx nodejs]$ docker rmi 29cc46b21611

Untagged: python:3.9-slim

Untagged: python@sha256:364ada4cb4f943b603d330cbb3d26f689c8b54de51cb12bad1202de7dba31814

Deleted: sha256:29cc46b21611795a55a23f40290d9af983162d3d0a2cf4a11ab109a6c3183e06

 

#Dockerfile

[ec2-user@ip-xxxx nodejs]$ cat Dockerfile

FROM python:3.9-slim

WORKDIR /usr/src/app     // python 안에 있는 directory 

COPY . .

CMD ["test.py"]

 

[ec2-user@ip-xxxx nodejs]$ docker images

REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

 

 

#docker_build

[ec2-user@ip-xxxx nodejs]$ docker build --tag jane-test .

Sending build context to Docker daemon  3.072kB

Step 1/4 : FROM python:3.9-slim

3.9-slim: Pulling from library/python

[root@ip-192-168-23-47 jane-test]# 

[ec2-user@ip-xxxx nodejs]$ docker images

REPOSITORY    TAG        IMAGE ID       CREATED         SIZE

jane-test   latest     7639b54570bf   2 seconds ago   125MB

python        3.9-slim   29cc46b21611   5 days ago      125MB

 

#docker_run

[ec2-user@ip-xxxx nodejs]$ docker run -it --name jane-test jane-test:latest

Hello World!

 

#docker_mount // Bind mounts를 이용해 호스트 파일 or 디렉토리를 컨테이너에 붙여 사용하기

[ec2-user@ip-xxxx nodejs]$ docker run -itd --name jane-test --mount type=bind,source="$(pwd)"/mount,target=/app ubuntu:18.04

Status: Downloaded newer image for ubuntu:18.04

d5c20934eb0f6a72286c24c5a092876bdd5064b84e5434031e29dc68a6657460

 

[ec2-user@ip-xxxx nodejs]$ docker ps

CONTAINER ID   IMAGE          COMMAND   CREATED         STATUS         PORTS     NAMES

d5c20934eb0f   ubuntu:18.04   "bash"    7 seconds ago   Up 6 seconds             jane-test

 

 

# 내부 디렉토리에 있는 게 컨테이너(위에서 target으로 삼은 경로)에도 동일하게 보임

[ec2-user@ip-xxxx nodejs]$ pwd

/home/ec2-user/jane-test/nodejs/mount

 

[ec2-user@ip-xxxx nodejs]$ ls

test.txt

 

[ec2-user@ip-xxxx nodejs]$ sudo docker exec -it jane-test ls /app

test.txt

 

 

Note) python 버전별 차이 (3.9-slim, buster …)

https://medium.com/swlh/alpine-slim-stretch-buster-jessie-bullseye-bookworm-what-are-the-differences-in-docker-62171ed4531d

 

반응형
반응형

업무 중에 Prometheus 구동을 위한 이미지가 삭제되어 다시 불러오는 과정이 있었다.

정리해두면 유용할 것 같아 아래와 같이 정리했다 :)

 

 

1. 이미지 불러오기: docker pull (from harbor)
# docker pull harbor.jane.net/dependency/quay.io/prometheus/prometheus:v2.22.1


2. 이미지 저장(다운받은 image를 tar파일로 추출): docker save 
# docker save -o [파일명].tar [image id] // image id는 docker image list로 조회 (ex. 7cc97b58fb0e)

controller-0:~# docker image list | grep v2.22.1
harbor.jane.net/dependency/quay.io/prometheus/prometheus                                         v2.22.1                7cc97b58fb0e        17 months ago       168MB


3. 이미지 넣기: docker load 
# docker load -i [파일명.tar]


4. 넣은 image를 내부 registry로 변경(기존 prometheus의 cr에 image주소가 내부 registry라서 진행): docker tag 
# docker tag harbor.jane.net/dependency/quay.io/prometheus/prometheus:v2.22.1 registry.infra.jane.cluster.local:19092/quay.io/prometheus/prometheus:v2.22.1


5. tag가 변경된 image를 서버로 넣기: docker push 
# docker push registry.infra.jane.cluster.local:19092/quay.io/prometheus/prometheus:v2.28.1
The push refers to repository [registry.infra.jane.cluster.local:19092/dependency/kube-state-metrics/kube-state-metrics]
a7b3323785fe: Pushed
07363fa84210: Pushed
v2.2.0: digest: sha256:8008b06ed82e8517add62ae9a7893518244890de6efa6517adf45a6dd54eae2d size: 739


6. curl로 push 여부 확인
controller-0:~# curl -u jane:jane_pwd  https://registry.infra.jane.cluster.local:19092/v2/dependency/kube-state-metrics/kube-state-metrics/tags/list  -k
{"name":"dependency/kube-state-metrics/kube-state-metrics","tags":["v2.2.0"]}

반응형

+ Recent posts