programing

도커: 프로젝트의 여러 도커 파일

lastcode 2023. 8. 20. 11:13
반응형

도커: 프로젝트의 여러 도커 파일

데이터베이스에 대한 Docker 파일이 하나 있고 응용 프로그램 서버에 대한 Docker 파일이 하나 있는 경우 프로젝트에 속한 Docker 파일을 어떻게 구성합니까?소스에서 일종의 계층 구조를 생성합니까?대규모 엔터프라이즈 프로젝트는 Docker 파일 하나로 구성될 수 없습니까?

도커의 최신 버전(>=1.8.0)에서는 다음을 수행할 수 있습니다.

docker build -f Dockerfile.db .
docker build -f Dockerfile.web .

큰 세이브.

편집: raksja의 설명에 따라 버전 업데이트

편집: @vsevolod의 코멘트: 파일을 제공하여 VS 코드에서 구문 강조를 얻을 수 있습니다.Docker 파일 확장자(이름 대신)(예: Prod).도커 파일, 테스트.도커 파일 등

사용 및 다중Dockerfile별도의 디렉토리에

이름을 다음으로 변경하지 않음Dockerfile.db또는Dockerfile.webIDE에서 지원되지 않을 수 있으며 구문 강조 표시가 손실됩니다.

킹슬리 우흐노르가 말했듯이, 당신은 복수를 가질 수 있습니다.Dockerfile디렉토리당 하나씩, 빌드하려는 항목을 나타냅니다.

나는 갖고 싶어요.docker각 응용 프로그램과 해당 구성을 저장하는 폴더입니다.다음은 데이터베이스가 있는 웹 응용 프로그램의 프로젝트 폴더 계층 구조 예입니다.

docker-compose.yml
docker
├── web
│   └── Dockerfile
└── db
    └── Dockerfile

docker-compose.yml예:

version: '3'
services:
  web:
    # will build ./docker/web/Dockerfile
    build: ./docker/web
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  db:
    # will build ./docker/db/Dockerfile
    build: ./docker/db
    ports:
      - "3306:3306"
  redis:
    # will use docker hub's redis prebuilt image from here:
    # https://hub.docker.com/_/redis/
    image: "redis:alpine"

docker-compose명령줄 사용 예:

# The following command will create and start all containers in the background
# using docker-compose.yml from current directory
docker-compose up -d

# get help
docker-compose --help

Docker 파일의 빌드 컨텍스트의 일부로 상위 폴더의 파일이 필요한 경우

위의 솔루션을 사용하여 다음과 같은 작업을 수행할 수 있습니다.Dockerfile등의 디렉토리에docker/web/Dockerfile당신이 필요한 것은 빌드를 설정하는 것입니다.context당신의docker-compose.yml다음과 같이:

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./docker/web/Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - .:/code

파일 계층은 다음과 같습니다.

config-on-root.ini
docker-compose.yml
docker
└── web
    ├── Dockerfile
    └── some-other-config.ini

./docker/web/Dockerfile다음과 같은 컨텍스트에서 원하는 파일에 액세스할 수 있습니다.

FROM alpine:latest

COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /

또한 빌드 컨텍스트에는 지정된 디렉토리의 모든 파일이 포함됩니다.다음을 사용해야 합니다..dockerignore빌드하는 동안 시간을 절약하기 위해 원하지 않는 큰 파일 또는 디렉터리를 로드하지 않도록 하는 파일입니다.

다음은 tldr docker-compose의 몇 가지 빠른 명령입니다.자세한 내용은 공식 문서를 참조하십시오.

저자 노트

이 답변은 구식입니다.그림이 더 이상 존재하지 않으며 도커 컴포지트로 대체되었습니다.승인된 답변은 삭제할 수 없습니다.

Docker Composite는 프로젝트 계층 구조 작성을 지원합니다.이제 각 하위 디렉터리에서 도커 파일을 쉽게 지원할 수 있습니다.

├── docker-compose.yml
├── project1
│   └── Dockerfile
└── project2
    └── Dockerfile

원답

각 구성요소에 대한 Docker 파일이 들어 있는 디렉토리를 만듭니다.예:

컨테이너를 빌드할 때 디렉터리 이름만 지정하면 도커가 올바른 도커 파일을 선택합니다.

Intellij에서 저는 도커 파일의 이름을 *로 간단히 변경했습니다.도커 파일 및 관련 파일 형식 *.도커 파일에서 도커 구문으로.

추상화 계층을 추가합니다. 예를 들어, 이 프로젝트의 https://github.com/larytet/dockerfile-generator 와 같은 YAML 파일은 다음과 같습니다.

centos7:
    base: centos:centos7
    packager: rpm
    install:
      - $build_essential_centos 
      - rpm-build
    run:
      - $get_release
    env:
      - $environment_vars

짧은 Python 스크립트/make는 구성 파일에서 모든 Docker 파일을 생성할 수 있습니다.

여러 개의 도커 파일을 사용해야 하는 프로젝트에서 작업할 때는 각 도커 파일을 별도의 디렉토리에 만들기만 하면 됩니다.예를 들어.

app/ db/

위의 각 디렉터리에는 해당 도커 파일이 포함됩니다.응용프로그램이 빌드될 때 도커는 모든 디렉토리를 검색하고 모든 도커 파일을 빌드합니다.

언급URL : https://stackoverflow.com/questions/27409761/docker-multiple-dockerfiles-in-project

반응형