Programming/Docker

Docker - Dockerfile

잇(IT) 2022. 6. 3. 11:39

목차

1. Dockerfile

2. Dockerfile 생성 및 실행

2.1 Dockerfile을 이용한 Web Server 생성
2.2 Dockerfile을 이용한 FTP Server 생성
2.3 Dockerfile을 이용한 DNS Server 생성


1. Dockerfile

- Dockerfile은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수 설정 등을 기록한 하나의 파일이다.

- 빌드하면 자동으로 이미지가 생성된다.

 

COMMAND Description COMMAND Description
FROM 베이스이미지 지정 ADD 파일추가(외부파일 불러오기)
MAINTAINER 작성자 지정 COPY 파일복사 : local디렉토리
RUN 명령어 실행 VOLUME 볼륨마운트
CMD 데몬실행 ENTRYPOINT 데몬실행 : CMD보다 우선
LABEL 라벨설정 USER 사용자설정
EXPOSE 포트 내보내기 WORKDIR 작업디렉토리지정
ENV 환경변수설정 ONBUILD Build 후 실행명령

2. Dockerfile 생성 및 실행

 

2.1 Dockerfile을 이용한 Web Server 생성

 

# 1. Base image
FROM    centos:7

# 2. Httpd install
RUN     yum install -y httpd
RUN     yum install -y net-tools
RUN     sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
RUN     systemctl enable httpd

# 3. index.html file copy
COPY    index.html /var/www/html/

# 4. Web execute
CMD     /usr/sbin/httpd -D FOREGROUND
 
# 5. Port
EXPOSE 8080

- Dockerfile을 통해 생성할 Web Server의 내용을 작성한다.

- FROM 명령어를 통해 이미지는 Centos7을 사용한다.

- RUN 명령어를 통해 실행 시킬 명령어들을 작성한다.

- Copy 명령어를 통해 파일을 복사한다.

- CMD 명령어를 통해 데몬을 실행 시킨다.

- EXPOSE 명령어를 통해 해당 포트 번호를 내보낸다.

 

- Dockerfile을 이용하여 컨테이너를 생성하고 COPY 명령어를 통해 복사할 파일을 생성한다.

 

* docker build -t [이미지명] [Dockerfile이 저장된 경로]

- 위의 명령어를 통해 작성한 Dockerfile을 이미지로 생성한다.

 

- 이미지를 확인해보면 해당 이름으로 이미지가 생긴 것을 확인 할 수 있다.

 

-  Dockerfile을 통해 생성한 이미지를 가지고 컨테이너를 생성한다.

 

- Dockerfile을 통해 생성한 이미지를 가지고 생성한 컨테이너가 정상적으로 작동하는 것을 볼 수 있다.


2.2 Dockerfile을 이용한 FTP Server 생성

 

#Dockerfile

FROM    centos:7

RUN     yum install -y vsftpd
RUN     mkdir /test

COPY    user.sh /test/user.sh
COPY    ftp.txt /test/ftp.txt
COPY    vsftpd.conf /etc/vsftpd/vsftpd.conf
COPY    chroot_list /etc/vsftpd/chroot_list

RUN     sh /test/user.sh

EXPOSE  21      50000-50010

CMD     ["/usr/sbin/vsftpd","-obackground=NO"]

- user.sh 파일을 이용하여 FTP Server 사용자를 생성한다.

- ftp.txt 파일은 banner에 보일 내용을 작성할 파일이다.

- vsftpd.conf 파일은 vsftp의 기본 설정 파일인 /etc/vsftpd/vsftpd.conf 파일에 들어갈 내용을 작성한다.

- chroot_list 파일은 chroot 사용자 목록을 작성하는 파일이다.

 

* build -t를 이용하여 이미지를 생성한다.

 

- Dockerfile을 이용하여 생성한 이미지를 가지고 컨테이너를 생성한다.

 

- 컨테이너 생성 후 프로세스가 정상적으로 작성하는지 확인한다.

 

- FTP Server에 정상적으로 접속되는 것을 볼 수 있다.


2.3 Dockerfile을 이용한 DNS Server 생성

 

# DNS Build

# Step 1 : Base Image Install

FROM    centos:7

# Step 2 : Bind Package Install

RUN     yum install -y bind bind-utils bind-libs
RUN     yum install -y net-tools
RUN     sed -i 's/127.0.0.1/any/' /etc/named.conf
RUN     sed -i 's/localhost/any/' /etc/named.conf
RUN     systemctl enable named

# Step 3 : Configuration File Settiong

COPY    named.rfc1912.zones /etc/named.rfc1912.zones
COPY    isbaik.com /var/named/
COPY    resolv.conf /etc/resolv.conf

RUN     chmod 755 /var/named
RUN     chmod 755 /var/named/isbaik.com

# Step 4 : named execute

CMD     ["/usr/sbin/named", "-c", "/etc/named.conf", "-g", "-u", "named"]

# Step 5 : Port

EXPOSE  53/udp
EXPOSE  53/tcp

- RUN sed -i 's/127.0.0.1/any/' /etc/named.conf : DNS 기본 설정 파일 중 하나인 /etc/named.conf의 내용을 변경하기 위해 sed 명령어를 사용하여 내용을 변경한다.

- COPY를 통해 /etc/named.rfc1912.zones, /var/named/, /etc/resolv.conf 총 3개의 DNS에 필요한 설정 파일들에 내용들을 복사하여 집어 넣는다.

 

resolv.conf 파일 내용 작성
isbaik.com 파일 내용 작성
named.rfc1912.zones 파일 작성

- COPY를 통해 복사하여 집어넣을 파일을 생성한다.

 

build -t를 통한 이미지 생성
컨테이너 생성

- web이라는 이름을 가진 네트워크를 생성한다.

- --ip는 해당 네트워크 대역에서 부여하고 싶은 IP Address를 줄 수 있다.

- --dns는 DNS Server의 IP Address를 집어넣는다.

 

- 프로세스가 정상적으로 작동하는지 확인한다.

 

- nslookup을 통해 DNS Server가 정상적으로 작동하는 것을 볼 수 있다.


728x90