기계적 인조 인간

dockerfile을 사용하여 docker 이미지를 작성하는 방법

Automate Developer Workflows and Increase Productivity with Docker Hub: DockTalk

Automate Developer Workflows and Increase Productivity with Docker Hub: DockTalk

차례:

Anonim

Docker 이미지는 응용 프로그램과 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 Docker 컨테이너의 청사진입니다. 컨테이너는 이미지의 런타임 인스턴스입니다.

이 튜토리얼에서는 Dockerfile의 정의, 생성 방법 및 Dockerfile을 사용하여 Docker 이미지를 작성하는 방법에 대해 설명합니다.

Dockerfile이란 무엇입니까

Dockerfile은 이미지를 만들기 위해 사용자가 명령 줄에서 실행할 수있는 모든 명령을 포함하는 텍스트 파일입니다. Docker가 이미지를 빌드하는 데 필요한 모든 지침이 포함되어 있습니다.

Docker 이미지는 실행 가능한 소프트웨어 응용 프로그램을 구성하는 이미지 Dockerfile의 명령어를 나타내는 일련의 파일 시스템 계층으로 구성됩니다.

Docker 파일은 다음 형식을 따릅니다.

# Comment INSTRUCTION arguments

INSTRUCTION 은 대소 문자를 구분하지 않지만 이름에 대문자를 사용하는 것이 관례입니다.

아래는 가장 많이 사용되는 Dockerfile 지침에 대한 간단한 설명이 포함 된 목록입니다.

  • ARG- 이 명령어를 사용하면 빌드시 전달할 수있는 변수를 정의 할 수 있습니다. 기본값을 설정할 수도 있습니다. FROM- 새로운 이미지를 만들기위한 기본 이미지. 이 명령은 Dockerfile에서 주석이 아닌 첫 번째 명령이어야합니다. 이 규칙의 유일한 예외는 FROM 인수에 변수를 사용하려는 경우입니다. 이 경우 FROM 앞에 하나 이상의 ARG 명령어가 올 수 있습니다. LABEL- 설명, 버전, 작성자 등의 이미지에 메타 데이터를 추가하는 데 사용됩니다. 둘 이상의 LABEL 지정할 수 있으며 각 LABEL 명령어는 키-값 쌍입니다. RUN- 이 명령에 지정된 명령은 빌드 프로세스 중에 실행됩니다. 각 RUN 명령어는 현재 이미지 위에 새 레이어를 만듭니다. ADD- 지정된 소스에서 docker 이미지의 지정된 대상으로 파일 및 디렉토리를 복사하는 데 사용됩니다. 소스는 로컬 파일 또는 디렉토리 또는 URL 일 수 있습니다. 소스가 로컬 tar 아카이브 인 경우 Docker 이미지에 자동으로 압축이 풀립니다. 복사-ADD 와 유사하지만 소스는 로컬 파일 또는 디렉토리 일 수 있습니다. ENV- 이 명령을 사용하면 환경 변수를 정의 할 수 있습니다. CMD- 컨테이너를 실행할 때 실행될 명령을 지정하는 데 사용됩니다. Dockerfile에서 하나의 CMD 명령 만 사용할 수 있습니다. ENTRYPOINT - CMD 와 유사 하게이 명령은 컨테이너를 실행할 때 어떤 명령이 실행 될지 정의합니다. WORKDIR- 이 지시문은 RUN , CMD , ENTRYPOINT , COPY ADD 명령어에 대한 현재 작업 디렉토리를 설정합니다. USER- 다음 RUN , CMD , ENTRYPOINT , COPY ADD 명령어를 실행할 때 사용할 사용자 이름 또는 UID 를 설정하십시오. VOLUME- 호스트 시스템 디렉토리를 컨테이너에 마운트 할 수 있습니다. EXPOSE- 컨테이너가 런타임에 청취하는 포트를 지정하는 데 사용됩니다.

파일 및 디렉토리가 이미지에 추가되지 않도록 제외하려면 컨텍스트 디렉토리에 .dockerignore 파일을 작성하십시오. .dockerignore 의 구문은 Git의 .gitignore 파일 중 하나와 유사합니다.

Dockerfile 지침에 대한 자세한 참조 및 자세한 설명은 공식 Dockerfile 참조 페이지를 참조하십시오.

Dockerfile 만들기

Docker 이미지를 만들 때 가장 일반적인 시나리오는 기존 이미지를 레지스트리 (일반적으로 Docker Hub)에서 가져 와서 기본 이미지에서 변경하려는 사항을 지정하는 것입니다. Docker 이미지를 만들 때 가장 일반적으로 사용되는 기본 이미지는 크기가 작고 RAM에서 실행되도록 최적화 되었기 때문에 Alpine입니다.

Docker Hub는 클라우드 기반 레지스트리 서비스로서 다른 기능 중에서 Docker 이미지를 공용 또는 개인 저장소에 유지하는 데 사용됩니다.

이 예에서는 Redis 서버에 대한 Docker 이미지를 만듭니다. 최신 우분투 18.04를 기본 이미지로 사용합니다.

먼저 Dockerfile과 필요한 모든 파일이 포함될 디렉토리를 작성하십시오.

mkdir ~/redis_docker

디렉토리로 이동하여 다음 Dockerfile을 작성하십시오.

cd ~/redis_docker nano Dockerfile 도커 파일

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Dockerfile에서 각 줄의 의미를 설명해 보겠습니다.

  • 1 행에서 기본 이미지를 정의합니다. 3 행에서 시작하는 RUN 명령은 apt 색인을 업데이트하고“redis-server”패키지를 설치하고 apt 캐시를 정리합니다. 명령에 사용 된 명령은 Ubuntu 서버에 redis를 설치하는 데 사용하는 명령과 동일합니다.EXPOSE 명령은 redis 서버가 수신하는 포트를 정의합니다. 마지막 행에서 CMD 명령을 사용하여 기본 명령을 설정합니다 컨테이너가 실행될 때 실행됩니다.

파일을 저장하고 편집기를 닫으십시오.

이미지 구축

다음 단계는 이미지를 만드는 것입니다. 이렇게하려면 Dockerfile이있는 디렉토리에서 다음 명령을 실행하십시오.

docker build -t linuxize/redis.

-t 옵션은 이미지 이름을 지정하고 선택적으로 'username / imagename: tag'형식의 사용자 이름과 태그를 지정합니다.

빌드 프로세스의 결과는 다음과 같습니다.

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

빌드 프로세스가 완료되면 새 이미지가 이미지 목록에 나열됩니다.

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

컨테이너 실행

이미지가 생성되었으므로 다음을 실행하여 이미지에서 컨테이너를 실행합니다.

docker run -d -p 6379:6379 --name redis linuxize/redis

-d 옵션은 Docker에게 컨테이너를 분리 모드로 실행하도록 지시하고 -p 6379:6379 옵션은 포트 6379를 호스트 시스템에 게시하고 --name redis 옵션은 컨테이너 이름을 지정합니다. 마지막 인수 인 linuxize/redis 는 컨테이너를 실행하는 데 사용되는 이미지의 이름입니다.

컨테이너가 시작되면 다음 명령을 사용하여 실행중인 모든 컨테이너를 나열하십시오.

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

모든 것이 제대로 작동하는지 확인하려면 redis-cli 를 사용하여 도커 컨테이너에 연결해야합니다.

redis-cli ping

redis 서버는 PONG 응답해야합니다.

결론

이 튜토리얼에서는 Dockerfile을 사용하여 이미지를 빌드하는 기본 사항 만 다룹니다. Dockerfile 작성 방법 및 권장 모범 사례에 대한 자세한 내용은 Dockerfile 작성 모범 사례를 참조하십시오.

도커