[DOCKER]이미지 만들기(commit, build)

박민하·2022년 7월 20일
0

Deploy

목록 보기
7/15

Dockerfile reference - build

✅ 웹서버 이미지 생성 방법

  이미지를 만드는 방법은 두 가지가 있다. commit은 이미 사용하고 있는 컨테이너를 이미지로 백업을 하는 느낌이고, build는 도커 파일을 통해 만들고 싶은 이미지를 생성하는 식이다.

✅ commit

  수정한 컨테이너에 commit을 하면, 그 컨테이너가 새로운 이미지가 된다. 그 이미지를 run 하면 컨테이너가 만들어진다. 그렇게 만든 이미지를 push하면 다른 개발자들도 pull 받을 수 있게 되고, docker hub와 같은 레지스트리에 업로드를 하면 전 세계 사람들이 pull 받을 수 있다.

1. 컨테이너 생성

  ubuntu 이미지를 바탕으로 하는 web-server라는 이름의 컨테이너를 생성한다. 이미지 태그는 버전 확인을 위해 20.04로 붙였다. -it 옵션은 실행되자마자 터미널이 켜지도록 한다.

docker pull ubuntu:20.04
docker run --name web-server -it ubuntu:20.04

2. 이미지 생성

  commit 명령어를 쓸 때에는 컨테이너를 지정한 후에 이미지를 지정하면 된다. web-server 컨테이너를 commit 하여 web-server-commit 이미지를 만들어보자.

docker commit web-server web-server-commit

  docker images 명령어로 이미지가 잘 만들어 졌는지 확인할 수 있다.

3. python3 설치

  파이썬3 안에는 웹 서버가 내장되어 있다. 이 웹 서버를 사용하기 위해서 설치를 해보자. 패키지를 설치하기 전에는 apt update로 업데이트 먼저 실행한다.

apt update
apt install python3

4. 디렉토리 생성

  웹서버의 사용자 요청을 찾는 디렉토리를 생성한다.-p 옵션을 추가하면 경로 전체가 생성된다.

mkdir -p /var/www/html

5. 웹 페이지 생성

  사용자 요청에 응답해 줄 웹페이지를 만들자.

echo "Hello, <strong>Docker</strong>" > index.html

6. 서버 실행

파이썬3의 웹 서버 실행.

python3 -m http.server

✅ build

  commit으로 이미지를 만들게 되면 이미지가 어떻게 만들어졌고, 그 안에 무엇이 있는지 확인이 어렵다. 그래서 파일을 생성해서 이미지를 만드는 build 방식을 권장한다.

1. 파일 생성

  visual studio에 Dockerfile 파일을 만들었다. 확장 프로그램으로 도커를 설치하면 귀여운 고래 파일을 만들 수 있다. ubuntu:20.04라는 이름의 컨테이너를 생성한다.

FROM ubuntu:20.04

2. 이미지 생성

  web-server-build 라는 이미지를 만든다. -t 옵션은 이름 태그다.

docker build -t web-server-build .

3. python3 설치

  도커 파일 안에서 명령어를 실행 할 때마다 레이어(layer)가 생성되기 때문에, 명령어들은 하나로 연결(&&)해서 사용하는걸 권장한다.

  -y 옵션을 추가하면 자동으로 yes가 되어 중간에 사용자의 입력이 기록되지 않게 한다. 도커 파일이 작동되게 하기 위해 붙여준다.

RUN apt update && apt install -y python3

4. 디렉토리 생성

  작업 디렉토리가 없다면 디렉토리를 만들고 그 위치로 이동하는 명령어를 입력한다. 명령어가 실행하게 되면 www에 대해서 실행된다.

WORKDIR /var/www/html

5. 웹 페이지 생성

  위 commit 방식처럼 RUN echo "Hello, <strong>Docker</strong>" > index.html 명령어를 입력해도 되지만, index.html 파일을 host에서 image로 복사하는 방법도 있다. COPY는 현재 패키지 설치 정보를 도커 이미지에 복사해준다.

# `index.html`을 www html로 복사하는 명령어
COPY ["index.html","."]

6. 서버 실행

  도커 파일에서 만든 이미지를 컨테이너로 생성 할 때, 바로 웹 서버를 이용할 수 있는 상태로 만들 때는 CMD 명령어를 사용한다. 이 때, -u 옵션을 줘야 실행되고 있는 현 상태가(log) 화면에 출력된다.

CMD ["python3", "-u", "-m", "http.server"]

  run은 build가 되는 시점에 실행되는 명령어고 cmd는 컨테이너가 실행될때 시행돼서 run이 실행된 결과는 이미지에 반영되고, cmd가 실행된 결과는 컨테이너에 반영된다.

  이제 실행해보자. web-server-build를 바탕으로 web-server 라는 이름의 컨테이너를 생성한다. 생성 전에 같은 이름의 컨테이너가 있으면 문제가 생기기 때문에 지우는 작업을 먼저 한다.

docker build -t web-server-build .;
docker rm --force web-server;
docker run -p 8888:8000 --name web-server web-server-build pwd;

  웹 서버가 자동으로 실행됐다. 자동으로 실행되지 않도록 하기 위해서는 run 뒤에 pwd를 붙이면, cmd 대신 pwd가 실행돼서 실행하는 시작 명령을 변경 할 수 있다(오버라이딩).

  웹 서버가 아니라 pwd가 실행되는 것을 볼 수 있다.


[참고사이트 - 생활코딩]

profile
backend developer 🐌

0개의 댓글