도커 파일(Dockerfile)이란?
도커 파일은 도커 내에서 자신이 원하는 이미지를 빌드할 수 있는 명령어들이 담겨 있는 파일입니다. 도커 파일 실행 시 각 줄 마다 작성되어 있는 명령어들이 단계적으로 실행되며 최종적으로 우리가 원하는 형태의 도커 이미지를 얻을 수 있는 것입니다.
도커 이미지를 만들 수 있는 방법은 도커 commit을 쓰는 방법과 도커 파일을 만들어 실행하는 두 가지 방법이 있는데요, 도커 commit을 이용하는 방법은 다음 글에 설명되어 있습니다.
https://tomatobaconsoup.tistory.com/9
[Docker] 도커(Docker) 간단 사용법
도커란 뭘까? 도커는 '컨테이너(container)' 라는 격리된 프로세스를 이용하여 가상머신 상에 리눅스 응용 프로그램들을 실행하고 관리할 수 있게 도와주는 오픈소스 소프트웨어 입니다. 현재 본인
tomatobaconsoup.tistory.com
레이어(Layer) 이해하기
레이어란 이미지 생성에 있어 중간 단계의 이미지를 뜻합니다. 이미지는 최하단의 이미지 부터 한층한층 레이어를 쌓아올려가며 레이어 계층을 형성하고, 마지막에 최상단의 레이어인 이미지를 구축하게 됩니다.
이 과정들의 기록을 저희는 도커에서 직접 확인할 수 있습니다. 일단 도커 허브에서 httpd란 이미지를 끌어온 뒤, 터미널에 docker history httpd라고 입력하면, 레이어 생성 로그들을 확인할 수 있습니다.
docker history {이미지 이름}
위 사진에서 볼 수 있듯이, 아래에서 위로 진행하며 새로운 파일을 수정하거나 추가하는 등의 과정을 거칩니다. 그리고 맨 윗줄에 있는 이미지ID를 가지고 있는 이미지는 최상단의 이미지로, 완성된 이미지라 할 수 있습니다.
이미지 생성을 위한 레이어 건축은 '유니온 마운트'라는 기술을 기반으로 이루어집니다.
유니온 마운트란 동일한 디렉토리 내에 여러 파일시스템을 쌓으며, 동일한 폴더나 파일이 있는 경우 나중의 것이 기존 폴더나 파일을 덮어쓰게 되고 그 외에는 기존의 것을 계속 유지해가며 디렉토리를 업데이트해 나가는 과정을 뜻합니다.
도커 파일 작성
이제 도커 파일을 작성해 봅시다. 사실 도커 파일의 명령어들은 이미 history를 통해 다 확인을 할 수 있었습니다.
바로 동그라미 친 저 부분이 바로 도커 파일에 넣어줄 명령어들의 형태입니다.
예를 들기 위해 참고 자료에 나와 있는 블로그에서 예시 도커 파일을 가져와 보았습니다.
FROM ubuntu:14.04
RUN apt-get update &&\
apt-get -qq -y install git curl build-essential apache2 php5 libapache2-mod-php5 rcs
WORKDIR /tmp
RUN \
curl -L -O https://github.com/wkpark/moniwiki/archive/v1.2.5p1.tar.gz &&\
tar xf /tmp/v1.2.5p1.tar.gz &&\
mv moniwiki-1.2.5p1 /var/www/html/moniwiki &&\
chown -R www-data:www-data /var/www/html/moniwiki &&\
chmod 777 /var/www/html/moniwiki/data/ /var/www/html/moniwiki/ &&\
chmod +x /var/www/html/moniwiki/secure.sh &&\
/var/www/html/moniwiki/secure.sh
RUN a2enmod rewrite
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -D FOREGROUND"
각각의 명령어의 뜻은 다음과 같습니다.
- FROM : 어떤 이미지로 부터 시작해 레이어들을 빌드해 나갈 것인지를 지정해주는 명령어 입니다.
- RUN : 직접 뒤에 오는 명령어를 실행시켜 파일의 설치나 수정 등을 수행하는 명령어 입니다. &&\ 로 줄 구분을 하여 한번에 두개 이상의 명령어를 작동시킬 수 있습니다.
- WORKDIR : 뒤에 오는 모든 작업의 디렉토리를 변경합니다. 위 코드의 경우, 앞으로 모든 명령어는 /tmp에서 일어날 것임을 명시해줍니다.
- ENV : 컨테이너 실행 환경에 적용되는 환경변수의 디폴값을 지정해줍니다. 예를 들어 APACHE_RUN_USER의 값은 www-data가 될 것입니다.
- EXPOSE : 호스트와 연결할 컨테이너의 내부 포트를 설정해줍니다.
- CMD : 컨테이너에서 실행될 명령어를 지정해줍니다.
그리고 이제 이 도커 파일로 이미지를 빌드해 주시면 됩니다.
docker build -t {새로운 이미지 이름}
참고 자료
- 도커(Docker) 입문편 | 44BITS : https://www.44bits.io/ko/post/easy-deploy-with-docker
- 만들면서 이해하는 도커(Docker) 이미지의 구조 : https://www.44bits.io/ko/post/how-docker-image-work
'DevOps' 카테고리의 다른 글
[Docker] 도커(Docker) 간단 사용법 (0) | 2021.10.06 |
---|