목차
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에 필요한 설정 파일들에 내용들을 복사하여 집어 넣는다.
- COPY를 통해 복사하여 집어넣을 파일을 생성한다.
- web이라는 이름을 가진 네트워크를 생성한다.
- --ip는 해당 네트워크 대역에서 부여하고 싶은 IP Address를 줄 수 있다.
- --dns는 DNS Server의 IP Address를 집어넣는다.
- 프로세스가 정상적으로 작동하는지 확인한다.
- nslookup을 통해 DNS Server가 정상적으로 작동하는 것을 볼 수 있다.
'Programming > Docker' 카테고리의 다른 글
Docker - NCloud에서 Script 파일을 이용한 Docker 설치 및 http 컨테이너 실행 (0) | 2022.06.02 |
---|---|
Docker - Word Press + MYSql (0) | 2022.06.02 |
Docker - PHP, MYSql 설치 및 실행 (0) | 2022.06.01 |
Docker - Link ( + Scripts) (0) | 2022.06.01 |
Docker - Image 생성 (0) | 2022.05.31 |