Docker容器化代码上线实践

Docker容器化代码上线实践

启动gitlab和jenkins存在的问题

1)gitlab拉代码地址
2)Jenkins如何拉gitlab代码
3)Jenkins公钥如何永久保存
4)Jenkins拉下来代码之后,需要将代码打到docker镜像中,jenkins这台容器如何执行docker命令
5)Jenkins中,如何登录harbor(永久登录harbor)

环境准备

主机 IP 角色
docker01 10.0.0.101 gitlab、jenkins
harbor 10.0.0.100 harbor私有镜像仓库
docker02 10.0.0.102 web

使用docker部署gitlab

gitlab基础操作TP

# 在本机准备gitlab工作目录
mkdir -p /data/docker/gitlab/{config,data,logs}
以上在本机建立的3个目录是为了gitlab容器通过挂载本机目录启动后可以映射配置文件,数据文件,日志文件到本机,然后后续就可以直接在本机查看和编辑了,不用再进容器操作。

# 启动gitlab
docker run \
--name gitlab \
--hostname gitlab \
--restart always \
-p 4443:443 -p 8888:80 -p 2222:22 \
-v /data/docker/gitlab/config:/etc/gitlab \
-v /data/docker/gitlab/data:/var/opt/gitlab \
-v /data/docker/gitlab/logs:/var/log/gitlab \
-d gitlab/gitlab-ce:latest 

# 优化配置
vim /data/docker/gitlab/config/gitlab.rb
## 在最后填写优化
### 关闭普罗米修斯
prometheus['enable'] = false
prometheus['monitor_kubernetes'] = false
prometheus_monitoring['enable'] = false
### 告警关闭
alertmanager['enable'] = false
### 关闭前端node功能
node_exporter['enable'] = false
### 关闭redis功能
redis_exporter['enable'] = false
### 关闭postgre功能
postgres_exporter['enable'] = false
### 图形展示
grafana['enable'] = false

# 重启gitlab
docker restart gitlab

# 查看密码
[root@docker01 ~]# cat /data/docker/gitlab/config/initial_root_password
CetMIMU29ScEIGHM1jshlVLjKGHKdS+uZGt84VyC1hI=

image-20230911193356533

修改git拉代码地址

# 进入容器
[root@docker01 docker]# docker exec -it gitlab bash

# 查看启动状态
root@gitlab:/# gitlab-ctl status 

# 修改配置文件(IP)
## external_url配置项增加IP地址和端口配置
##端口是80,即容器里面的地址,而不是宿主机外面的8888,因此external_url中的端口80也可以不写
root@gitlab:/# cd /etc/gitlab/
root@gitlab:/etc/gitlab# vi gitlab.rb 
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://10.0.0.101'

# 修改配置文件(代码地址)
root@gitlab:/etc/gitlab# vi gitlab.rb
gitlab_rails['gitlab_ssh_host'] = '10.0.0.101'    
## 这条需要自己添加
gitlab_rails['gitlab_shell_ssh_port'] = '2222'

# 在容器里面重新加载配置
gitlab-ctl reconfigure

# 重启服务
gitlab-ctl restarth 

# SSH
ssh://git@10.0.0.101:2222/root/hello-word.git

# HTTP
http://10.0.0.101/root/hello-word.git

image-20230912165228511

修改gitlab密码

image-20230912175759591

使用docker部署jenkins

docker run \
--name jenkins \
--restart always \
-p 8080:8080 \
-p 50000:50000 \
--user=root \
--privileged=true \
-v /root/.ssh:/root/.ssh \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /home/jenkins_home:/var/jenkins_home \
-v /root/.docker/config.json:/root/.docker/config.json \
-d jenkins/jenkins

# docker in docker必备项(容器内可以使用docker,容器内与宿主机具有相同权限)
--privileged=true

# harbor登录验证保存文件
/root/.docker/config.json

# 查看密码
[root@docker02 ~]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
437a889d68894b4b8424a6a76e5914f2

image-20230911194009806

image-20230911194919271

在容器内生成ssh公钥并与宿主机进行免密

# 进入容器
[root@docker01 docker]# docker exec -it jenkins bash

# 生成密钥
root@363c6d9d7d4e:/# ssh-keygen

# 查看密钥
root@363c6d9d7d4e:/# ls ~/.ssh
id_rsa  id_rsa.pub

# 查看公钥
root@363c6d9d7d4e:/# cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCSfXXEIA/punotkFKfgzeSTG/jgsjw/0YKQbsYvI8WBhWW4XcL17r3MAs4xjiQBzAVazHAQ6UM55BkWxgvpNh9dSjYMrcqoXx9SNPVSsBcNmGCr7/t0+NyJQPhoF4KULiLQMKIAxYZMZnIqWx+CWjbedCUY+eX0FWGusukZBycQoDJAPIxUGLoN2mgza9rudDlLB7vruCG2VanFGYECyCgFMBGow87niYFSrgiNBQ5X4GAtEhIfCZHpupnHB4NXT35DHMVBdQG9gh8+gbXqy4TlSBXGq7LbufP1ImXT36lr4gtu3r6MGPFZ2JurmM3SzrHA3T+Em3y1/9THjOFojigj7K0/49GnFCkVCeLGkXoi1BRl11BWVIfn7EOtbBtJxRubh/MI05/x50SMU0irD6k1wkZc89x85WA23A4fRWiImsZyI2Q+xsh93Uy2jcglcqHP2bTYfOU66MchMnFR6zAJrPI3TQQ8OEgUrLg3Y+2HgubjHn2ejxDJkzQLD/HKE0= root@72b2dd4ead18

# 与宿主机进行免密
root@363c6d9d7d4e:/# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.101

# 尝试连接宿主机
root@363c6d9d7d4e:/# ssh root@10.0.0.101
输入 yes

gitlab配置公钥

image-20230912211847272

jenkins下拉代码

root@363c6d9d7d4e:/# git clone ssh://git@10.0.0.101:2222/root/code.git
Cloning into 'code'...
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 20 (delta 4), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (4/4), done.

root@363c6d9d7d4e:/code# ls -l
total 16
-rw-r--r-- 1 root root 363 Sep 12 20:06 index.html
-rw-r--r-- 1 root root 227 Sep 12 20:06 main.js
-rw-r--r-- 1 root root 220 Sep 12 20:06 src.js
-rw-r--r-- 1 root root 928 Sep 12 20:06 style.css

配置jenkins自由风格

image-20230912211633034

image-20230912211642735

image-20230912211650746

cd $WORKSPACE
cat > Dockerfile << EOF
FROM nginx:alpine 
COPY index.html  main.js  style.css /usr/share/nginx/html/ 
EOF
docker build -t web:v1 .
docker save web:v1 > /tmp/web.tgz
scp /tmp/web.tgz root@172.16.1.101:/tmp/
ssh 172.16.1.101 docker load < /tmp/web.tgz
ssh 172.16.1.101 docker run -d -p 81:80 --name web web:v1

image-20230912211914984

image-20230912211944753

访问网页

10.0.0.101:81

image-20230912220300772

jenkins结合Harbor上传代码

# 进入Jenkins容器
[root@docker01 ~]# docker exec -it jenkins bash

# 下拉代码
root@363c6d9d7d4e:/# git clone ssh://git@10.0.0.101:2222/root/code.git

# 修改代码
root@363c6d9d7d4e:/# cd code/
root@363c6d9d7d4e:/code# ls -l
total 12
-rw-r--r-- 1 root root 363 Sep 13 18:53 index.html
-rw-r--r-- 1 root root 227 Sep 13 18:53 main.js
-rw-r--r-- 1 root root  65 Sep 13 18:53 style.css
root@363c6d9d7d4e:/code# cat > style.css << EOF
> body{                 
  background-color: pink;
}
#demo2{
    margin-top: 50px;
}
> EOF

# 添加一些信息
root@363c6d9d7d4e:/code# git config --global user.email "you@example.com"
root@363c6d9d7d4e:/code# git config --global user.name "Your Name"

# 上传代码
root@363c6d9d7d4e:/code# git add .
root@363c6d9d7d4e:/code# git commit -m 'v1'
root@363c6d9d7d4e:/code# git tag -a 'v1' -m 'v1'
root@363c6d9d7d4e:/code# git push --all
root@363c6d9d7d4e:/code# git push --tag

配置jenkins自由风格

打开参数化构建并输入tag

image-20230913192030819

与上方设置相同

image-20230913192105939

重点:修改之前脚本内容

image-20230913192158772

cd $WORKSPACE
cat > Dockerfile << EOF
FROM nginx:alpine 
COPY index.html  main.js  style.css /usr/share/nginx/html/ 
EOF
docker build -t web:$tag .
docker login -u admin -p 123 10.0.0.100
docker tag web:$tag 10.0.0.100/wordpress/web:${GIT_COMMIT}
docker push 10.0.0.100/wordpress/web:${GIT_COMMIT}
ssh 10.0.0.101 "docker rm -f web"
ssh 10.0.0.101 "docker run --name web -p 80:80 -d 10.0.0.100/wordpress/web:${GIT_COMMIT}"
---------------## 永久登录harbor方法----------------
docker login -u admin -p 123 10.0.0.100

image-20230913192442819

访问网站

image-20230913192421345

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇