티스토리 뷰

반응형

docker 를 사용하다보면 내가 필요한 이미지를 만들어야 하는 경우가 생기고, 이 컨테이너 이미지를 업로드해서 사용해야할 상황이 발생된다. 여기서는 간단히 빌드를 하고, 이걸 private docker registry 에 업로드 하는 간단한 흐름을 정리해보겠다. (인터넷에서는 너무 조각내용으로 있어서 큰그림을 이해하기 어려운듯 하여 정리)

 

1. Dockerfile 

우리가 개발할때 maven 은 pom.xml 에 빌드가 정의되고, gradle은 build.gradle 에 정의 되는것처럼 docker 컨테이너 이미지를 빌드할때 구성하는 파일은 Dockerfile 이라는 이름으로 구성을 한다.

 

아래내용은 로컬에 있는 readme.txt 파일을 컨테이너안에 복사하고, wget 모듈을 설치하는 간단한 샘플이다.

이것을 빌드하고, private docker registry 에 push 해보자.

FROM centos:7
MAINTAINER gildong <gildong@korea.com>
 
# 실행유저
USER root
 
# 환경변수
ENV DOWNLOAD_DIR=/download
 
# 기본환경을 구성하기위한 명령어
RUN mkdir -p ${DOWNLOAD_DIR}
RUN yum install -y wget
 
# 로컬경로에 있는 파일을 이미지에 복사
COPY ./readme.txt /download
 
# 구성이 완료된후 실행될 명령어
CMD ["cat", "/download/readme.txt"]

2. Dockerfile 빌드/확인

Dockerfile 을 빌드하기 위해서는 다음과 같은 명령어로 빌드가 가능하다.

docker build -t <이미지명:버전> <Dockerfile경로>

 

아래 예시에서는 이미지를 빌드하고, 확인하는 간단한 흐름을 명령어 흐름으로 정리했다.

# -----------------------------
# 1. 이미지 없음 확인
# -----------------------------
$ docker images
REPOSITORY                                     TAG       IMAGE ID       CREATED          SIZE

# -----------------------------
# 2. 빌드전 파일 확인 
# -----------------------------
$ ls -l
total 2
-rw-r--r-- 1 gildong gildong 392 Aug 22 16:00 Dockerfile
-rw-r--r-- 1 gildong gildong  55 Aug 22 16:00 readme.txt

$ cat readme.txt
wget 실행이 가능한 centos 이미지 입니다.


# -----------------------------
# 3.  이미지 빌드하기
# -----------------------------
$ docker build -t sample:0.1 ./
...생략...
Successfully built 93a6cbca5799
Successfully tagged sample:0.1
 
# -----------------------------
# 4. 빌드된 이미지 확인하기
# ----------------------------- 
$ docker images
REPOSITORY                                     TAG       IMAGE ID       CREATED          SIZE
sample                                         0.1       93a6cbca5799   11 seconds ago   386MB
 
# -----------------------------
# 5. 이미지 실행 테스트
# -----------------------------
$ docker run sample:0.1
wget 실행이 가능한 centos 이미지 입니다.
 
]$  docker run -it sample:0.1 /bin/bash
[root@ab20f2a3fd15 /]# echo $DOWNLOAD_DIR
/download

3. 이미지 push 하기 (upload)

사실 빌드한 이미지는 localhost 에서만 사용이 가능한 상태이다. 딴 서버에서 remote 형태로 이미지를 다운로드 받으려면 private docker registry 를 구성하고 해당 서버에 이미지를 push 해야, 딴 서버에서 사용이 가능하다.

(설치 방법이 궁금하면 하단에 같이보면 좋은글로 링크를 정리할테니 참고하자)

 

즉, local 에 있는 이미지를 private docker registry 에 올려줘야, 딴 서버에서도 사용이 가능하다는 말이다. 

아래 예시는 이미지를 빌드하고, 10.1.1.1:5000 의 private docker registry 에  push 하는 전체 흐름을 정리한 내용이다.

 

#---------------------------------
# 1. 이미지 확인 (로컬이미지만 존재)
#---------------------------------
[user@10.1.1.4 ~]$ docker images
REPOSITORY                                     TAG       IMAGE ID       CREATED         SIZE
sample                                         0.1       93a6cbca5799   5 minutes ago   386MB

#---------------------------------
# 2. 이미지 태그 및 확인
# docker-registry : 10.1.1.1:5000 
# ---------------------------------
[user@1.1.1.4 ~]$ docker tag sample:0.1 10.1.1.1:5000/sample:0.1

$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
10.1.1.1:5000/sample     0.1       93a6cbca5799   5 minutes ago   386MB <-- 추가됨
sample                   0.1       93a6cbca5799   5 minutes ago   386MB
 
#---------------------------------
# 3. 이미지 업로드
# docker-registry : 10.1.1.1:5000 
#---------------------------------
[user@1.1.1.4 ~]$ docker push 10.1.1.1:5000/sample:0.1
The push refers to repository [10.1.1.1:5000/sample]
cd970aadec46: Pushed
ea789956fde2: Pushed
47ad33fa3e22: Pushed
174f56854903: Pushed
0.1: digest: sha256:20a3403533bdbd91c34248298f8e360926473a2f518a7c443d6fe22a2f20708e size: 1154

4. 이미지 pull (download) 하기

private-docker-registry 를 세팅한 10.1.1.4 나 10.1.1.1 서버가 아닌 딴 서버에서도 이제 이미지를 땡겨올수 있다.

아래는 새로운 딴 서버에서 이미지를 가져와 실행하는 흐름을 정리했다. (=즉, 아까 push 했던 서버랑 다른곳)

[user@10.1.1.8 ~]$ docker images
REPOSITORY                                     TAG       IMAGE ID       CREATED         SIZE
 
[user@10.1.1.8 ~]$ docker pull 10.1.1.1:5000/sample:0.1
0.1: Pulling from sample
2d473b07cdd5: Already exists
01d59ade300d: Pull complete
35fb45185fde: Pull complete
818d362c995a: Pull complete
Digest: sha256:20a3403533bdbd91c34248298f8e360926473a2f518a7c443d6fe22a2f20708e
Status: Downloaded newer image for 10.1.1.1:5000/sample:0.1
10.1.1.1:5000/sample:0.1
 
[user@10.1.1.8 ~]$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED          SIZE
10.1.1.1:5000/sample     0.1       93a6cbca5799   10 minutes ago   386MB
 
[user@10.1.1.8 ~]$ docker run 10.1.1.1:5000/sample:0.1
wget 실행이 가능한 centos 이미지 입니다.

위와 같이 딴 서버에서도 업로드된 도커 컨테이너 이미지를 가져와서 실행이 가능하다.

 

같이보면 좋은글

2022.09.26 - [docker & kube] - 초간단 Private Docker Registry 설치하기

2022.09.22 - [docker & kube] - [Docker] RUN, ENTRYPOINT, CMD 차이 이해하기

2022.09.05 - [docker & kube] - [docker] no space left on device 이유와 해결

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함