티스토리 뷰
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 이유와 해결
'docker & k8s > docker' 카테고리의 다른 글
[Docker] 윈도우용 도커 오류 : This error may indicate that the docker daemon is not running (0) | 2022.09.29 |
---|---|
[Docker] 도커를 처음쓰면 알아야할 5가지 명령어 - 이미지 실행/확인/삭제 (0) | 2022.09.28 |
[Docker] server gave HTTP response to HTTPS client 오류 (0) | 2022.09.27 |
초간단 Private Docker Registry 설치하기 (0) | 2022.09.23 |
[Docker] toomanyrequests: Too Many Requests. 해결방법 (0) | 2022.09.22 |