7.Docker容器化代码上线
[toc]
代码上线图示
传统代码上线
容器化代码上线
容器化代码上线示例
- 使用docker-compose启动gitlab和jenkins
- 部署harbor私有镜像仓库
- Jenkins从Gitlab上拉代码
- 使用docker部署web页面
环境准备
主机 | 内网IP | 外网IP | 应用 | 环境 |
---|---|---|---|---|
docker01 | 172.16.1.81 | 10.0.0.81 | Gitlab Jenkins | docker部署容器 |
docker02 | 172.16.1.82 | 10.0.0.82 | Harbor | 私有镜像仓库 |
docker03 | 172.16.1.83 | 10.0.0.83 | web | 部署代码 |
部署harbor私有镜像仓库
1 | # 下载Harbor |
登陆Harbor页面
新建Jenkins项目
使用docker部署gitlab
1 | # 连接私有镜像仓库 |
创建项目
优化gitlab(docker-compose不用编辑)
1 | # 配置文件优化 |
使用docker部署jenkins
1 | # 拉取jenkins的镜像 |
登陆Jenkins
修改Jenkins密码
编辑密码并保存
1 | # 查看Jenkins密码 |
优化Jenkins
1 | # 安装Jenkins插件包 |
模拟开发人员上传代码
新建代码文件
写入代码
Jenkins从Gitlab拉取代码并部署
拉取代码
获取代码仓库地址
1 | # 进入Jenkins服务器 |
web服务器连接私有镜像仓库
1 | # 连接私有镜像仓库 |
部署到容器中并制作成镜像上传到Harbor
手动部署
Jenkins制作镜像并上传到Harbor
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 编辑Dockerfile
cat > /var/jenkins_home/workspace/docker/Dockerfile <<EOF
FROM nginx:alpine
ADD index.html /usr/share/nginx/html/
EOF
# 进入代码存放目录
cd /var/jenkins_home/workspace/docker/
# 构建镜像
docker build -t 10.0.0.82/jenkins/web:1 .
# 将镜像推送到私有仓库
docker push 10.0.0.82/jenkins/web:1在web服务器部署docker镜像
1
2
3
4
5# 远程连接web设备运行镜像
ssh 10.0.0.83 'docker stop web'
ssh 10.0.0.83 'docker rm web'
ssh 10.0.0.83 "docker pull 10.0.0.82/jenkins/web:1"
ssh 10.0.0.83 "docker run --name web -p80:80 -d 10.0.0.82/jenkins/web:1"
Jenkins自动化代码上线
新建一个项目
配置项目
填写代码仓库地址
配置Jenkins容器的私钥
编写Jenkins的job
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# 编辑Dockerfile
cat > $WORKSPACE/Dockerfile <<EOF
FROM nginx:alpine
ADD index.html /usr/share/nginx/html/
EOF
# 进入代码存放目录构建镜像
cd $WORKSPACE && docker build -t 10.0.0.82/jenkins/web:$GIT_COMMIT .
# 将镜像推送到私有仓库
docker push 10.0.0.82/jenkins/web:$GIT_COMMIT
# 远程连接到web服务器
## 停止当前"web"容器
ssh 10.0.0.83 'docker stop web'
## 删除当前"web"容器
ssh 10.0.0.83 'docker rm web'
## 拉取web镜像
ssh 10.0.0.83 "docker pull 10.0.0.82/jenkins/web:$GIT_COMMIT"
## 运行web容器
ssh 10.0.0.83 "docker run --name web -p80:80 -d 10.0.0.82/jenkins/web:$GIT_COMMIT"立刻构建项目
使用docker-compose自动化部署CICD
编辑docker-compose文件
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# vim docker-compose.yml
version: '3.3'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://10.0.0.81'
gitlab_rails['gitlab_shell_ssh_port'] = '2222'
prometheus['enable'] = false
prometheus['monitor_kubernetes'] = false
prometheus_monitoring['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
grafana['enable'] = false
ports:
- '80:80'
- '443:443'
- '2222:22'
volumes:
- '/data/gitlab/config:/etc/gitlab'
- '/data/gitlab/logs:/var/log/gitlab'
- '/data/gitlab/data:/var/opt/gitlab'
shm_size: '256m'
jenkins:
image: jenkins/jenkins
container_name: jenkins
restart: always
ports:
- '8080:8080'
- '50000:50000'
volumes:
- /etc/docker/daemon.json:/etc/docker/daemon.json
- /data/jenkins:/var/jenkins_home
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- /root/.docker/:/root/.docker/
- /root/.ssh/:/root/.ssh/
user: root
privileged: true
links:
- gitlab运行
1
2# 运行docker-compose
docker-compose up总结
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# gitlab使用非22端口拉代码
gitlab_rails['gitlab_shell_ssh_port'] = '2222'
# gitlab代码地址根据docker容器的id(固定)
external_url 'http://10.0.0.81'
# gitlab启动慢,配置文件优化
prometheus['enable'] = false
prometheus['monitor_kubernetes'] = false
prometheus_monitoring['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
grafana['enable'] = false
# Jenkins想要拉取gitlab代码,固定公钥
-v /root/.ssh/:/root/.ssh/
# Jenkins要使用docker in docker
docker run --privileged
docker-compose privileged: true
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
# Jenkins要永久登录harbor
-v /etc/docker/daemon.json:/etc/docker/daemon.json
-v /root/.docker/:/root/.docker/ ## config.json 主要记录harbor的登录信息
{
"auths": {
"10.0.0.82": {
"auth": "YWRtaW46MTIz"
}
}
}
# Jenkins需要使用root用户启动
docker run --user root
或者 docker-compose user: root
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 奥利奥の麦旋风!