데이터베이스, 애플리케이션 서버 등을위한 하나의 Dockerfile이있을 때 프로젝트에 속하는 Dockerfile을 어떻게 구성합니까? 소스에서 일종의 계층 구조를 작성합니까? 대기업 프로젝트는 하나의 Dockerfile만으로 구성 할 수 없습니까?
답변
저자 노트
답변이 오래되었습니다. 그림이 더 이상 존재하지 않고 Docker compose 로 대체되었습니다 . 허용 된 답변을 삭제할 수 없습니다 ….
Docker Compose는 프로젝트 계층 구성을 지원합니다. 이제 각 하위 디렉토리에서 Dockerfile을 쉽게 지원할 수 있습니다.
├── docker-compose.yml
├── project1
│ └── Dockerfile
└── project2
└── Dockerfile
원래 답변
각 구성 요소에 대한 Dockerfile을 포함하는 디렉토리를 만듭니다. 예:
컨테이너를 만들 때 디렉토리 이름을 지정하면 Docker가 올바른 Dockerfile을 선택합니다.
답변
에서 (> = 1.8.0) 고정 표시기의 최신 버전 , 당신은이 작업을 수행 할 수 있습니다
docker build -f Dockerfile.db .
docker build -f Dockerfile.web .
큰 저장.
편집 : raksja의 의견에 따라 버전을 업데이트
편집 : @vsevolod의 의견 : 파일 대신 .Dockerfile 확장자 (예 : Prod.Dockerfile, Test.Dockerfile 등)를 제공하여 VS 코드에서 구문 강조를 얻을 수 있습니다.
답변
별도의 디렉토리에서 사용 docker-compose
및 여러Dockerfile
이름을 바꾸지 마십시오
Dockerfile
에Dockerfile.db
또는Dockerfile.web
, 그것은 당신의 IDE에서 지원되지 않을 수 있습니다 당신은 구문 강조를 잃게됩니다.
으로 킹슬리 Uchnor 말했다 여러있을 수 있습니다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
Dockerfile을 빌드 할 때 이전 폴더의 파일이 필요한 경우
위의 솔루션을 계속 사용 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 /
다음은 tldr docker-compose의 빠른 명령입니다 . 자세한 내용 은 공식 문서 를 참조하십시오.
답변
Intellij에서는 도커 파일 이름을 * .Dockerfile로 간단하게 변경하고 파일 형식 * .Dockerfile을 docker 구문에 연결했습니다.
답변
예를 들어, 추상화 레이어를 추가 한이 프로젝트에서 같은 YAML 파일 https://github.com/larytet/dockerfile-generator 처럼 보인다
centos7:
base: centos:centos7
packager: rpm
install:
- $build_essential_centos
- rpm-build
run:
- $get_release
env:
- $environment_vars
짧은 Python 스크립트 / make는 구성 파일에서 모든 Dockerfile을 생성 할 수 있습니다.
답변
여러 도커 파일을 사용해야하는 프로젝트에서 작업 할 때는 각 도커 파일을 별도의 디렉토리에 작성하면됩니다. 예를 들어
app / db /
위의 각 디렉토리에는 dockerfile이 포함됩니다. 응용 프로그램을 빌드 할 때 docker는 모든 디렉토리를 검색하고 모든 dockerfile을 빌드합니다.