从Docker Compose文件中的Gitlab注册表中提取图像
我想在我自己的服务器上部署一个docker堆栈。我已经编写了一个从Docker Compose文件中的Gitlab注册表中提取图像,docker,docker-compose,gitlab,Docker,Docker Compose,Gitlab,我想在我自己的服务器上部署一个docker堆栈。我已经编写了一个.gitlab ci.yml文件,该文件当前在我的堆栈中构建图像,并将它们推送到我的gitlab注册表: build: stage: build image: docker:stable services: - docker:dind before_script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
.gitlab ci.yml
文件,该文件当前在我的堆栈中构建图像,并将它们推送到我的gitlab注册表:
build:
stage: build
image: docker:stable
services:
- docker:dind
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker info
script:
- docker build -t $DOCKER_IMAGE1_TAG -f dir1/Dockerfile ./dir1
- docker push $DOCKER_IMAGE1_TAG
- docker build -t $DOCKER_IMAGE2_TAG -f dir2/Dockerfile ./dir2
- docker push $DOCKER_IMAGE2_TAG
# Need to ssh into the server, transfer over docker-stack file and run docker swarm deploy
deploy:
stage: deploy
environment:
name: production
image: trion/ng-cli-karma
before_script:
- apt-get update -qq && apt-get install -y -qq sshpass
- eval $(ssh-agent -s)
我正在努力寻找一种方法,在我自己的服务器上使用我编写的docker compose.yml
文件运行docker deploy
命令,该文件成功地从我的gitlab注册表中提取图像。我想我可以使用sshpass
将ssh
复制到我的服务器中,然后复制docker compose.yml
文件并从那里运行docker deploy
,但我不确定什么是允许我的服务器访问现在位于我的gitlab
注册表中的映像的最佳方式:
build:
stage: build
image: docker:stable
services:
- docker:dind
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker info
script:
- docker build -t $DOCKER_IMAGE1_TAG -f dir1/Dockerfile ./dir1
- docker push $DOCKER_IMAGE1_TAG
- docker build -t $DOCKER_IMAGE2_TAG -f dir2/Dockerfile ./dir2
- docker push $DOCKER_IMAGE2_TAG
# Need to ssh into the server, transfer over docker-stack file and run docker swarm deploy
deploy:
stage: deploy
environment:
name: production
image: trion/ng-cli-karma
before_script:
- apt-get update -qq && apt-get install -y -qq sshpass
- eval $(ssh-agent -s)
这是我的docker compse
文件的一部分:
version: "3.2"
services:
octeditor:
image: image # how to set this to the image in my container registry?
ports:
- "3000:3000"
networks:
- front-tier
deploy:
replicas: 1
update_config:
parallelism: 1
failure_action: rollback
placement:
constraints:
- 'node.role == manager'
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
如何从gitlab注册表中提取图像?这是通过gitlab ci在远程服务器上创建docker部署的首选方法吗?我最近也遇到了同样的困难,最后我发现解决方案只是在私有注册表中插入指向映像的链接,就像我使用gitlab时的情况一样
version: "3.2"
services:
octeditor:
image: registry.gitlab.com/project-or-group/project-name/image-name:tag
ports:
- "3000:3000"
networks:
- front-tier
您需要在服务器上进行docker登录到GitLab,以便服务器上的docker可以从GitLab中提取映像。您需要运行的命令是
docker login registry.example.com
,谢谢您的回复。这听起来很复杂,要从gitlab ci中获得正确答案(不过我可能错了)。在.gitlab-ci.yml文件中有这样的例子吗?我似乎在Gitlab站点上找不到一个。我共享的有一个.Gitlab ci.yml
文件的示例。您不需要使用该文件。在服务器上运行docker compose命令之前,只需对服务器上的gitlab注册表运行docker login
命令。