오늘은 도커 이미지를 생성하고 도커 허브에 배포하는 과정까지를 작성해보겠습니다.
그 전에, 이전에 작성된 도커에 관한 글을 읽고 오시면, 조금 더 도움이 되실 수 있습니다.
2023.08.24 - [기타] - [도커/Docker] Docker, Docker compose란?
우선, 이미지를 만들 서비스가 필요합니다. 저희는 도커 이미지를 빌드하고 배포하는 것이 목적이므로 매우 간단하게 파이썬으로 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/
이 링크는, 도커의 이미지를 다운받아서 실행시켜보는 것을 목적으로 하는 홈페이지입니다. 리눅스 4시간짜리 무료 인스턴스를 주기에, 이미지를 받아보고 시도해볼 수 있습니다. 저는 여기서 제가 방금 올린 도커 이미지를 당겨와서 실행시켜 보겠습니다.
그렇다면 아래와 같은 두 개의 코드를 각각 실행하면서, 제가 만든 도커 이미지가 잘 돌아가는지 확인해보겠습니다.
원래는 이미지를 원격 저장소에서 pull로 가져오고, build를 통해 빌드하고 run해야합니다. 하지만 우리는 docker run을 통해서 이 모든 동작을 한번에 할 수 있습니다. 따라서 아래의 코드를 입력해주면, 무료 인스턴스에서 이미지를 다운받아와서 빌드하고 run하게 됩니다.
docker run {username}/hello_world_python
이렇게 리눅스 환경에서까지 돌아가는 것을 확인했습니다.
이상으로, 도커 이미지를 만들어보고 배포하는 과정까지를 다뤄봤습니다. 감사합니다.
'Python' 카테고리의 다른 글
[파이썬/Python] 네이버 검색 API를 이용해 관련 이미지 불러오기 (0) | 2023.08.16 |
---|---|
[Python/파이썬] 목소리와 음악을 구분하자 - 2편(with Resnet) (0) | 2023.08.01 |
[Python/파이썬] 목소리와 음악을 구분하자 - 1편(with Spleeter) (0) | 2023.07.25 |
[Python/파이썬] 스펙트로그램으로 노래의 구간을 찾아보자 (0) | 2023.07.20 |
[파이썬/Python] 유튜브 API를 사용하여 원하는 검색 결과 불러오기 (0) | 2023.07.02 |