본문 바로가기

Linux/Docker

39. CentOS7 : Dockerfile

Dockerfile

  • Docker Image 생성을 위한 스크립트 파일
  • Dockerfile의 파일 명은 반드시 Dockerfile로 지정해야 한다.

Dockerfile 기본 구성

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

1. Dockerfile 둘러보기

1.1. 실습 전 Docker 설치 및 실행

※ Docker 설치 아래 글 참고

31. CentOS7 : Cloud & Docker

1. Cloud 언제 어디서나 어떠한 단말을 가지고서라도 인터넷 접속만 가능하다면 사용한만큼 비용을 지불하고 원하는 IT 자원을 이용하는 것 설치할 필요 없음 통합된 환경 제공 사용한 만큼 비용

mh-itstudy.tistory.com


※ 도커 실행

1.2. Dockerfile - COPY

  • hostname: CentOS7-4
  • IP: 10.0.0.14

※ 파일 저장할 디렉터리 생성


※ test.txt 파일 생성


※ Dockerfile 생성

  • FROM centos:7 : centos7 Base 이미지 지정
  • MAINTAINER mhan : 작성자 지정 (생략 가능)
  • COPY test.txt : 컨테이너 생성 시 / 디렉터리 아래에 test.txt 파일 넣기

※ Dockerfile build하여 이미지 생성

  • mhan88:centos7 : repository 및 tag

※ 생성된 이미지 확인


※ 제작한 이미지로 컨테이너 생성


※ 컨테이너 접속 - test.txt 파일 가져 왔는지 확인


※ test.txt 파일 내용 확인


※ inspect 명령어로 컨테이너 이미지 확인

1.3. Dockerfile - RUN

※ Dockerfile 생성

  • RUN mkdir /test : 컨테이너 생성 시 /test 디렉터리 생성

※ Dockerfile build하여 이미지 생성


※ 생성된 이미지 확인


※ 제작한 이미지로 컨테이너 생성


※ 컨테이너 접속 - test 디렉터리가 생성됐는지 확인


2. Centos 이미지를 베이스로 이미지 제작

2.1. Centos7 이미지를 베이스로 httpd 이미지 제작

※ Dockerfile 생성

  • RUN yum install -y httpd : httpd 패키지 설치
  • RUN systemctl enable httpd : 컨테이너 생성 시 httpd 자동 실행 되도록 설정
  • COPY index.html /var/www/html
  • CMD /usr/sbin/httpd -D FOREGROUND : httpd 실행

※ 웹 페이지에 적용할 파일 생성


※ Dockerfile build하여 이미지 생성


참고) 키 관련 경고 메세지가 출력되도 이미지는 정상적으로 만들어짐


※ 생성된 이미지 확인


※ 제작한 이미지로 컨테이너 실행

  • 외부 접속을 위해 80:80 포트 포워딩
  • privileged 모드로 실행: Docker 컨테이너는 기본적으로 Unprivileged 모드로 실행되며, 이 모드에서는 시스템 주요 자원에 대한 접근 권환이 부족함


※ 컨테이너 접속 및 웹 페이지 파일 내용 확인해보기


※ 웹 브라우저에서 접속 테스트


2.2. Centos7 이미지를 베이스로 FTP 이미지 제작

※ Dockerfile 생성

  • RUN yum install -y vsftpd : FTP 패키지 설치
  • RUN mkdir /test : 컨테이너 내부에 /test 디렉터리 생성
  • COPY user.sh /test/user.sh : 호스트에 작성해둔 유저 생성 스크립트 파일을 컨테이너 내부에 복사하여 넣기
  • COPY banner.txt /test/banner.txt : 호스트에 작성해둔 배너 파일을 컨테이너 내부에 복사하여 넣기
  • COPY vsftpd.conf /etc/vsftpd/vsftpd.conf : 호스트에 작성해둔 FTP 설정 파일을 컨테이너 내부에 복사하여 넣기
  • COPY chroot_list /etc/vsftpd/chroot_list : 호스트에 작성해둔 chroot 유저 리스트 파일을 컨테이너 내부에 복사하여 넣기
  • RUN sh /test/user.sh : /test/user.sh 파일 실행
  • CMD ["/usr/sbin/vsftpd","-obackground=NO"] : FTP 실행

※ 유저 생성 스크립트 파일 작성
# vi user.sh


※ 배너 파일 작성
# vi banner.txt


※ FTP 설정 파일 작성
# vsftpd.conf


※ Dockerfile build하여 이미지 생성


※ 제작한 이미지로 컨테이너 실행

  • 외부 접속을 위해 21:21 포트 포워딩


※ 호스트에서 FTP 접속 테스트 진행

  • 접속, 로그인, 디렉터리 조회, 파일 다운로드 및 업로드

Filezilla 접속 테스트

  • filezilla passive 모드 접속이 실패할 경우 전송 설정을 능동으로 변경 후에 다시 수동 설정

※ Filezilla 접속 테스트 - 접속 설정


※ 수동 전송(passive) 설정


※ 접속 테스트 진행 - 실패


※ 전송 설정을 능동으로 변경 후 다시 접속 테스트 진행


※ 접속 테스트 - 성공


※ 다시 수동으로 설정 후 테스트


※ FTP 접속 - 성공


2.3. Centos7 이미지를 베이스로 DNS 이미지 제작

※ Dockerfile 생성
# vi Dockerfile

  • 5: DNS 관련 패키지 설치
  • 6~7: /etc/named.conf 파일 수정
  • 8: named 자동 실행 설정
  • 11: zone 파일 컨테이너의 /etc/ 아래에 복사하여 넣기
  • 12~13: 정방향/역방향 조회 영역 설정 파일 컨테이너 내부의 /var/named/ 아래에 복사하여 넣기
  • 14: resolv.conf 파일 컨테이너의 /etc/resolv.conf 파일로 복사하여 넣기
  • 17~19: 파일 권한 수정
  • 22: named 실행

※ DNS 정방향 조회 영역 파일 생성
# vi mhan.xyz


※ DNS 역방향 조회 영역 파일 생성
# vi xyz.mhan


※ resolv.conf (nameserver 설정) 파일 생성
# vi resolv.conf


※ Dockerfile build하여 이미지 생성


※ 생성된 이미지 확인


※ 제작한 이미지로 컨테이너 실행

  • 외부 접속을 위해 53:53 포트 포워딩


※ DNS 설정
실행 → ncpa.cpl → 네트워크 카드 선택 후 IP 설정


※ nslookup 명령어 이용하여 DNS 조회 테스트