linux自动部署docker,自动部署到 Linux Docker 服务器

自动部署到 Linux Docker 服务器

功能介绍

持续集成可自动部署项目到 Linux Docker 服务器,步骤如下:

在云计算(比如腾讯云)的网页控制台创建 SSH 密钥对,把私钥录入 CODING 凭据管理,把公钥加载到服务器。也可以使用命令手动创建,把私钥 id_rsa 录入 CODING 凭据管理,把公钥 id_rsa.pub 的内容复制到服务器的 ~/.ssh/authorized_keys,参考文档:《凭据管理》;

fdc839637826de2aa1e11dd91f45cdf0.png

be1fd40d5748f3185fe0fc8cbcc3e240.png

722a282eeb53d54f36ad0e07c1a2558b.png

dac8cd23ffda46f2b391b3c521f4ed26.png

获取 Docker 仓库的用户名和密码(CODING 制品库一键创建访问令牌即可获得),录入持续集成的环境变量中;

2fa187219a2714670ba036c1e687d0c6.png

b421de9195a3f4e592adca8ef83d24f4.png

在持续集成中使用下述 Jenkinsfile:构建 Docker 镜像并上传到仓库(CODING 制品库),参考文档:《构建 Docker 类型制品》;

执行 SSH 登录服务器,拉取 Docker 镜像;

Jenkinsfilepipeline {

agent any

stages {

stage('检出') {

steps {

checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],

userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])

}

}

stage('构建') {

steps {

echo '构建中...'

script {

// 请修改 dockerServer、dockerPath、imageName

dockerServer = 'codes-farm-docker.pkg.coding.net'

dockerPath = '/laravel-demo/laravel-docker'

imageName = "${dockerServer}${dockerPath}/laravel-demo:1.0.0"

def customImage = docker.build(imageName)

// 推送 Docker 镜像到仓库

docker.withRegistry("https://${dockerServer}", CODING_ARTIFACTS_CREDENTIALS_ID) {

customImage.push()

}

}

}

}

stage('部署') {

steps {

echo '部署中...'

script {

// 声明服务器信息

def remote = [:]

remote.name = 'web-server'

remote.allowAnyHosts = true

remote.host = '106.54.86.239'

remote.port = 22

remote.user = 'ubuntu'

// 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改

withCredentials([sshUserPrivateKey(credentialsId: "c4af855d-402a-4f38-9c83-f6226ae3441c", keyFileVariable: 'id_rsa')]) {

remote.identityFile = id_rsa

// SSH 登录到服务器,拉取 Docker 镜像

// 请在持续集成的环境变量中配置 DOCKER_USER 和 DOCKER_PASSWORD

sshCommand remote: remote, sudo: true, command: "apt-get install -y gnupg2 pass"

sshCommand remote: remote, command: "docker login -u ${env.DOCKER_USER} -p ${env.DOCKER_PASSWORD} $DOCKER_SERVER"

sshCommand remote: remote, command: "docker pull ${imageName}"

sshCommand remote: remote, command: "docker stop web | true"

sshCommand remote: remote, command: "docker rm web | true"

sshCommand remote: remote, command: "docker run --name web -d ${imageName}"

}

}

}

}

}

}

Docker Compose

Docker Compose 的代码和上述类似,仅有少许不同:

sshCommand remote: remote, sudo: true, command: "apt-get install -y gnupg2 pass"

sshCommand remote: remote, command: "docker login -u ${env.DOCKER_USER} -p ${env.DOCKER_PASSWORD} $DOCKER_SERVER"

sshCommand remote: remote, sudo: true, command: "mkdir -p /var/www/site/"

sshCommand remote: remote, sudo: true, command: "chmod 777 /var/www/site/"

sshPut remote: remote, from: 'docker-compose.yml', into: '/var/www/site/'

sshCommand remote: remote, command: "cd /var/www/site/ && echo IMAGE=${imageName} > .env && echo APP_KEY=${env.APP_KEY} >> .env && echo DB_CONNECTION=sqlite >> .env"

sshCommand remote: remote, command: "cd /var/www/site/ && docker-compose down --remove-orphans"

sshCommand remote: remote, command: "cd /var/www/site/ && docker-compose up -d --no-build"

docker-compose.yml 代码:

version: '2.1'

services:

web:

env_file: .env

build: .

image: ${IMAGE:-laravel-demo:dev}

ports:

- "80:80"

links:

- redis

redis:

image: "redis:5"

20200813

42cc6c983cc91e74fcbc075dbd58c498.png最近更新

感谢反馈有用

感谢反馈没用

在阅读中是否遇到以下问题?

内容找不到

内容没更新

描述不清楚

链接有错误

步骤不完整

代码或图片缺失

您希望我们如何改进?

提交取消

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值