엄청 경량화된 리눅스인 alpine 이미지를 이용해서 httpd 만들면 기존 httpd 이미지보다 용량을 작게 해서 만들 수 있다.
이렇게 이미지를 수정하여 내가 딱 필요한 부분을 최적화하여 다시 만들어내는 능력은 유용할 것이다.
Dockerfile
Docker 는 이미지를 Dockerfile 의 명령어들을 읽고 그에 맞게 자동으로 빌드한다.
Dockerfile 은 주어진 이미지를 빌드하는데 필요한 모든 커맨드가 텍스트 형식으로 담긴 파일이다.
Docker 이미지는 Dockerfile 명령어의 결과로 만들어진 읽기 전용의 레이어들로 구성되어 있다. 읽기 전용의 레이어이기 때문에 이전 레이어에서 변경된 내용이 있다면 다음 레이어가 되어 그 위에 쌓이게 된다. 다음 Dockerfile 을 살펴보자.
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
각각의 명령어들은 각각의 레이어를 만든다.
- FROM 은 Docker 이미지 ubuntu:18.04 에서 레이어를 만든다.
- COPY 는 Docker 밖의 파일을 Docker 안에 추가한다.
- RUN 은 make 를 사용해 실제 응용프로그램을 빌드한다.
- CMD 는 컨테이너 안에서 실행할 커맨드를 지정한다.
이미지를 실행시키고 컨테이너를 만들면, 쓰기가 가능한 새로운 레이어 (컨테이너 레이어) 를 아래 레이어 위에 추가한다. 컨테이너를 실행할 때 파일을 만들거나 수정하거나 삭제하는 등의 모든 변경점들은 이 쓰기 가능한 레이어에 기록된다.
docker build 커맨드를 입력하면 현재 작업중인 디렉토리를 빌드 컨텍스트 라고 부르게 된다. 기본적으로 Dockerfile 은 여기에 위치해 있다고 가정하지만 -f 플래그로 다른 위치를 지정해줄 수도 있다. Dockerfile 이 어디에 있던지 상관 없이 현재 디렉토리에 있는 모든 파일과 디렉토리는 Docker 데몬에게 빌드 컨텍스트로 전달되게 된다.
Alpine 리눅스 이미지로 apache2 이미지 만들기
# step1 : Base Image
FROM alpine:latest
# step2 : httpd install
RUN apk add apache2
#RUN systemctl enable httpd
RUN sed -i 's/Listen 80/Listen 8080/' /etc/apache2/httpd.conf
# step3 : index.html file copy
COPY index.html /var/www/localhost/htdocs/
#ADD http://10.0.0.1/test.txt /var/www/html/
# step4 : WEB Execute
CMD /usr/sbin/httpd -D FOREGROUND
# step5 : port
EXPOSE 8080
'Docker' 카테고리의 다른 글
LXC (개인 프로젝트) (0) | 2022.12.19 |
---|---|
HAProxy - Multi LoadBalancing (0) | 2022.12.13 |
Docker : Link (0) | 2022.12.09 |
Docker : Network (0) | 2022.12.09 |
Volume / bind mount ( Container Data 공유) (0) | 2022.12.09 |