基于Docker容器DevOps应用方案

文章目录

  • 环境介绍
    • 1.部署gitlab仓库
    • 2.部署jenkins
    • 3.安装harbo仓库
    • 4.在第四台主机部署docker,并制作tomcat镜像上传至harbor仓库中
    • 5.上传代码到gitlab仓库
    • 6.在jenkins主机安装docker并制作流水线脚本上线项目

环境介绍

主机名 安装软件 ip 系统名
gitlab gitlab 192.168.37.120 centos8
jenkins jenkins+tomcat+docker 192.168.37.130 centos8
Harbor harbor+docker 192.168.37.140 centos8
docker docker 192.168.37.91 rocky linux8

1.部署gitlab仓库

//关闭防火墙和selinux
[root@gitlab ~]# systemctl disable --now firewalld
[root@gitlab ~]# setenforce 0

//配置yum源
[root@gitlab ~]# rm -rf /etc/yum.repos.d/*
[root@gitlab ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2495  100  2495    0     0   3027      0 --:--:-- --:--:-- --:--:--  3024
[root@gitlab ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@gitlab ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@gitlab ~]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@gitlab ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@gitlab ~]# yum makecache 

//安装依赖源
[root@gitlab ~]# yum -y install git wget curl openssh-server openssh-clients postfix cronie perl

[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# systemctl enable postfix
[root@gitlab ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/policycoreutils-python-2.5-34.el7.x86_64.rpm
[root@gitlab ~]# rpm -ivh --nodeps policycoreutils-python-2.5-34.el7.x86_64.rpm --force
warning: policycoreutils-python-2.5-34.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:policycoreutils-python-2.5-34.el7################################# [100%]
   
//下载gitlab包并安装
   
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm

[root@gitlab ~]# rpm -ivh gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm
warning: gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f27eab47: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:gitlab-ce-16.4.1-ce.0.el7        ################################# [100%]
It looks like GitLab has not been configured yet; skipping the upgrade script.

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/

//修改配置文件
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
//修改 /etc/gitlab/gitlab.rb 的第32行、1011行、1115行

##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://192.168.37.120'   //改成自己主机的域名或ip

## Roles for multi-instance GitLab
(省略)
# gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/sockets/socket"
  gitlab_workhorse['auth_backend'] = "http://localhost:8080"   //取消注释

##! Enable Redis keywatcher, if this setting is not present it defaults to true
(省略)
# puma['listen'] = '127.0.0.1'
  puma['port'] = 8080     //取消注释
# puma['socket'] = '/var/opt/gitlab/gitlab-rails/sockets/gitlab.socket'
(省略)

//重载配置文件
[root@gitlab ~]# gitlab-ctl reconfigure
//重启gitlab
[root@gitlab ~]# gitlab-ctl restart
//设置密码
[root@gitlab gitlab]# gitlab-rails console -e production
--------------------------------------------------------------------------------
 Ruby:         ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [x86_64-linux]
 GitLab:       16.4.1 (e6801ed8d44) FOSS
 GitLab Shell: 14.28.0
 PostgreSQL:   13.11
------------------------------------------------------------[ booted in 35.34s ]
Loading production environment (Rails 7.0.6)
irb(main):001:0> user = User.where(id: 1).first
=> #
irb(main):002:0> user.password = '789qwsazxcv'
=> "789qwsazxcv"
irb(main):003:0> user.password_confirmation = '789qwsazxcv'
=> "789qwsazxcv"
irb(main):004:0> user.save!
=> true
irb(main):005:0> exit

2.部署jenkins

//安装依赖包
[root@jenkins ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

//下载tomcat源码包
[root@jenkins ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz

//解压tomcat包到/usr/local
[root@jenkins ~]# tar xf apache-tomcat-9.0.82.tar.gz -C /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.82  bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@jenkins local]# ln -s apache-tomcat-9.0.82 tomcat
[root@jenkins local]# ls
apache-tomcat-9.0.82  bin  etc  games  include  lib  lib64  libexec  sbin  share  src  tomcat

[root@jenkins ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.82.tar.gz  jenkins.war
[root@jenkins ~]# yum -y install java-17-openjdk java-17-openjdk-devel
[root@jenkins ~]# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java)
   2           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java)

Enter to keep the current selection[+], or type selection number: 2

[root@jenkins ~]# java -jar jenkins.war
[root@jenkins ~]# cd /usr/local/tomcat/
[root@jenkins tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@jenkins tomcat]# cd webapps/
[root@jenkins webapps]# /usr/local/tomcat/bin/shutdown.sh
[root@jenkins webapps]# /usr/local/tomcat/bin/startup.sh
[root@jenkins webapps]# ls
jenkins  jenkins.war
//安装jenkins插件时安装所有插件

3.安装harbo仓库

[root@Harbor ~]# curl -SL https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 56.8M  100 56.8M    0     0  1972k      0  0:00:29  0:00:29 --:--:-- 4772k
[root@Harbor ~]# cd /usr/local/bin/docker-compose 
bash: cd: /usr/local/bin/docker-compose: Not a directory
[root@Harbor ~]# cd /usr/local/bin/
[root@Harbor bin]# ls docker-compose 
docker-compose
[root@Harbor bin]# chmod a+x docker-compose 
[root@Harbor bin]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

//下载harbor仓库源码包
[root@Harbor ~]# wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz
[root@Harbor ~]# tar xf harbor-offline-installer-v2.9.1.tgz -C /usr/local

//安装harbor
[root@Harbor ~]# cd /usr/local/harbor/
[root@Harbor harbor]# mv harbor.yml.tmpl harbor.yml
...
hostname: 192.168.37.140
...
[root@Harbor harbor]# ./install.sh
[root@Harbor harbor]# ss -antl
State      Recv-Q     Send-Q          Local Address:Port           Peer Address:Port     Process     
LISTEN     0          128                   0.0.0.0:22                  0.0.0.0:*                    
LISTEN     0          2048                127.0.0.1:1514                0.0.0.0:*                    
LISTEN     0          2048                  0.0.0.0:80                  0.0.0.0:*                    
LISTEN     0          128                      [::]:22                     [::]:*                    
LISTEN     0          2048                     [::]:80                     [::]:*                    
[root@Harbor harbor]# docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED        STATUS                 PORTS                                   NAMES
4fe1af4a85a2   goharbor/harbor-jobservice:v2.9.1    "/harbor/entrypoint.…"   24 hours ago   Up 3 hours (healthy)                                           harbor-jobservice
8355c5b7b29b   goharbor/nginx-photon:v2.9.1         "nginx -g 'daemon of…"   24 hours ago   Up 3 hours (healthy)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
56ce50b43a99   goharbor/harbor-core:v2.9.1          "/harbor/entrypoint.…"   24 hours ago   Up 3 hours (healthy)                                           harbor-core
3d52f79c5633   goharbor/registry-photon:v2.9.1      "/home/harbor/entryp…"   24 hours ago   Up 3 hours (healthy)                                           registry
6efc44a6c948   goharbor/harbor-db:v2.9.1            "/docker-entrypoint.…"   24 hours ago   Up 3 hours (healthy)                                           harbor-db
f9c7018bb4fe   goharbor/harbor-portal:v2.9.1        "nginx -g 'daemon of…"   24 hours ago   Up 3 hours (healthy)                                           harbor-portal
ce16ec2fffe1   goharbor/harbor-registryctl:v2.9.1   "/home/harbor/start.…"   24 hours ago   Up 3 hours (healthy)                                           registryctl
dff36236cdd6   goharbor/redis-photon:v2.9.1         "redis-server /etc/r…"   24 hours ago   Up 3 hours (healthy)                                           redis
634c1e2af5b5   goharbor/harbor-log:v2.9.1           "/bin/sh -c /usr/loc…"   24 hours ago   Up 3 hours (healthy)   127.0.0.1:1514->10514/tcp               harbor-log

基于Docker容器DevOps应用方案_第1张图片

4.在第四台主机部署docker,并制作tomcat镜像上传至harbor仓库中

[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# ls
CentOS-Base.repo
[root@docker yum.repos.d]# curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1919  100  1919    0     0   5436      0 --:--:-- --:--:-- --:--:--  5420
[root@docker yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@docker yum.repos.d]# 
[root@docker yum.repos.d]# cd
[root@docker ~]# 
[root@docker ~]# 
[root@docker ~]# yum -y install docker-ce
[root@docker ~]# mkdir tomcat
[root@docker ~]# cd tomcat/
[root@docker tomcat]# touch dockerfile
[root@docker tomcat]# cat dockerfile 
FROM centos:centos8

MAINTAINER "www.ayachinene.com"

RUN rm -rf /etc/yum.repos.d/* &&\
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo &&\
    sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo &&\
    yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel wget &&\
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat-9.0.82.tar.gz -P /opt/ &&\
    cd /opt/ && tar xf apache-tomcat-9.0.82.tar.gz -C /usr/local && cd /usr/local &&\
    ln -s apache-tomcat-9.0.82 tomcat

CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
[root@docker tomcat]# docker build -t 192.168.37.140/library/tomcat:v0.2 .
[root@docker ~]# vim /etc/docker/daemon.json
[root@docker ~]# cat /etc/docker/daemon.json 
{
        "insecure-registries": ["http://192.168.37.140"]
}
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker login http://192.168.37.140
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@docker ~]# docker push 192.168.37.140/library/tomcat:v0.2
The push refers to repository [192.168.37.140/library/tomcat]
13ca10dfd080: Pushed 
74ddd0ec08fa: Pushed 
v0.2: digest: sha256:d98c07abfa4d2290a53e6aff134978021a3afa6824628cb38b715f57e54ed4fb size: 742

5.上传代码到gitlab仓库

基于Docker容器DevOps应用方案_第2张图片

基于Docker容器DevOps应用方案_第3张图片

[root@gitlab ~]# git config --global user.name "root"
[root@gitlab ~]# git config --global user.email "[email protected]"
[root@gitlab ~]# git clone http://192.168.37.120/root/tomcat-java-demo.git
Cloning into 'tomcat-java-demo'...
warning: You appear to have cloned an empty repository.
[root@gitlab ~]# ls
123                                   policycoreutils-python-2.5-34.el7.x86_64.rpm
anaconda-ks.cfg                       test
gitlab-ce-16.4.1-ce.0.el7.x86_64.rpm  tomcat-java-demo
plpl
[root@gitlab ~]# cd tomcat-java-demo/
[root@gitlab tomcat-java-demo]# ls
[root@gitlab tomcat-java-demo]# ls
db  deploy.yaml  Dockerfile  jenkinsfile  LICENSE  pom.xml  README.md  src
[root@gitlab tomcat-java-demo]# git add .
[root@gitlab tomcat-java-demo]# git commit -m "add README"
[root@gitlab tomcat-java-demo]# git push --set-upstream
Username for 'http://192.168.37.120': root
Password for 'http://[email protected]': 
Enumerating objects: 181, done.
Counting objects: 100% (181/181), done.
Delta compression using up to 4 threads
Compressing objects: 100% (168/168), done.
Writing objects: 100% (181/181), 1.12 MiB | 6.34 MiB/s, done.
Total 181 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), done.
To http://192.168.37.120/root/tomcat-java-demo.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

6.在jenkins主机安装docker并制作流水线脚本上线项目

//安装maven打包工具
[root@jenkins 美女]# yum -y install maven
//选择java版本
[root@jenkins 美女]# alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*  1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java)
 + 2           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java)

Enter to keep the current selection[+], or type selection number: 2
//安装docker
[root@jenkins ~]# curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1919  100  1919    0     0   2993      0 --:--:-- --:--:-- --:--:--  2993
[root@jenkins ~]# cd /etc/yum.repos.d/
[root@jenkins yum.repos.d]# ls
CentOS-Base.repo  docker-ce.repo
[root@jenkins yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@jenkins yum.repos.d]# yum -y install docker-ce
[root@jenkins ~]# systemctl start docker

//制作流水线脚本
pipeline {
    agent any
    stages {
        stage("pull code"){
            steps {
                git 'http://192.168.37.120/root/tomcat-java-demo.git'
            }
        }
        stage("mvn pkgs"){
            steps {
                sh """
                    mvn clean package -Dmaven.test.skip=true
                """
            }
        }
        stage("mkdir tomcat"){
            steps {
                sh """
                    mv /root/.jenkins/workspace/美女/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war /root/tomcat/meinv.war
                """
            }
        }
        stage("docker"){
            steps {
                sh """
                    docker pull 192.168.37.140/library/tomcat:v0.2
                    docker run -d -p 80:8080 --name www -v /root/tomcat/:/usr/local/tomcat/webapps/ -it 192.168.37.140/library/tomcat:v0.2
                """
            }
        }
    }
}

基于Docker容器DevOps应用方案_第4张图片

基于Docker容器DevOps应用方案_第5张图片

你可能感兴趣的:(docker,devops,容器,tomcat,linux,centos,运维)