我可以设置一个带有docker image的gitlab-runner,如下所示: -
stages:
- build
- test
- deploy
image: laravel/laravel:v1
build:
stage: build
script:
- npm install
- composer install
- cp .env.example .env
- php artisan key:generate
- php artisan storage:link
test:
stage: test
script: echo "Running tests"
deploy_staging:
stage: deploy
script:
- echo "What shall I do?"
environment:
name: staging
url: https://staging.example.com
only:
- master
它可以通过构建阶段和测试阶段,我相信docker镜像/容器已准备好部署。从谷歌,我观察它可能会使用“docker push”继续下一步,例如推送到AWS ECS或Gitlab的某个地方。其实我想明白,如果我可以将它直接推送到另一个远程服务器(例如通过scp)?
答案 0 :(得分:2)
docker镜像是使用docker build
命令时构建的不同图层的组合。它重用现有的图层并为combination of layers提供一个名称,即您的图像名称。它们通常存储在/var/lib/docker
。
通常,所有必要的数据都存储在您的系统上,是的。但是不建议直接将这些图层复制到另一台机器上,我不确定这是否能正常工作。 Docker建议您使用“docker registry”。在远程服务器上安装自己的注册表非常简单,因为注册表也可以作为容器运行(请参阅docs)。
如果您有敏感数据,我建议您坚持使用docker团队提出的解决方案并使用公共DockerHub注册表或自己的注册表。
您正在使用GitLab。 GitLab provides its own registry。您可以将图像推送到自己的Gitlab注册表并从远程服务器中提取。您的远程服务器只需要针对您的注册表进行身份验证,您就完成了。例如,GitLab的CI可以在每次推送到主分支时直接构建并将图像推送到您自己的注册表。您可以找到许多示例in the docs。