본문 바로가기
공부공부/2023 쌓여가는 나의 지식~

Dockerfile을 이용한 컨테이너, 이미지 생성

by Lee_story_.. 2023. 10. 10.
728x90

 

이전글들을 통해 다양한 옵션들로 도커 컨테이너와 이미지를 생성해 보았습니다. 

 

 

Ubuntu20.04에서 Docker 시작 및 사용법(2) [명령어]

*Docker를 처음 시작해 보는 글이라 부족한 점이 많습니다* 이번 글에서는 도커를 사용해 보면서 사용했던 명령어들을 정리해 보도록 하겠습니다. 생각보다 많은 옵션들이 있어 사용해본 옵션들

ljhyunstory.tistory.com

 

간단한 옵션들만 사용한다면 문제가 없지만

 

 

실행파일, 옵션들이 많아진다면 한줄의 명령어로는 어려울 수 있습니다. 

 

그렇기에 이러한 경우에는 Dockerfile를 이용하여 컨테이너와 이미지를 생성할 수 있습니다. 

 

 

 

Dockerfile?

 

아래처럼 여러 명령어를 정리하여 저장해놓은 파일로

FROM ubuntu:18.04

LABEL "purpose"="base test"

WORKDIR /home/model_Platform

RUN apt update && \
    apt install -y ffmpeg

VOLUME /var/run/docker.sock:/var/run/docker.sock

CMD service ssh start && service mysql start  && python3 app.py

EXPOSE 80

CMD apachectl -DFOREGROUND

도커에서 파일을 읽어 여러 옵션들을 적용, 실행하는 이미지를 생성할 수 있습니다. 

 

 

 

도커 파일에서 사용할 수 있는 커맨드는 다음과 같습니다.

 

FROM : 생성할 이미지의 기본 이미지 

 

WORKDIR : 작업을 실행할 디렉토리 위치

 

VOLUME : 이미지파일에서 볼륨 마운트할 디렉토리를 설정합니다. 

 

RUN : 이미지 빌드시 실행되는 명령어입니다.

 

CMD : 컨테이너 생성 시 실행되는 명령어로, Dockerfile에서 한번만 사용할 수 있습니다.

 

EXPOSE : 포트설정

 

 

이 외에도 많은 커맨드가 있지만 

ip할당 및 네트워크 설정 부분에서는 도커파일로 제어할 수 없다고 합니다. 

 

 

 

여기서 가장 많이 사용되는 실행 커맨드인

RUN, CMD, ENTRYPOINT에 대해서는 조금더 알아보겠습니다. 

 

 

실행 커맨드

RUN, CMD, ENTRYPOINT

셋다 작업을 실행할때 사용합니다. 

하지만 약간의 차이가 있습니다. 

 

RUN의 경우 도커파일로 이미지를 생성할때 단 한번 실행됩니다. 

그렇기에 라이브러리 설치, 업데이트 등의 명령어를 실행할 때 사용됩니다. 

 

RUN apt update && \ apt install ~~~

 

 

문제는 CMD, ENTRYPOINT 이 둘인데 

 

둘 다  도커파일로 이미지를 만들고 이 이미지로 컨테이너를 생성, run 할 때 작업을 실행합니다. 

여기서 ENTRYPOINT의 경우 작업을 무조건, 항상 실행하고, 

CMD는 사용자의 선택에 따라 작업을 변경할 수도 있다는 점에서 차이가 있습니다. 

 

 

DockerFile
...

ENTRYPOINT ["echo", "Hello,"]
CMD ["Darwin"]

...
-----------------------------------

docker run hello:together
>> Hello, Darwin

docker run hello:together world
>> Hello, world

 

 

ENTRYPOINT : 항상 실행

CMD : 사용자 파라미터 입력에 따라 변동

 

 

 

 

이제 도커파일로 이미지를 생성해봅시다. 

 

실습

 

실습환경까지는 필요에 따라 구성해주시면 됩니다. 

 

 

저는 단순하게 아래처럼 home디렉토리를 볼륨으로 공유해주고 

python3로 내부 app.py를 실행하는 도커파일을 만들어 주었습니다. 

 

FROM ubuntu:18.04

WORKDIR /home/base

RUN apt update

VOLUME /home/:/home/base

CMD python3 app.py

(도커파일은 메모장 등으로 만들어도 상관없습니다.)

 

 

빌드해주기전에 아래처럼 확장자를 제거해주고

 

 

 

위의 도커파일이 존재하는 디렉토리로 이동하여 아래처럼 생성할 이미지 이름:태그를 정해 명령어를 실행해주면 

 

새로운 이미지가 생성되게 됩니다. 

docker build -t [이미지이름:태그] .

 

 

이를 컨테이너로 만들어 실행해보면 도커파일에 따라 실행되는 도커 컨테이너를 확인할 수 있습니다!

 

 

 

 

위의 경우는 매우 간단한 작업이라 도커파일이 몇줄 안되지만 

실행해야할 작업이 증가할수록

한줄짜리 docker  run 명령어보다는 더 효율적으로 사용할 수 있을것 같습니다. 

 

 

 

 

 

<참고블로그>

 

 

ENTRYPOINT, CMD 차이

레퍼런스 > > - https://www.bmc.com/blogs/docker-cmd-vs-entrypoint/ > - https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact 둘 다 컨테이너 시작시 실행할 명령어를 지정해준다. 컨테이너를

velog.io

 

 

 

 

 

틀린점이 있다면 댓 달아주세요!

 

 

 

 

 

댓글