Python

[파이썬/Python] 도커 이미지를 생성하고 배포해보자

F12:) 2023. 8. 24. 23:45

오늘은 도커 이미지를 생성하고 도커 허브에 배포하는 과정까지를 작성해보겠습니다.

 

그 전에, 이전에 작성된 도커에 관한 글을 읽고 오시면, 조금 더 도움이 되실 수 있습니다.

2023.08.24 - [기타] - [도커/Docker] Docker, Docker compose란?

 

[도커/Docker] Docker, Docker compose란?

오늘은 Docker와 Docker compose에 대한 간단한 개념에 대해서 작성해보도록 하겠습니다. 1. 도커란? 우리는 종종 개발할 때, 나는 되지만, 상대방은 안 되는 경우를 종종 볼 수 있습니다. 이는 개발환

studyblog4244.tistory.com


우선, 이미지를 만들 서비스가 필요합니다. 저희는 도커 이미지를 빌드하고 배포하는 것이 목적이므로 매우 간단하게 파이썬으로 hello world를 출력하는 서비스를 만들어봅시다.

 

각자 배포할 폴더를 준비합니다. 이제 이 작업폴더 내에서 Dockerfile을 작성할 것입니다. 

단순한 프로젝트 구조이고, 우리는 이 서비스를 python main.py 명령어를 통해서 실행할 수 있습니다. 이제 본격적으로 Dockerfile을 작성해보죠.

Dockerfile에는 몇가지 키워드가 있습니다. 이 중에서 저는 간단한 서비스이기에 이정도만을 사용하였지만, ARG, ENV, USER, EXPOSE, RUN과 같은 키워드가 더 있습니다.

 

아래에 간단하게만 정리하고 넘어가겠습니다.

 

ARG : Docker Image를 만들 때 사용되는 변수 지정. 최종 이미지에는 포함되지 않음.

ENV : 컨테이너가 실행될 때, 사용되는 호나경변수. 최종 이미지에 포함됨.

USER : 컨테이너를 실행할 때 사용할 유저 ID.

EXPOSE : 서비스 사용 포트 번호.

RUN : 빌드 시, 실행되어야하는 명령들이 지정됨. ex) RUN apt-get update && apt-get install -y curl

 

 

 

 

자 이제, 이미지를 빌드해보도록 하겠습니다. 여기서는 각자의 컴퓨터 아키텍쳐에 따라 조금 다릅니다. 또한 

 

Apple M1 / M2 chip

docker build --platform linux/amd64 -t hello_world_python .

Else

docker build -t helloWorld_python .

 

애플 실리콘 CPU에서 이미지를 빌드하게 되면 arm 기반 이미지가 만들어집니다. 따라서, 리눅스에서는 해당 이미지를 실행할 수 없습니다. 따라서 arm 기반에서는 플랫폼을 amd로 지정해두어, 리눅스 기반에서도 이미지가 구동되게 해줘야합니다.

 

코드를 추가적으로 설명하면 -t는 태그를 지정하는 것입니다. 우리 이미지에는 태그가 존재하는데, 해당 태그를 통해서 push, pull 과정에서 조금 더 간편해집니다.

 

 

 

이제 이미지를 배포하면 되겠지만, 우선 제 도커 이미지가 잘 작동하는지 확인해봐야겠죠?? 아래 명령어를 통해 확인해봅시다.

docker run helloWorld_python

잘 작동하는 것을 볼 수 있습니다.

 

 

이제, 도커파일이 정상적으로 작성된 것을 확인하였으니, 도커 허브에 배포하도록 합시다. 우선 도커 허브를 회원가입하고, 설치해줍니다. 이 때, username과 password를 기억해둡시다.

 

docker tag hello_world_python:lastest {username}/hello_world_python

username에 본인의 도커 허브 username을 넣고 이렇게 이미지의 태그를 작성해줍니다.

 

이후에는 도커 허브와 로컬을 연결해줍니다.

docker login --username={username}

이 명령어가 끝나면 비밀번호를 입력해야합니다. 비밀번호를 입력하여 도커 허브와 연결해줍시다.

 

 

이제 연결이 끝났습니다. 저희가 저장한 이미지를 그대로 제 계정 도커 허브에 올려보겠습니다.

docker push {username}/hello_world_python

 

이제 도커 허브에서 확인해봅시다.

정말 잘 배포된 것 같네요!!

 

 

하지만 아직 끝나지 않았습니다. 우리는 이 이미지가 어느 환경에서나 다 가능한지를 확인해보지 않았습니다. 제가 지금 M2를 쓰고있기 때문에, 이 이미지가 리눅스에서도 돌아갈까? 라는 의문이 있을 수 있겠죠.

 

저희는 그런 의문을 아래의 링크에서 해결할 수 있습니다.

https://labs.play-with-docker.com/

 

Play with Docker

Play with Docker A simple, interactive and fun playground to learn Docker Login

labs.play-with-docker.com

 

 

이 링크는, 도커의 이미지를 다운받아서 실행시켜보는 것을 목적으로 하는 홈페이지입니다. 리눅스 4시간짜리 무료 인스턴스를 주기에, 이미지를 받아보고 시도해볼 수 있습니다. 저는 여기서 제가 방금 올린 도커 이미지를 당겨와서 실행시켜 보겠습니다.

 

그렇다면 아래와 같은 두 개의 코드를 각각 실행하면서, 제가 만든 도커 이미지가 잘 돌아가는지 확인해보겠습니다.

 

원래는 이미지를 원격 저장소에서 pull로 가져오고, build를 통해 빌드하고 run해야합니다. 하지만 우리는 docker run을 통해서 이 모든 동작을 한번에 할 수 있습니다. 따라서 아래의 코드를 입력해주면, 무료 인스턴스에서 이미지를 다운받아와서 빌드하고 run하게 됩니다.

docker run {username}/hello_world_python

 

 

 

이렇게 리눅스 환경에서까지 돌아가는 것을 확인했습니다.


 

이상으로, 도커 이미지를 만들어보고 배포하는 과정까지를 다뤄봤습니다. 감사합니다.