본문 바로가기

Container/생활코딩 Docker

[Docker] 내가 만든 Container를 image로 만들자!(commit, build, Dockerfile 활용하기)

반응형

🔊 해당 포스팅은 이고잉님의 생활코딩 오픈튜토리얼의 Docker 입문 수업을 듣고 제 개인적으로 정리하는 목적하에 작성되는 포스팅입니다. 보다 자세한 강의는 여기를 참고해주세요.

 

이번 포스팅에서는 Docker를 활용해 내가 만든 컨테이너를 이미지로 만드는 방법인 commit 활용방법에 대해 알아보려고 한다.

 

Docker


Docker 관련 명령어의 관계를 도식화 하게되면 다음과 같다.

 

출처: 생활코딩 강의

 

우리는 보통 Docker Hub에서 누군가가 만들어 놓은 이미지를 pull 해서 그 이미지에서 컨테이너를 내 맘대로 생성해 사용한다. 그렇다면 우리도 우리만의 이미지를 만들 수 있지 않을까? 예를 들어, 우리가 ubuntu 라는 리눅스 이미지를 pull 해서 컨테이너를 생성 후 생성한 컨테이너 안에 Python이나 git을 설치했다. 그리고 누군가에겐 Python 과 git이 설치된 ubuntu 리눅스 이미지가 필요할 것이다. 그것을 pull 받은 사용자는 따로 Python, git을 설치하지 않아도 이미지를 pull 받은 것에 Python, git이 이미 존재하게 된다. 

 

즉, 이것이 더 나아가게 되면, 내가 만든 컨테이너에 머신러닝, 앱 개발, 웹 개발 등 어떠한 개발 프로덕트가 들어가 있고 이를 다른사람들이 활용할 수 있도록 배포하고자 할 때, 이 컨테이너를 이미지로 만들 수 있다. 바로 commit을 사용해서 말이다.

 

해당 예시에서는 쉽게 하고자 ubuntu 라는 이미 존재하는 이미지의 컨테이너에 git을 설치한 후 ubuntu 와 git이 함께 내장으로 존재하는 이미지로 만들어보는 실습으로 해보자.

 

우선 Docker를 활용해 ubuntu 이미지를 pull 하고 git을 설치하기 위해 컨테이너를 만들어보자. 다음 명령어는 ubuntu 컨테이너를 만들고 해당 컨테이너로 바로 bash 프로그램을 한 번에 실행하는 명령어이다.

 

docker run -it --name [생성할 컨테이너 이름] [pull한 이미지] bash

 

위 명령어를 적용하면 다음과 같다.

 

docker pull ubuntu

docker run -it --name ubuntu-git ubuntu bash

 

 

위 화면을 보면 ubuntu-git 이라는 새로운 컨테이너를 생성하고 bash 프로그램으로 컨테이너에 들어가 있는 것을 볼 수 있다. 그리고 여기서 apt를 업데이트해주고 git을 설치해보자. 명령어는 다음과 같다.

 

apt-get update && apt-get install -y git

 

이제 git이 설치된 ubuntu 컨테이너를 만들었다. 이 컨테이너를 우리만의 이미지로 만들기 위해서 다음과 같은 commit 명령어를 입력한다.

 

docker commit [내가만든 container이름] [new repository]:[new image]

 

 

위 명령어를 따라 친 결과 위 터미널 화면을 보면 yh_repo 라는 새로운 레포지토리에 yh_ubuntu-git 이라는 새로운 이미지가 생성되었다. 그렇다면 우리가 만든 컨테이너 즉, ubuntu 이미지에 git을 설치해놓았던 컨테이너니까 yh_ubuntu-git 이미지에서 컨테이너를 생성하면 git 설치 명령어를 입력하지 않아도 git이 내장되어 설치가 되어 있을까? 한번 yh_ubuntu-git 이미지에 컨테이너를 생성해서 bash 프로그램을 실행시켜보자. 이 때도 위에서 사용했던 컨테이너 생성과 bash 프로그램을 한 번에 수행하는 명령어를 활용하자.

 

docker run -it --name my_ubuntu-git yh_repo:yh_ubuntu-git bash

 

 

git이 처음부터 이미 설치되어 있는 것을 볼 수 있다! 위와 같이 내가 만든 컨테이너를 commit 명령어를 활용해 이미지로 만들 수 있다. 하지만 단점이 있다. 위와 같이 명령어로만 작성하면 남이 보았을 때 내가 만든 컨테이너에 어떤 프로그램이 설치되어 있는지 가시적으로 확인하기가 어려운 것이다. 따라서 이를 해결하기 위해 Dockerfile 과 build 명령어가 등장한다.

 

먼저 Dockerfile 은 확장자에 .py, .html 을 입력하면 해당 확장자 파일로 자동으로 변환되듯이 Dockerfile 을 파일이름으로 해주게 되면 내가 직접 만든 이미지가 어떤 원래의 이미지를 다운로드 받아서 어떤 명령어를 실행했는지 기록할 수 있다. 다음 화면을 보자.

 

 

위처럼 Dockerfile을 파일이름으로 하면 Docker의 상징인 고래 아이콘이 자동으로 생긴다. 그리고 파일 내용을 작성해준다. 파일 내용을 해석하자면 다음과 같다

 

FROM ubuntu  # ubuntu 이미지를 pull 했고
RUN apt-get update && apt-get install -y git  # 다음의 명령어를 실행했다

 

위와 같이 파일 내용을 작성한 후, 터미널에서 다음과 같은 build 명령어를 입력해준다. 명령어 설명은 다음과 같다.

 

docker build -t [new repository]:[new image] [Dockerfile 있는 디렉토리 경로]

 

이번엔 새로운 이미지니까 레포지토리와 이미지 이름을 이전(yh_repo, yh_ubuntu-git) 과는 다르게 끝에 2를 붙여서 해보고 터미널에서 현재 생성된 도커 이미지 리스트를 확인해보자.

 

build 명령어를 사용

 

새로운 이미지가 생겨났다!

 

도커 이미지 목록을 보면 위에서 build 명령어로 만든 yh_repo2 라는 새로운 레포지토리에 yh_ubuntu-git2 라는 새로운 이미지가 생겨났다.(물론 기존에 만들었던 yh_repo 레포지토리에다가도 이미지를 만들 수 있다!)

 

이렇게 build 와 Dockerfile로 이미지를 만들게 되면 다른 사람이 보았을 때 내가 만든 새로운 이미지에 어떤 프로그램이 깔려있는지 Dockerfile 파일 내용을 보고 파악하기가 쉽다.


끝으로, 인카토스라는 회사에서 감사하게도 제게 협찬을 해주신 제품을 하나 소개하려고 합니다. 그것은 바로 아래 사진의 Docker 컨테이너 각티슈 케이스입니다!

 

인카토스에서 협찬해주신 Docker 컨테이너 각티슈 휴지 케이스

 

개발 공부를 하다 보면 원인불명의 에러 때문에 땀을 흘리거나 눈물(?)을 흘리기도 하는데요! 겨울철엔  감기라도 걸리면 모니터 앞에서 콧물을 흘리기도, 한여름엔 개발을 너무 열심히 한 나머지 땀을 흘리기도 합니다.

 

하지만 이 제품을 곁에 두고 개발을 하게 되면 귀여운 Docker 컨테이너가 제공하는 티슈 한 장을 편하게 뽑아 쓰면서 개발 텐션을 끊지 않고 이어갈 수 있답니다~!  특히, 마치 개발 관련 장비를 하나 늘린 것처럼 마음이 한켠 든든해지는 기분입니다! 해당 제품에 관심이 있으시다면 아래 링크로 들어가시면 됩니다. 다시 한 번 좋은 제품을 협찬해주신 인카토스에 감사인사 드립니다! :)

 

💡 판매처 인카토스 : https://incatos.shop/

반응형