Dockerfile을 사용하여 사용자 지정 Docker 이미지를 자동으로 빌드하고 구성하는 방법 - 3부
이 튜토리얼에서는 Apache 서비스가 설치된 Ubuntu를 기반으로 사용자 정의 Docker 이미지를 빌드하는 방법에 중점을 둡니다. 전체 프로세스는 Dockerfile을 사용하여 자동화됩니다.
Docker 이미지는 Dockerfiles라는 텍스트 파일에서 자동으로 빌드될 수 있습니다. Docker 파일에는 Docker 이미지를 생성하고 구성하는 데 사용되는 단계별 지침 또는 명령이 포함되어 있습니다.
요구사항
- Docker 설치 및 Docker 컨테이너 조작 알아보기 - 1부
- Docker 컨테이너에서 애플리케이션 배포 및 실행 – 2부
기본적으로 Docker 파일에는 요구 사항에 따라 특정 컨테이너를 구축하고 구성하기 위한 다양한 지침이 포함되어 있습니다. 다음 지침은 가장 많이 사용되며 그 중 일부는 필수입니다.
FROM
=Docker 파일의 첫 번째 명령으로 필수입니다. 새 이미지를 빌드할 기본 이미지를 가져오도록 Docker에 지시합니다. 태그를 사용하여 빌드할 정확한 이미지를 지정하세요.
Ex: FROM ubuntu:20.04
MAINTAINER
=빌드 이미지 작성자RUN
=이 명령은 여러 줄에서 사용할 수 있으며 Docker 이미지가 생성된 후 모든 명령을 실행합니다.CMD
=Docker 이미지가 시작되면 명령을 실행합니다. Dockerfile에서는 하나의 CMD 명령어만 사용하세요.ENTRYPOINT
=CMD와 동일하지만 이미지의 기본 명령으로 사용됩니다.EXPOSE
=컨테이너가 실행될 때 네트워크 포트를 수신하도록 지시합니다. 컨테이너 포트는 기본적으로 호스트에서 연결할 수 없습니다.ENV
=컨테이너 환경 변수를 설정합니다.ADD
=리소스(파일, 디렉터리 또는 URL의 파일)를 복사합니다.
1단계: Dockerfile 저장소 생성 또는 쓰기
1. 먼저, 나중에 파일을 재사용하여 다른 이미지를 만들 수 있도록 일종의 Dockerfile 저장소를 만들어 보겠습니다. /var
파티션 어딘가에 새 Docker 이미지를 빌드하는 데 사용되는 지침이 포함된 파일을 생성할 빈 디렉터리를 만듭니다.
mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile
2. 그런 다음 다음 지침에 따라 파일 편집을 시작합니다.
vi /var/docker/ubuntu/apache/Dockerfile
Dokerfile 발췌:
FROM ubuntu
MAINTAINER your_name <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND
이제 파일 지침을 살펴보겠습니다.
첫 번째 줄은 Ubuntu 이미지에서 빌드하고 있음을 나타냅니다. 태그가 제출되지 않은 경우(예: 14:10) Docker Hub의 최신 이미지가 사용됩니다.
두 번째 줄에는 이미지 작성자의 이름과 이메일을 추가했습니다. 다음 두 RUN 줄은 이미지를 빌드할 때 컨테이너에서 실행되며 Apache 데몬을 설치하고 일부 텍스트를 기본 Apache 웹 페이지에 에코합니다. .
EXPOSE 줄은 Docker 컨테이너에 포트 80을 수신하도록 지시하지만 해당 포트는 외부에서 사용할 수 없습니다. 마지막 줄은 컨테이너가 시작된 후 포그라운드에서 Apache 서비스를 실행하도록 컨테이너에 지시합니다.
3. 마지막으로 해야 할 일은 아래 명령을 실행하여 이미지 생성을 시작하는 것입니다. 그러면 로컬에서 ubuntu-apache
라는 새 Docker 이미지가 생성됩니다. 이 예제와 같이 이전에 생성된 Dockerfile은 다음과 같습니다.
docker build -t ubuntu-apache /var/docker/ubuntu/apache/
4. Docker에서 이미지를 생성한 후 다음 명령을 실행하여 사용 가능한 모든 이미지를 나열하고 이미지를 식별할 수 있습니다.
docker images
2단계: 컨테이너 실행 및 LAN에서 Apache에 액세스
5. 컨테이너를 백그라운드에서 지속적으로 실행하고 LAN의 호스트 또는 다른 원격 시스템에서 컨테이너 노출 서비스(포트)에 액세스하려면 호스트 터미널 프롬프트에서 아래 명령을 실행하세요. :
docker run -d -p 81:80 ubuntu-apache
여기서 -d
옵션은 ubuntu-apache
컨테이너를 백그라운드에서(데몬으로) 실행하고 -p
옵션은 컨테이너 포트를 < Strong>80을 로컬 호스트 포트 81에 연결합니다. Apache 서비스에 대한 외부 LAN 액세스는 포트 81을 통해서만 접근할 수 있습니다.
Netstat 명령은 호스트가 어떤 포트를 수신하고 있는지에 대한 정보를 제공합니다.
컨테이너가 시작된 후 docker ps
명령을 실행하여 실행 중인 컨테이너의 상태를 볼 수도 있습니다.
6. 웹페이지는 컴퓨터 IP 주소, localhost 또는 포트 81의 docker net 인터페이스에 대해 curl 유틸리티를 사용하여 명령줄에서 호스트에 표시할 수 있습니다. IP 명령을 사용하세요. 네트워크 인터페이스 IP 주소를 표시하는 줄입니다.
ip addr [List nework interfaces]
curl ip-address:81 [System Docker IP Address]
curl localhost:81 [Localhost]
7. 네트워크에서 컨테이너 웹페이지를 방문하려면 원격 위치에서 브라우저를 열고 HTTP 프로토콜, 컨테이너가 실행 중인 시스템의 IP 주소, 다음 그림과 같이 포트 81을 사용하세요. 아래 이미지.
http://ip-address:81
8. 컨테이너 내부에서 실행 중인 프로세스를 확인하려면 다음 명령을 실행하세요.
docker ps
docker top <name or ID of the container>
9. 컨테이너 문제를 중지하려면 docker stop
명령 뒤에 컨테이너 ID 또는 이름을 입력하세요.
docker stop <name or ID of the container>
docker ps
10. 컨테이너에 설명이 포함된 이름을 지정하려면 아래 예와 같이 --name
옵션을 사용하세요.
docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps
이제 할당된 이름을 사용하여 조작(시작, 중지, 상단, 통계 등)을 위해 컨테이너를 참조할 수 있습니다.
docker stats my-www
3단계: Docker 컨테이너에 대한 시스템 전체 구성 파일 생성
11. CentOS/RHEL에서는 systemd 구성 파일을 생성하고 다른 로컬 서비스에 대해 일반적으로 하는 것처럼 컨테이너를 관리할 수 있습니다.
예를 들어, 다음 명령을 사용하여 apache-docker.service
라는 이름의 새 시스템 파일을 생성합니다.
vi /etc/systemd/system/apache-docker.service
apache-docker.service 파일 발췌:
[Unit]
Description=apache container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www
[Install]
WantedBy=local.target
12. 파일 편집을 마친 후 파일을 닫고 systemd 데몬을 다시 로드하여 변경 사항을 반영한 후 다음 명령을 실행하여 컨테이너를 시작합니다.
systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service
이는 간단한 Dockerfile로 수행할 수 있는 작업에 대한 간단한 예일 뿐이지만 최소한의 리소스와 노력으로 단 몇 초 만에 실행할 수 있는 매우 정교한 애플리케이션을 사전 구축할 수 있습니다.
추가 자료: