>기술 주변기기 >IT산업 >dockerfile으로 이미지를 만드는 방법

dockerfile으로 이미지를 만드는 방법

Christopher Nolan
Christopher Nolan원래의
2025-02-18 12:36:13796검색

How to Build an Image with the Dockerfile 응용 프로그램 구축, 종속성 및 서비스 설치, 자동 배포 등 - 모두 DockerFile로 시작합니다. Dockerfile의 구문, 기본에서 복잡성까지, Docker 이미지를 구축 할 때 모범 사례를 검토합시다.

이 안내서는 Docker에 Dockerfile이 제공 할 애플리케이션에 대한 최소화 된 Linux (기본 이미지)를 선택하도록 안내하고 선택한 도구 세트 및 특정 구성과 함께 제공되어 자체 Linux 배포를 효과적으로 구축하기 위해이 배포판이 옳습니다. 응용 프로그램 실행에 적합합니다.

키 포인트

Docker는 필요한 모든 바이너리, 런타임 라이브러리, 백엔드 도구, 운영 체제 조정 및 서비스를 통해 응용 프로그램을 포장하여“응용 프로그램을 구축, 전달 및 실행할 수 있습니다 즉시 전달되고 자동으로 배포됩니다.

DockerFile은 Docker에 이미지를 구축하기위한 지침이 포함 된 일반 텍스트 파일로 응용 프로그램을 구축하고 종속성 및 서비스 설치 및 자동 배포를위한 시작점입니다. DockerFile의 구문은 Apache 구성 파일의 구문과 유사하며 하나의 명령어로 처리됩니다. How to Build an Image with the Dockerfile Dockerfile은 Docker가 애플리케이션을 전달할 기본 이미지 (예 : 최소화 된 Linux)를 선택하도록 지시하고 선택한 도구 및 특정 구성 세트가 제공되어 응용 프로그램을 실행하는 데 적합한 사용자 정의 Linux 배포를 효과적으로 만듭니다.

dockerfile을 사용하면 특정 도구 및 라이브러리를 선택하고 설치하고, 환경 변수를 설정하고, 파일 및 디렉토리를 추가하고, 캐시 문제를 처리하는 등 컨테이너에 필요한 모든 것이 있는지 확인할 수 있습니다.

Docker 빌드 명령은 Dockerfile의 지침을 기반으로 이미지를 빌드하는 데 사용되며 Docker Run 명령은 생성 된 이미지가있는 대화식 터미널을 시작하는 데 사용됩니다.

    Docker를 선택하는 이유
  • Docker를 사용하면 "어디에 있든 응용 프로그램을 구축, 배달 및 실행할 수 있습니다." 즉, 모든 바이너리 및 런타임 라이브러리, 백엔드 도구, 운영 체제 튜닝 및 응용 프로그램이 실행하는 데 필요한 특정 서비스를 통해 응용 프로그램을 패키지 할 수 있으며 자동으로 배송 및 배포 할 수 있습니다.
  • Docker 구현 소프트웨어 컨테이너 기술로 인해이를 가능하게합니다. 여기서는 그 뒤에있는 세부 사항을 다루지 않지만 Docker, 소프트웨어 컨테이너 및 Docker, 컨테이너 및보다 안전한 소프트웨어 전달에 대한 작동 방식에 대해 더 많이 읽을 수 있습니다.
  • Docker 설치 시작하기 전에 로컬 컴퓨터에 있든 원격 서버에 Docker를 설치해야합니다.
  • 운 좋게도, 최신 버전의 Docker (이 글을 쓰는 시점에서 1.12 버전)는 설치 프로세스를 매우 매끄럽게 만들고 Windows, MacOS 및 Linux에 대한 간단하고 이해하기 쉬운 가이드를 얻을 수 있습니다.

    dockerfile

    Docker에서 이미지를 작성하려면 먼저이 빌드의 지침을 설정해야하며

    컨텍스트 는 DockerFile이라는 일반 텍스트 파일 (나중에 자세한 내용)을 설정해야합니다. 이 파일에는 Apache 구성 파일과 유사한 구문이 있습니다. 한 줄 당 명령 및 해당 매개 변수는 모든 지침이 순서대로 처리됩니다. 댓글은 # 문자와 공간으로 시작합니다. 마지막으로, DockerFile이 있으면 Docker Build 명령이 이미지를 작성하여 나중에 자세히 설명합니다.

    dockerfile을 쓰기 시작하기 전에 작업 공간을 설정합니다. 우리는 홈 디렉토리에서 my_image라는 디렉토리를 만들고 작업 디렉토리로 사용하고 dockerfile을 그 안에 넣을 것입니다.

    이제 우리는 이미지 만들기를 시작할 준비가되었습니다. 기본 미러를 선택하십시오 이미지를 만들 때 대부분의 경우 하나의 시작점 (즉)를 사용합니다. 이것은 공식 우분투, MySQL, WordPress 또는 Docker Hub에서 사용할 수있는 기타 이미지 일 수 있습니다. 이전에 만든 이미지를 사용할 수도 있습니다. 노트

    : 자신의 핵심 도구 및 디렉토리 구조가 포함 된 Docker의 최소 이미지 (스크래치라고 함)를 사용하여 자신의 기본 이미지를 만들 수 있습니다. 여기서는이 과정을 다루지 않지만 Docker 웹 사이트에서 기본 이미지 생성에 대한 안내서를 참조하십시오.

    예를 들어, 최소화 된 데비안 분포로 시작하려면 Dockerfile에 다음을 추가 할 수 있습니다.

    는 Dockerfile을 작성할 때 사용하는 첫 번째 지침이어야합니다. 이미지 이름의 끝에있는 version_name을 추가하여 기본 이미지의 특정 버전을 사용할 수도 있습니다. 예를 들면 :
    mkdir ~/my_build
    cd ~/my_build
    touch Dockerfile

    위 코드에서는 "SID"데비안 (불안정한 배포)을 사용하고 있습니다. 이는 특정 버전의 Ruby 또는 Python 통역사, MySQL 버전 등이 필요한 경우에도 중요합니다. 이러한 도구의 공식 기본 이미지를 사용하는 경우. 현재이 안내서에서는 기본 (안정적인) 데비안 이미지를 고수합니다.

    관리자를 지정하고 메타 데이터를 추가하십시오 관리자가 누구인지 지정하도록 선택할 수 있습니다. Lucero Del Alba를 귀하의 이름이나 사람 또는 구성을 담당하는 팀으로 교체 할 수 있습니다.

    이것은 필요하지 않지만 레이블 지시문을 사용하여 일부 메타 데이터를 추가 할 수도 있습니다.이 지침을 사용하여 도커 검사 명령을 사용하여 이미지를 확인할 때 나중에 사용할 수 있습니다.

    이 기능에 대한 자세한 내용은 Docker Object 태그를 참조하십시오.

    자신만의 분포를 만듭니다

    이 시점에서, 우리는 컨테이너에 예상 조치를 수행하는 데 필요한 모든 것을 갖도록 거울에 포함 할 도구와 라이브러리를 선택합니다. 이 튜토리얼이 끝나면 실제로 Linux 배포를 구축하는 데 매우 가까운 작업을 수행합니다. 일부 컨테이너 (예 : PostgreSQL 데이터베이스를 실행하는 컨테이너)는 백그라운드에서 실행되도록 설계되었습니다. 그러나 컨테이너에서 특정 작업을 수행하려면 콘솔이 종종 필요하므로 기본 이미지가 최소 GNU 도구 만 번들로 만들기 때문에 몇 가지 추가 도구가 필요할 수 있습니다.

    캐시 문제 문제 해결 이미지에 추가 패키지를 설치하려고 할 때 캐싱 문제가 거의 확실합니다. 이는 기본 이미지에 캐시 된 메타 데이터와 데이터 변경을 자주 추출하는 실시간 저장소가 있기 때문입니다.

    Debian 기반 배포판에서 다음 명령을 추가 할 수 있습니다. .

    기본 도구 설치 코드 편집기, 로케일, git 또는 tmux와 같은 도구 - 이제 이미지에 번들로 제공되도록 나중에 필요한 모든 것을 설치해야합니다.

    우리는 한 줄에 하나를 설치합니다 :

    우리는이 모든 것을 한 줄로 설치할 수 있지만 나중에 패키지를 추가하거나 제거하려면 전체 프로세스를 다시 실행해야합니다. 따라서 여기서 모범 사례는 Docker의 캐시로부터 혜택을받을 수 있도록 라인 당 하나의 패키지를 설치하는 것입니다.

    또한 간단하게 유지하십시오. 빌드 시간과 이미지 크기를 증가시킬 수 있으므로 도구를 "경우에만"설치하고 싶지 않습니다.

    이 파일을 별도의 파일로 스크립트 하고이 파일을 빌드에 추가하고 실행할 수도 있습니다.

    청소 거울을 깔끔하고 가능한 한 작게 만들려면 설치 시퀀스의 끝에서 정리하는 것이 가장 좋습니다.
    # 设置基础镜像
    FROM debian
    또한 데비안을 선택했기 때문에 apt-get을 사용하고 있지만 기본 이미지 배포에 해당 명령을 사용하십시오.

    자신의 애플리케이션을 제공 이 환경을 구축하는 모든 목적은 응용 프로그램을 원활하게 전달하고 실행할 준비를하는 것입니다. 이미지에 파일, 디렉토리 및 원격 URL의 내용을 추가하기 위해 ADD 지시 사항을 사용합니다.

    그러나 파일을 추가하기 전에 파일을 적절한

    컨텍스트에 넣어야합니다. 작업을 단순화하기 위해, 우리는 모든 것을 앞서 언급 한 My_Build 디렉토리와 Dockerfile 자체에 넣었습니다.

    앱과 이미지에 넣고 싶은 모든 것을 사용한다고 가정하면 ~/my_build (App.py 및 lib.py가 하위 디렉토리 앱/)에 다음 파일이 있습니다.

    <.> 우리는 컨테이너의 / 루트 디렉토리에 .bashrc 및 .profile 스크립트를 추가하여 컨테이너에서 쉘을 시작할 때 실행하고 앱 /의 내용을 컨테이너의 / 앱 / 디렉토리에 복사 할 수 있도록합니다.

    우리는 다음 명령을 추가합니다 :
    mkdir ~/my_build
    cd ~/my_build
    touch Dockerfile
    환경을 설정 마지막으로, 우리는 시스템과 응용 프로그램 수준 모두에서 필요한 환경 변수를 설정합니다.

    많은 사람들이 기본 데비안 캐릭터를 사용하여 그것을 사용하지만, 국제적인 청중을 목표로하기 때문에 UTF-8 터미널을 갖는 방법을 살펴 보겠습니다. 우리는 이전에 로컬 패키지를 설치 했으므로 이제 우리가해야 할 일은 문자 세트를 생성하고 적절한 Linux 환경을 설정하기 만하면됩니다.

    응용 프로그램이 비밀번호 및 경로를 교환하기 위해 일부 환경 변수를 설정해야 할 수도 있습니다. Dockerfile은이를 정확하게 수행하도록 ENV 지침을 제공합니다

    컨테이너를 시작할 때 명령 줄에서 환경 변수를 전달할 수도 있으며, 이는 일부 민감한 정보 (예 : 비밀번호)를 공유하는 데 편리 할 수 ​​있습니다.
    # 设置基础镜像
    FROM debian
    전체 dockerfile 물론 원하는대로 dockerfile을 조정해야하지만, 그 가능성을 이해하기를 바랍니다.

    이것은 완전한 파일입니다 :

    거울을 구축하십시오 my_build 디렉토리 내부에서 Docker 빌드 명령을 사용하여 -t 플래그를 이름으로 새 이미지를 "태그"로 전달합니다. . DockerFile이 현재 디렉토리에 있고 소위 "컨텍스트", 즉 해당 위치에 존재할 수있는 나머지 파일이 있음을 나타냅니다.

    이것은 각 "단계"가 우리의 dockerfile의 지침 인 긴 출력을 생성합니다. 다음은 잘린 출력입니다 :

    거울을 나열하십시오 Docker Image 명령을 사용하여 이미지를 나열 할 수 있습니다.

    이것은 새로 만든 My_Image 및 우리가 다운로드 한 기타 기본 이미지를 출력합니다.
    # 设置基础镜像
    FROM debian:sid

    컨테이너를 시작하십시오 마지막으로 새로 생성 된 대화 형 터미널을 시작하려면 Docker Run 명령을 사용합니다.

    다음 단계 나는 dockerfile의 모든 가능성을 소개하지 않았습니다. 특히, 나는 당신이 서비스를 실행하고 컨테이너를 링크 할 수 있도록 포트를 노출시키는 방법을 검토하지 않았다. 그리고 다른 유용한 기능.
    # 作者
    MAINTAINER Lucero del Alba
    우리는 이것들을 향후 기사에서 소개 할 것입니다. 현재 다음 리소스를 확인할 수 있습니다.

    Docker 웹 사이트에서 :

    dockerfile 참조

    Dockerfile을 작성하기위한 모범 사례

    SitePoint에서 :

      Docker, 컨테이너 및보다 안전한 소프트웨어 전달 이해
    • docker 서브 채널 모든 Docker 관련 기사
    • Dockerfile 를 사용하여 이미지를 작성하는 방법에 대한 FAQ dockerfile을 사용하여 Docker 이미지를 구축하는 것이 중요합니까?
    • dockerfile은 사용자가 명령 줄에서 호출하여 이미지를 조립할 수있는 모든 명령을 포함하는 텍스트 문서입니다. dockerfile을 사용하면 Docker에서 이미지를 구축하는 과정이 단순화됩니다. 이를 통해 프로세스를 자동화 할 수있어보다 효율적이고 오류가 발생하기 쉽습니다. DockerFile은 또한 이미지를 구축하는 방법에 대한 명확한 버전화 문서를 제공하므로 다른 개발자가 작업을 이해하고 사용하거나 수정할 수 있습니다.
    • dockerfile을 사용하여 빌드 프로세스를 최적화하는 방법은 무엇입니까?
    dockerfile은 빌드 프로세스를 최적화하는 다양한 방법을 제공합니다. 가장 효과적인 방법 중 하나는 다단계 빌드를 사용하는 것입니다. 이를 통해 Dockerfile의 여러 문장을 사용할 수 있습니다. 교육의 각각은 다른 기초를 사용할 수 있으며 각 교육은 새로운 건설 단계를 시작합니다. 선택적으로 아티팩트를 한 단계에서 다른 단계로 복사 할 수 있으며, 최종 이미지에 나타나고 싶지 않은 모든 것을 남겨 둘 수 있습니다.

    dockerfiles를 작성하기위한 모범 사례는 무엇입니까?

    dockerfiles를 작성하기위한 몇 가지 모범 사례가 있습니다. 먼저, 미러 크기를 작게 유지하기 위해 불필요한 패키지를 설치하지 않아야합니다. 둘째, 다단계 빌드를 사용하여 빌드 프로세스를 최적화하십시오. 셋째, 각 dockerfile은 단일 응용 프로그램을 나타냅니다. 여러 응용 프로그램이있는 경우 여러 개의 DockerFiles를 사용해야합니다. 마지막으로 .dockerignore 파일을 사용하여 이미지에 포함되지 않아야 할 파일 및 디렉토리를 제외해야합니다.

    dockerfile을 디버그하는 방법은 무엇입니까?

    dockerfile은 이미지를 빌드하고 쉘 명령으로 실행하여 디버깅 할 수 있습니다. 빌드가 실패하면 Docker는 문제를 식별하는 데 도움이되는 오류 메시지를 반환합니다. run 명령을 사용하여 dockerfile을 디버깅하는 데 도움이되는 명령을 실행할 수도 있습니다.

    dockerfile에서 환경 변수를 사용할 수 있습니까?

    예, Dockerfile에서 환경 변수를 사용할 수 있습니다. Env Directive는 환경 변수를이 값으로 설정합니다. 이 값은 빌드 단계에서 모든 후속 지침의 환경에 있으며 많은 지침에서 인라인으로 대체 할 수도 있습니다.

    호스트에서 Docker 이미지로 파일을 복사하는 방법은 무엇입니까?

    사본 지시문을 사용하여 호스트에서 Docker 이미지로 새 파일을 복사 할 수 있습니다. 호스트의 소스에서 Docker 이미지의 대상으로 파일을 복사하십시오.

    Docker 이미지에 포트를 노출시키는 방법은 무엇입니까?

    노출 지시문을 사용하여 Docker 컨테이너에게 런타임에 지정된 네트워크 포트를 듣도록 통지 할 수 있습니다. 그러나 이것은 실제로 포트를 게시하지 않습니다. 포트를 게시하려면 Docker Run 명령에서 -p 플래그를 사용해야합니다.

    Docker 이미지에서 작업 디렉토리를 설정하는 방법은 무엇입니까?

    workDir 지시문을 사용하여 DockerFile에서 후속 실행, CMD, EntryPoint, Copy 및 Add의 작업 디렉토리를 설정할 수 있습니다.

    Docker 이미지에서 명령을 실행하는 방법은 무엇입니까?

    run 지시문을 사용하여 Docker 이미지에서 실행 명령을 실행할 수 있습니다. 이것은 현재 이미지 위의 새 계층에서 모든 명령을 실행하고 결과를 제출합니다.

    Docker 이미지에 대한 기본 명령을 지정하는 방법은 무엇입니까?

    CMD 지시문을 사용하여 실행 컨테이너의 기본값을 제공 할 수 있습니다. 여기에는 실행 파일이 포함될 수 있거나 실행 파일을 생략 할 수 있으며,이 경우 EntryPoint 지시문을 지정해야합니다.

    이 개정 된 출력은 원래 이미지 형식을 유지하고 기사의 의미에 대한 중요한 변화를 피하면서 독창성을위한 문장과 단락을 다시 바르십시오

위 내용은 dockerfile으로 이미지를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.