Docker镜像通过私有仓库进行发布(如阿里云), 发布命令为:
1 2 3 4
| docker login -u username -p password registry.demo.com docker build -t registry.demo.com/repos/$CI_PROJECT_NAME:latest . docker push registry.demo.com/repos/$CI_PROJECT_NAME:latest
|
其中 username
是用户名, password
是密码, registry.demo.com
是私有镜像库地址,
$CI_PROJECT_NAME
是GitLab-CI内置变量, 会自动替换为项目的名称, 这里也可以直接写死, 如
docker build -t registry.demo.com/repos/image-name:latest .
image-name
, 就是要构建的镜像名称, latest
是TAG标签, repos
是仓库的空间名称
在下面的例子中, 首先通过composer安装依赖库, 然后通过artifacts传递给构建任务, 构建完镜像将镜像发布到私有库,
部署时通过拉取最新的镜像库, 进行部署
项目的deploy目录中, 放置一些配置文件, 如Dockerfile
, docker-compose.yml
等, 通过rsync
同步到部署服务器上, 用于部署所需
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| image: zacksleo/docker-composer:1.1
before_script: - 'which ssh-agent || ( apk update && apk add openssh-client)' - apk add rsync - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" > ~/deploy.key - chmod 0600 ~/deploy.key - ssh-add ~/deploy.key - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - export APP_ENV=testing
stages: - prepare - build - deploy
variables: COMPOSER_CACHE_DIR: "/cache/composer" DOCKER_DRIVER: overlay
installing-dependencies: stage: prepare script: - composer install --prefer-dist -n --no-interaction -v --no-suggest artifacts: name: "vendor" untracked: true expire_in: 60 mins paths: - $CI_PROJECT_DIR/vendor test-image: stage: build image: docker:latest services: - docker:dind dependencies: - installing-dependencies script: - docker login -u username -p password registry.demo.com - docker build -t registry.demo.com/repos/$CI_PROJECT_NAME:latest . - docker push registry.demo.com/repos/$CI_PROJECT_NAME:latest testing-server: stage: deploy image: alpine variables: DEPLOY_SERVER: "server-host" script: - cd deploy - rsync -rtvhze ssh . root@$DEPLOY_SERVER:/data/$CI_PROJECT_NAME --stats - ssh root@$DEPLOY_SERVER "docker login -u username -p password registry.demo.com" - ssh root@$DEPLOY_SERVER "cd /data/$CI_PROJECT_NAME && docker-compose stop && docker-compose rm -f && docker-compose pull && docker-compose up -d" - ssh root@$DEPLOY_SERVER "docker exec -i $CI_PROJECT_NAME chown www-data:www-data web/assets" - ssh root@$DEPLOY_SERVER "docker exec -i $CI_PROJECT_NAME ./yii migrate/up --interactive=0"
|

相关文档
Using Docker Build