본문 바로가기

Docker

[Docker] 이미지를 만들어보자

우리 팀의 개발 환경에 맞는 도커 이미지를 만들어보자 !

 

아무래도 마지막 팀프로젝트도 React와 Flask를 사용하게 될 것 같은데

그러면 React 컨테이너와 Flask 컨테이너가 필요할 것 같다.

 

프론트엔드 팀에서 React 컨테이너를 만들고,

백엔드 팀에서 Flask 컨테이너를 만들어서

둘 다 띄워놓고 개발하면 되지 않을까라는 생각을 했다.

 

그러기 위해서는 프론트엔드 팀에서 React 이미지를 만들어야하고

백엔드 팀에서는 Flask 이미지를 만들어야한다.

 

만드는 방법을 알아보자 !

 

방법에는 두 가지가 있다.

 

첫번째 방법, 직접 CLI 에 입력해서 편집하고 커밋하기.

간단하게 우분투 이미지에 파이썬을 설치하는 예시를 들어보자.

docker run --name web-server -it ubuntu:20.04 를 입력한다.

여기서 핵심은 -it 이다.

컨테이너 내부에 접속해서 CLI로 명령을 내리려면 -it를 붙여야한다.

 

그리고 파이썬 설치와 간단한 파이썬 웹 서버 실행을 위해 아래 명령어를 차례대로 입력한다.

$ apt update
$ apt install python3
$ mkdir -p /var/www/html
$ cd /var/www/html
$ echo "Hello <strong> Docker </strong>" > index.html
$ python3 -m http.server

여기까지 하고 exit 해서 컨테이너 밖으로 나온다.

그리고 docker commit web-server web-server-commit

를 입력해주면

web-server 컨테이너가 web-server-commit 이라는 이름의 이미지로 만들어진다.

 

두번째 방법, Dockerfile 사용하기

Dockerfile를 작성해서 빌드하는 방법이다.

위와 같은 예시를 들어보자.

 

도커 컨테이너가 실행될 위치에 Dockerfile 이라는 파일을 생성한다.

그리고 아래 코드를 작성한다.

FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
RUN "Hello <strong> Docker </strong>" > index.html
CMD ["python3", "-u", "-m", "http.server"]

 

-- 만약 도커 호스트(로컬)에 index.html 이라는 파일이 존재한다면 코드가 이렇게 바뀔 수 있다.--

FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
COPY ["index.html", "."]
CMD ["python3", "-u", "-m", "http.server"]

 

그리고 다음 명령어를 입력한다.

docker build -t web-server-build

이렇게 하면 web-server 컨테이너가 web-server-build 라는 이름의 이미지로 만들어진다.

 

첫번째 방법과 두번째 방법의 결과물은 똑같다.

다만 커밋 방식은 '현재 작업중인 컨테이너를 백업한다' 라는 느낌이고,

Dockerfile 방식은 '빌드를 사용해 이미지를 생상한다' 라는 느낌이다.

상황에 따라서, 취향에 따라서 선호하는 방법을 사용하면 된다.

 

이제 

docker run -p 8888:8000  web-server-commit; 혹은

docker run -p 8888:8000  web-server-build;

을 입력하면 우분투에 파이썬이 설치되어있고, Hello Docker 라는 문구를 띄우는 파이썬 웹 서버가 실행되는 컨테이너를 띄울 수 있다.

 

이렇게 해서 이미지를 만들어봤다.

 

만든 이미지를 모두가 사용할 수 있도록 Docker Hub 에 올려보는 것 까지 해보자.

Docker Hub 계정을 하나 만들고 Respository를 하나 생성한다.

 

Docker Hub 에 업로드 하려면 이미지 이름은 다음과 같은 규칙을 따라야한다.

USERNAME/REPOSITORY_NAME:TAG

유저네임과 레포지토리 이름이 일치해야하며 태그명 또한 반드시 명시해주어야 한다.

이전에 만들어둔 이미지로 이름을 바꿔서 새로운 이미지를 하나 커밋 해보자.

 

docker commit web-server-commit jhj967878/my-docker-repo:1.0

 

내 계정 jhj967878의 my-docker-repo라는 레포지토리에 1.0 버전이라는 태그를 붙여서 업로드 할 것이다.

그럼 jhj967878/my-docker-repo:1.0 라는 이름의 이미지가 생겼다.

Docker Hub 에 푸쉬하는 것은 쉽다.

docker push jhj967878/my-docker-repo:1.0

 

이러면 Docker Hub 에 내 이미지가 올라갔다.

이제는 다른 사람도 내가 만든 이미지를 다운받아서 실행할 수 있다.

docker pull jhj967878/my-docker-repo:1.0 을 해주면 된다.

 

이미지를 만들고 배포, 공유하는 방법도 배웠으니

이제는 이 방법으로 팀원들과 어떻게 하면 협업이 가능한지 고민을 좀 해보자...

 

'Docker' 카테고리의 다른 글

[Docker] 깃 패키지로 컨테이너 관리하기  (0) 2021.10.31
[Docker] 도커를 써보자  (0) 2021.10.20