Dockerfile & build
사용자 정의 도커 이미지를 만드는 방법은 대표적으로 docker commit
이 있다.
그러나 docker commit은 직접 컨테이너 안에서 원하는 프로그램을 설치한 후에 해당 컨테이너 상태를 그대로 이미지 형태로 복사하는 것이다.
이러한 방법은 실수할 위험도 있고, 현재 컨테이너에 어떤 프로그램들이 설치 되어 있는지 일일이 확인하기 어렵다.
따라서 사용자 정의 이미지를 만드는 방식을 파일 형태로 명세하는 방법이 있는데, 바로 Dockerfile
과 build
를 사용한 방식이다.
아래 예시를 보자.
ex) ubuntu 20.04에서 python을 설치해 서버까지 띄우는 작업을 하고싶다고 하자. 그리고 이를 이미지로 만들고 싶다.
먼저 docker commit을 통해 이미지를 만들기 위해 컨테이너에 다음과 같은 명령어를 수행한다.
# shell
docker run --name web-server -it ubuntu:20.04
---
# docker
apt update && apt install -y python;
mkdir -p /var/www/html;
cd /var/www/html;
echo "Hello, <strong>Docker</strong>" > index.html;
python -m http.server;
- ubuntu 20.04 이미지에 대한 컨테이너에 대해
- 컨테이너에 python을 설치
- /var/www/html 경로를 생성하여 호스트의 index.html 파일을 복사하고
- python 서버를 실행한다.
해당 작업을 Dockerfile로 명세해본다.
FROM ubuntu:20.04
RUN apt update && apt install -y python3
WORKDIR /var/www/html
COPY ["index.html", "."]
CMD ["python3", "-u", "-m", "http.server"]
- ubuntu 20.04 이미지에 대한 컨테이너에 대해
-> FROM ubuntu:20.04
2. 컨테이너에 python을 설치
-> RUN apt update && apt install -y python3
3. /var/www/html 경로를 생성하여 호스트의 index.html 파일을 복사하고
-> WORKDIR /var/www/html, COPY ["index.html", "."]
-> 호스트 로컬에 index.html file은 따로 준비해둬야 한다.
4. python 서버를 실행한다.
-> CMD ["python3", "-u", "-m", "http.server"]
-> -u 옵션을 넣어줘야 현재 로그 출력을 볼 수 있다.
-> RUN과 CMD의 차이는 RUN은 이미지가 build되는 시점에 반영된다면, CMD는 컨테이너가 실행될 때 반영된다. 즉, RUN은 이미지에 반영, CMD는 컨테이너에 반영.
이처럼 Dockerfile 문법에 따라 원하는 설정을 넣을 수 있다.
이제 작성한 Dockerfile을 기반으로 이미지를 만들고 컨테이너를 생성해보자.
docker build -t web-server-build .;
docker run 8888:8000 --name web-server web-server-build;
- 형식: docker build -t [이미지 이름] [Dockerfile 경로]
build 명령 시, web-server-build 이미지가 생성되고
run 명령 시, python 서버가 실행된다면 성공이다.
지금까지 Dockerfile을 통한 도커 이미지 생성 방법에 대해 알아보았다.
'devops > docker' 카테고리의 다른 글
[Docker] Dockerfile로 Docker에서 Spring boot 서버 실행 (0) | 2022.07.22 |
---|---|
[Docker] 도커 컨테이너에 깃랩(Gitlab) 설치 (0) | 2022.07.01 |
[Docker] Docker compose (0) | 2022.06.28 |
[Docker] Docker commit & push (0) | 2022.06.28 |
[Docker] 도커 입문 (0) | 2022.06.28 |