У меня есть следующая файловая структура:
my_repo
├── dataflow
. ├── pipelines
. │ ├── pipeline1
. │ │ ├── Dockerfile
│ │ ├── pipeline1_module.py
│ │ └── main.py
│ └── pipeline2
│ ├── Dockerfile
│ ├── pipeline2_module.py
│ └── main.py
└── common
├── common_module1.py
└── common_module2.py
Каждый Dockerfile выглядит примерно так:
FROM python:3.11-slim
WORKDIR /my_repo
# do some stuff
.
.
.
COPY . /my_repo
Чтобы создать новый докер, используя сборку облака Google, я запускаю:
cd my_repo/dataflow/pipelines/pipeline1
gcloud builds submit . --tag=$IMAGE
Моя проблема в том, что с помощью команды dockerfile pipeline1 копируется только содержимое папки COPY . /my_repo.
Какие изменения мне нужно сделать, чтобы скопировать всю папку dataflow или, что еще лучше, каталог pipeline1 вместе с каталогом common (все, кроме pipeline2)?
В CLI докера этого можно добиться, используя флаг docker build -f, однако я не уверен, как сделать то же самое в сборке облака Google.
заранее спасибо






Если вы хотите сделать что-то похожее на -f в Docker, аналогичная альтернатива есть и в Google Cloud Build.
Вы можете создать файл cloudbuild.yaml в том же каталоге, что и файл Dockerfile. Если вы хотите запустить его только из моего репо, вы можете иметь такую конфигурацию:
steps:
# Docker Build
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t',
'$REGION-docker.pkg.dev/$PROJECT_ID/my-docker-repo/myimage',
'-f', 'pipelines/pipeline1/Dockerfile',
'.']
# Docker Push
- name: 'gcr.io/cloud-builders/docker'
args: ['push',
'$REGION-docker.pkg.dev/$PROJECT_ID/my-docker-repo/myimage']
Затем вы можете вызвать его из моего репо, используя:
gcloud builds submit . --config pipelines/pipeline1/cloudbuild.yaml
Я также попробовал это локально, и это сработало. :)