웹사이트 검색

Dockerfile을 사용하여 사용자 지정 Docker 이미지를 자동으로 빌드하고 구성하는 방법 - 3부


이 튜토리얼에서는 Apache 서비스가 설치된 Ubuntu를 기반으로 사용자 정의 Docker 이미지를 빌드하는 방법에 중점을 둡니다. 전체 프로세스는 Dockerfile을 사용하여 자동화됩니다.

Docker 이미지는 Dockerfiles라는 텍스트 파일에서 자동으로 빌드될 수 있습니다. Docker 파일에는 Docker 이미지를 생성하고 구성하는 데 사용되는 단계별 지침 또는 명령이 포함되어 있습니다.

요구사항

  • Docker 설치 및 Docker 컨테이너 조작 알아보기 - 1부
  • Docker 컨테이너에서 애플리케이션 배포 및 실행 – 2부

기본적으로 Docker 파일에는 요구 사항에 따라 특정 컨테이너를 구축하고 구성하기 위한 다양한 지침이 포함되어 있습니다. 다음 지침은 가장 많이 사용되며 그 중 일부는 필수입니다.

  1. FROM=Docker 파일의 첫 번째 명령으로 필수입니다. 새 이미지를 빌드할 기본 이미지를 가져오도록 Docker에 지시합니다. 태그를 사용하여 빌드할 정확한 이미지를 지정하세요.
Ex: FROM ubuntu:20.04
  1. MAINTAINER=빌드 이미지 작성자
  2. RUN=이 명령은 여러 줄에서 사용할 수 있으며 Docker 이미지가 생성된 후 모든 명령을 실행합니다.
  3. CMD=Docker 이미지가 시작되면 명령을 실행합니다. Dockerfile에서는 하나의 CMD 명령어만 사용하세요.
  4. ENTRYPOINT=CMD와 동일하지만 이미지의 기본 명령으로 사용됩니다.
  5. EXPOSE=컨테이너가 실행될 때 네트워크 포트를 수신하도록 지시합니다. 컨테이너 포트는 기본적으로 호스트에서 연결할 수 없습니다.
  6. ENV=컨테이너 환경 변수를 설정합니다.
  7. 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로 수행할 수 있는 작업에 대한 간단한 예일 뿐이지만 최소한의 리소스와 노력으로 단 몇 초 만에 실행할 수 있는 매우 정교한 애플리케이션을 사전 구축할 수 있습니다.

추가 자료: