공부하는 중~~/분류하기 애매한 것들
[Docker] 도커 Dockerfile 작성법
임대추
2021. 3. 10. 17:15
안녕하세요
오늘은 Dockerfile을 작성하는 방법에 대해 써보고자합니다.
먼저 도커의 기본적인 것은 알고있다고 가정하고 시작하겠습니다.
Ubuntu 20.04 버전을 base 이미지로 간단하게 컨테이너 내에서 디렉토리 생성, 파일 복사
그리고 호스트의 html 파일을 공유하는 정도의 Dockerfile 예시를 작성해보겠습니다.
# Ubuntu20.04 이미지를 기반으로 배포자를 Daechu로 설정
FROM ubuntu:20.04
MAINTAINER Daechu
# apache Timezone 에러가 발생하여 ENV 설정
ENV DEBIAN_FRONTEND=noninteractive
# 컨테이너 내에서 실행될 커맨드
RUN apt-get update
RUN apt-get install apache2 -y
RUN apt-get install tree
RUN mkdir /home/share
# 볼륨 설정 및 파일 추가
VOLUME /home/share
ADD test.html /var/www/html
# Working Directory 설정
WORKDIR /var/www/html
# 명령어 매개변수 설정
RUN ["/bin/bash", "-c", "echo hello >> test2.html"]
# 80번 포트 개방
EXPOSE 80
# CMD 명령어 실행 (한 번 밖에 실행 못함)
CMD apachectl -DFOREGROUND
주석 참고하시면 이해 안되실 부분이 없을 것 같습니다.
호스트와 컨테이너 간의 볼륨 공유, 호스트의 파일을 컨테이너로 복사
커맨드 실행 등, 큼지막한 예제들은 모두 들어있는 Dockerfile 입니다.
실행하시면 Step.14 (Dockerfile의 라인 수)를 거쳐 이미지가 만들어지게 됩니다.
// -t 옵션을 안쓰면 이름이 16진수로 만들어지므로 웬만하면 -t 옵션 넣기, ./는 docker 폴더를 나타냄
docker build -t test:0.1 ./
해당 커맨드로 Dockerfile을 바탕으로 빌드를 하게됩니다.
그 후에
docker images
해당 명령어로 이미지를 확인하면 test라는 이름으로 0.1 태그를 가진 이미지가 생성되게 됩니다.
이제 이 test 이미지로 run 명령어를 실행하면 실제로 사용할 수 있는 컨테이너가 만들어지게 됩니다.
// --rm 옵션은 휘발성을 실행하는 옵션 (끄면 사라짐), -it 옵션은 입출력 모드로 사용한다는 의미
// --name 옵션은 컨테이너의 이름, 맨 마지막은 커맨드의 매개변수로 사용됨
// -P 옵션은 Dockerfile에서 EXPOSE된 포트를 모두 호스트와 바인딩 한다는 의미
// -v 옵션은 호스트경로:컨테이너 경로로 해서 연결하는 옵션 (컨테이너의 경로는 아까 생성한 /home/share 볼륨으로 한다.)
docker run --rm -it --name test -P -v /본인의경로:/home/share test:0.1 /bin/bash
위의 커맨드를 실행하시면 사진과 같은 컨테이너가 생성되게 됩니다.
보시면 WORKDIR로 설정한 경로로 컨테이너의 입출력모드로 켜지고 Dockerfile에서
ADD한 파일, RUN으로 실행한 결과가 잘 반영되어 있는 것을 확인할 수 있습니다.
사진에는 안나왔지만 apache도 잘 설치되어 있습니다.
그리고 호스트와 연결된 /home/share에도 파일들이 잘 복사되어 있네요
이 예제를 응용하면 더 어려운 컨테이너도 생성할 수 있습니다.
반응형