multiple dockerfiles (각 서비스마다 하나씩)을 사용하여 앱을 제작하고 있습니다. 다음과 같이 내 응용 프로그램의 디렉토리 구조는 다음과 같습니다에서Docker : 하위 디렉토리에 Dockerfile이있을 때 COPY 사용
app
├── dockerfiles
│ ├── webserver
│ │ └── Dockerfile
│ └── database
│ └── Dockerfile
├── public
└── <frontend>
├── db
└── <data>
[...]
├── LICENSE
├── README.md
└── docker-compose.yml
내 웹 서버의 Dockerfile
, 나는 COPY
명령을 사용하여 기존 코드를 복사 할 :
# Dockerfile
COPY ./public /var/www/html
을 그리고 내 docker-compose.yml
를 사용하여 응용 프로그램을 배포 할 파일 : 나는 작업 디렉토리 (app
)에서 docker-compose
를 실행할 때
# docker-compose.yml
version: "3"
services:
webserver:
build: ./dockerfiles/webserver
image: webserver:php-apache
, 나는 FO를 얻을 수 llowing 오류 : 내 웹 서버의 응용 프로그램의 루트에 Dockerfile
, 그래서 그것이 경로에 의해 발생 또는 상황에 맞는 문제를 구축하고 있다고 알고 이동하는 경우
Building webserver
Step 1/2 : FROM php:7.1.11-apache-jessie
---> cb6a5015ad72
Step 2/2 : COPY ./public /var/www/html
Service 'webserver' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder193736188/public: no such file or directory
이 오류가 사라집니다. (응용 프로그램의 루트) 전체 응용 프로그램에 대한
(1)를 사용하여 하나 Dockerfile
, 또는
app
└── Dockerfile
:
그리고이를 알고, 우리는 하나가 문제 두 가지 방법 중 하나를 해결할 수 (2) 각 서비스 (앱의 루트에 있음)에 복수 Dockerfiles
을 사용합니다.
app
├── Dockerfile.webserver
└── Dockerfile.database
이 솔루션은 모든 것을 하나의 dockerfile/용기를 사용하여 best practice (1)하지 않기 때문에 나쁜,이 방식으로 구성 여러 dockerfiles있는 것은 단지 지저분한 외모 (2).
그래서, 내 질문은 :
우리가 어떻게 우리의 원래의 디렉토리 구조를 변경하지 않고이 문제를 해결합니까?
- 어떤 변화가 기본 실행 명령에
docker-compose.yml
때문에, dockerfiles 제작하거나 할 필요가? - 모든 것을 구성하는 더 좋은 방법이 있습니까?
WORKDIR
명령은 어떻게됩니까?
이상적으로, 가장 좋은 방법은 COPY
명령의 범위는 폴더 어디 ...
완벽하게 작동했습니다. 빌드 컨텍스트에서 문제가되어야한다는 것을 알았지 만 솔루션을 찾기가 너무 어려웠습니다. 가까운 장래에 이와 비슷한 상황에 도움이되기를 바랍니다. – CodyAE