1、安装docker

文档:https://docs.docker.com/engine/install/centos/

1、卸载之前的老版本

  1. sudo yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-engine

2、设置安装的源

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3、安装

sudo yum install -y docker-ce docker-ce-cli containerd.io

4、启动

sudo systemctl start docker

5、设置开机自启动

sudo systemctl enable docker

2、安装nginx

1、yum安装nginx

yum install -y nginx

2、配置域名解析指向8010端口

1、通过命令找到配置文件位置

nginx -t

2、进入配置文件目录

cd /etc/nginx

3、找到nginx.config

  • 这里可以使用远程连接工具(FinalShell)通过进行直接修改文件
  • FinalShell点击去安装
  • 配置下面的配置到nginx上

    #http的转发配置
    server
    {
      listen 80;#监听端口
      server_name jenkins.自己的域名;#域名
      location / {
              proxy_pass http://localhost:8010;
              proxy_set_header Host $host;
              proxy_set_header Cookie $http_cookie;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_connect_timeout 600;
              proxy_read_timeout 600;
              proxy_send_timeout 600;
          }
    }
    #监听443 端口转到http上
    server
    {
        listen 443;#监听端口
        server_name jenkins.自己的域名;#域名
        rewrite ^/(.*) http://$server_name$request_uri? permanent;
    }
    

    4、检查配置文件是否有错误

    nginx -t
    

    5、没错误就重新加载配置文件

    nginx -s reload
    

    3、安装jenkins和配置jenkins

    1、docker方法安装Jenkins

    1、拉取镜像

    docker pull jenkinsci/blueocean
    

    2、创建容器镜像

  • 映射8010端口

    docker create --name jenkins -u root -p 8010:8080 \
    --privileged=true -v /mydata/jenkins_home:/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/local/apache-maven-3.5.4:/var/local/apache-maven-3.5.4 \
    -v /usr/local/java/jdk1.8.0_221:/var/local/jdk1.8.0_221 \
    -v /home/jenkins:/home docker.io/jenkinsci/blueocean
    

    3、查询容器内容

  • 查询所有的运行实例

    docker ps -a
    

    4、启动jenkins

    docker start jenkins
    

    5、这一步不用做(如果想进入运行的容器)

    docker exec -it jenkins /bin/bash
    

    2、jenkins内部安装

    1、访问nginx配置的域名

    http://jenkins.自己的域名
    image.png

    2、查询密码

  • 从docker日志中获取

    docker logs jenkins
    

    image.png

    3、选择默认安装

    等待安装完成
    image.png

    4、设置用户名

    image.png

    3、安装插件

    1、安装中文插件

    1、安装中文

    image.png

    2、安装Local插件

    image.png

    3、安装完插件勾选重新启动

  • 就变中文了

image.png

2、安装SSH插件

1、系统设置-插件管理-安装完勾选重启

image.png
image.png

2、配置远程服务器SSH账号密码

  • 找到Manage
  • image.png
  • 从此处添加
  • image.png
  • 添加服务器的账号密码
  • image.png
  • image.png

    3、安装maven插件

    1、搜索插件-安装完一样重启

    image.png

    4、maven全局工具配置

    1、系统管理-全局工具配置

    image.png

    2、添加自动安装jdk

    image.png

  • 配置oracle账号密码

  • 此处是我自己的账号密码请改用你自己的

    812297736@qq.com
    QWERasdf1234@
    

    3、刷新一下

    image.png

    4、自动安装maven

    image.png

    5、配置ssh服务器地址

    1、找到位置

    image.png
    image.png

    2、配置服务器ssh访问地址

    image.png

    4、Docker开启远程访问

    1、修改docker.service文件

    1、找到文件/usr/lib/systemd/system/docker.service

    image.png

    2、修改之前先备份该文件

    cp docker.service docker.service.bk
    

    3、打开文件进行修改docker.service

    主要是在[Service]这个部分,将其中ExecStart=参数进行替换为如下文件

  • 注意 这边有些版本 不是ExecStart=/usr/bin/dockerd 记得要复制之前的

  • 最关键的不同是添加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ```shell

    ExecStart=/usr/bin/dockerd -H fd:// —containerd=/run/containerd/containerd.sock

    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
此处默认2375为主管理端口,[unix://var/run/docker.sock](https://link.jianshu.com/?t=unix%3A%2F%2Fvar%2Frun%2Fdocker.sock)用于本地管理)
<a name="P6gmN"></a>
### 4、最终效果
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12971636/1642840058334-5864bee1-0f5e-4f34-b2a4-44cb76ea880a.png#clientId=u28795d9b-c5ea-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=194&id=ueaa22e63&margin=%5Bobject%20Object%5D&name=image.png&originHeight=388&originWidth=1402&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85850&status=done&style=none&taskId=u971b8563-efad-4c9b-a53f-00f0974d681&title=&width=701)
<a name="I9Cjz"></a>
### 5、将管理地址写入/etc/profile
<a name="JoSJT"></a>
#### 1、写入到文件
```shell
echo 'export DOCKER_HOST=tcp://0.0.0.0:2375' >> /etc/profile

2、重新加载

source /etc/profile

3、docker重新读取配置文件,重启docker服务

1、重新读取配置文件

systemctl daemon-reload

2、重启docker服务

systemctl restart docker

2、配置安全密码访问

  • 正式环境可以配置服务器的安全组访问白名单

可以访问https://www.cnblogs.com/-wenli/p/13555833.html

5、Docker开启私有仓库

1、开启镜像服务器

  • 本地运行镜像registry:2,暴露端口5000
  • 挂载容器中/var/lib/registry目录到宿主机/mydata/docker/registry目录

    docker run -d -v /data/docker/registry:/var/lib/registry \
    -p 5000:5000 --name myregistry registry:2
    

    2、测试本地镜像

    1、对运行的容器,进行打包

    1、docker ps查看运行着的容器

    [root@iZbp1fx32c6dtkcurx061oZ system]# docker ps
    CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS          PORTS                                                                                                                                                                                                                                             NAMES
    18ec5607533e   registry:2            "/entrypoint.sh /etc…"   4 seconds ago   Up 3 seconds    0.0.0.0:5000->5000/tcp, :::5000->5000/tcp                                                                                                                                                                                                         myregistry
    16af5653d18f   jenkinsci/blueocean   "/sbin/tini -- /usr/…"   14 hours ago    Up 31 minutes   50000/tcp, 0.0.0.0:8010->8080/tcp, :::8010->8080/tcp                                                                                                                                                                                              jenkins
    d7f1190451ca   rabbitmq:management   "docker-entrypoint.s…"   14 hours ago    Up 30 minutes   0.0.0.0:4369->4369/tcp, :::4369->4369/tcp, 0.0.0.0:5671-5672->5671-5672/tcp, :::5671-5672->5671-5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, :::15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp, :::25672->25672/tcp, 15691-15692/tcp   rabbitmq
    72d774fc48e5   mysql:8.0             "docker-entrypoint.s…"   14 hours ago    Up 31 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                                                                                                                                                                              mysql
    09b243eec8c7   redis                 "docker-entrypoint.s…"   14 hours ago    Up 30 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                                                                                                                                         redis
    

    2、我们这里对 mysql8.0进行一个打包

    命令

  • docker commit [options] 容器ID [repository[:tag]]

    • docker commit提交容器副本使之成为一个新的镜像
    • docker commit -m=‘提交的描述信息’ -a=‘作者’容器ID要创建的目标镜像名:[标签名]
      docker commit -a 'small red' -m 'test' 72d774fc48e5 red/mysql8.0:1
      

      3、docker images查看新打包的镜像

  • red/mysql8.0就是我们新打包 ```shell [root@iZbp1fx32c6dtkcurx061oZ system]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE red/mysql8.0 1 ce7775d1efeb 4 seconds ago 519MB jenkinsci/blueocean latest 54b040dd343a 15 hours ago 582MB jenkins/jenkins latest 1c520775844c 32 hours ago 442MB rabbitmq management aaeff1fdd203 2 days ago 254MB mysql 8.0 5b4c624c7fe1 2 days ago 519MB redis latest 7614ae9453d1 4 weeks ago 113MB registry 2 b8604a3fe854 2 months ago 26.2MB

<a name="DNPL7"></a>
#### 4、docker tag 把镜像归入某一个仓库
docker tag : 标记本地镜像,将其归入某一仓库<br />语法:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
```shell
docker tag red/mysql8.0:1 localhost:5000/red/mysql8.0:1

5、重新查看新归档的镜像

[root@iZbp1fx32c6dtkcurx061oZ system]# docker images
REPOSITORY                    TAG          IMAGE ID       CREATED              SIZE
red/mysql8.0                  1            ce7775d1efeb   About a minute ago   519MB
localhost:5000/red/mysql8.0   1            ce7775d1efeb   About a minute ago   519MB
jenkinsci/blueocean           latest       54b040dd343a   15 hours ago         582MB
jenkins/jenkins               latest       1c520775844c   32 hours ago         442MB
rabbitmq                      management   aaeff1fdd203   2 days ago           254MB
mysql                         8.0          5b4c624c7fe1   2 days ago           519MB
redis                         latest       7614ae9453d1   4 weeks ago          113MB

6、docker push 将本地的镜像上传到镜像仓库

  • 远程有些服务器可能需要登录(需要登录的要先登陆到镜像仓库)
    • docker login —username=用户名 registry.cn-hangzhou.aliyuncs.com
  • 语法:docker push [OPTIONS] NAME[:TAG]
  • OPTIONS说明:
    • —disable-content-trust :忽略镜像的校验,默认开启
  • 此处我们只开通本地私有仓库,不对外开放
  • 想用远程的可以搞个阿里云的仓库

    docker push localhost:5000/red/mysql8.0:1
    

    注意:如果不想在Java项目中写Docker相关配置,请转下一篇文章Java项目自动部署shell脚本
    或者直接点击https://www.yuque.com/smallred-pvgul/djy/sskzb2

    6、配置项目Dockerfile,pom.xml

    1、配置Dockerfile文件

    1、创建Dockerfile文件

    image.png

    2、填写内容

    FROM java:8
    VOLUME /tmp
    ADD seat-user-1.0.0.jar seat-user.jar
    RUN bash -c 'touch /seat-user.jar'
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/seat-user.jar"]
    

    2、配置pom.xml文件

  • 在pom文件中添加如下内容

    • 在build标签下添加finalName
    • plugins标签中添加plugin
      <build>
         <finalName>${project.artifactId}-${project.version}</finalName>
         <plugins>
             <plugin>
                 <groupId>com.spotify</groupId>
                 <artifactId>docker-maven-plugin</artifactId>
                 <version>1.0.0</version>
                 <!--docker镜像相关的配置信息-->
                 <configuration>
                     <!--镜像名,这里用工程名-->
                     <imageName>${project.artifactId}</imageName>
                     <!--Dockerfile文件所在目录-->
                     <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
                     <!--TAG,这里用工程版本号-->
                     <imageTags>
                         <imageTag>${project.version}</imageTag>
                     </imageTags>
                     <registryUrl>localhost:5000</registryUrl>
                     <!--<dockerHost>47.98.199.60:2375</dockerHost>-->
                     <pushImage>true</pushImage>
                     <imageName>localhost:5000/${project.artifactId}:${project.version}</imageName>
                     <!--构建镜像的配置信息-->
                     <resources>
                         <resource>
                             <targetPath>/</targetPath>
                             <directory>${project.build.directory}</directory>
                             <include>${project.artifactId}-${project.version}.jar</include>
                         </resource>
                     </resources>
                 </configuration>
             </plugin>
         </plugins>
      </build>
      

      7、配置Jenkins任务

      1、创建一个自由风格任务

      image.png

      2、配置git

      1、添加项目地址

      image.png

      2、添加一个用户名和账号

      image.png

      3、配置分支

      image.png

      3、添加构建命令

      1、添加构建命令

      image.png

      2、添加Maven构建任务,调用顶层Maven目标

      1、添加任务

      image.png

      2、添加命令

  • 我们的项目结构是父子结构的

image.png

clean package -f seat-service/seat-user/pom_docker_registry.xml -DskipTests docker:build

3、添加SSH站点并填写命令

1、窗口效果

image.png

2、具体命令

  • 命令包括停止容器 docker stop
  • 删除容器 docker rm
  • 然后删除镜像 docker rmi
  • 然后开始运行镜像docker run
  • 最后删除没有标签的 镜像 ```shell echo “检查docker镜像运行和删除”

    !/bin/bash

    result=$(docker ps | grep “seat-user”) if [[ “$result” != “” ]] then echo “执行:docker stop seat-user” docker stop seat-user fi result1=$(docker ps -a | grep “seat-user”) if [[ “$result1” != “” ]] then echo “执行 docker rm seat-user” docker rm seat-user fi result2=$(docker images | grep “seat-user”) if [[ “$result2” != “” ]] then echo “执行 rmi localhost:5000/seat-user:1.0.0” docker rmi localhost:5000/seat-user:1.0.0 fi

echo “开始运行镜像” docker run —name seat-user -p 8086:8086 -idt localhost:5000/seat-user:1.0.0 docker logs —tail 100 seat-user echo “删除没有tag标签的镜像” docker images | grep none | awk ‘{print $3}’ | xargs docker rmi

<a name="pYNBr"></a>
# 8、运行测试
<a name="nTVPv"></a>
## 1、点击运行
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12971636/1642929260372-fb7003bc-e4e4-4de3-b75a-2415b998e218.png#clientId=u635d1e9f-4dd4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=438&id=ua9620a13&margin=%5Bobject%20Object%5D&name=image.png&originHeight=876&originWidth=2844&originalType=binary&ratio=1&rotation=0&showTitle=false&size=188520&status=done&style=none&taskId=u7ae7c652-0ffa-4d35-8247-43c9e8139c9&title=&width=1422)
<a name="fvIzK"></a>
## 2、生成一个任务
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12971636/1642929289971-b37160c7-899e-4d5b-bd44-158a454411df.png#clientId=u635d1e9f-4dd4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=697&id=ua5987931&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1394&originWidth=2776&originalType=binary&ratio=1&rotation=0&showTitle=false&size=234702&status=done&style=none&taskId=u23d0408d-fbf9-44ef-8c89-e1bdac77861&title=&width=1388)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/12971636/1642929300955-d2fa9bfc-866d-48b6-bf01-10c80c8eb1db.png#clientId=u635d1e9f-4dd4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=548&id=u95ff7ebd&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1096&originWidth=2272&originalType=binary&ratio=1&rotation=0&showTitle=false&size=245781&status=done&style=none&taskId=u0061de32-57a0-4350-81e1-fababb5cfb1&title=&width=1136)
<a name="nBGm3"></a>
## 3、运行成功
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12971636/1642929332811-a9b4646e-decf-4ac4-86be-10800f760738.png#clientId=u635d1e9f-4dd4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=606&id=u14253a38&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1212&originWidth=2854&originalType=binary&ratio=1&rotation=0&showTitle=false&size=378933&status=done&style=none&taskId=uc1ba026a-eba7-4148-8665-a9d4346e3e6&title=&width=1427)
<a name="fJ5T9"></a>
## 4、docker images
```shell
[root@iZbp1fx32c6dtkcurx061oZ ~]# docker images
REPOSITORY                    TAG          IMAGE ID       CREATED          SIZE
localhost:5000/seat-user      1.0.0        dac699827026   54 seconds ago   838MB
red/mysql8.0                  1            ce7775d1efeb   7 hours ago      519MB
localhost:5000/red/mysql8.0   1            ce7775d1efeb   7 hours ago      519MB
jenkinsci/blueocean           latest       54b040dd343a   23 hours ago     582MB
jenkins/jenkins               latest       1c520775844c   40 hours ago     442MB
rabbitmq                      management   aaeff1fdd203   3 days ago       254MB
mysql                         8.0          5b4c624c7fe1   3 days ago       519MB
redis                         latest       7614ae9453d1   4 weeks ago      113MB
registry                      2            b8604a3fe854   2 months ago     26.2MB
java                          8            d23bdf5b1b1b   5 years ago      643MB

5、docker ps

[root@iZbp1fx32c6dtkcurx061oZ ~]# docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED              STATUS              PORTS                                                                                                                                                                                                                                             NAMES
c3c9788e6832   localhost:5000/seat-user:1.0.0   "java -Djava.securit…"   About a minute ago   Up About a minute   0.0.0.0:8086->8086/tcp, :::8086->8086/tcp                                                                                                                                                                                                         seat-user
4aa3a499ea24   mysql:8.0                        "docker-entrypoint.s…"   41 minutes ago       Up 18 minutes       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                                                                                                                                                                              mysql
18ec5607533e   registry:2                       "/entrypoint.sh /etc…"   8 hours ago          Up 8 hours          0.0.0.0:5000->5000/tcp, :::5000->5000/tcp                                                                                                                                                                                                         myregistry
16af5653d18f   jenkinsci/blueocean              "/sbin/tini -- /usr/…"   21 hours ago         Up 8 hours          50000/tcp, 0.0.0.0:8010->8080/tcp, :::8010->8080/tcp                                                                                                                                                                                              jenkins
d7f1190451ca   rabbitmq:management              "docker-entrypoint.s…"   21 hours ago         Up 8 hours          0.0.0.0:4369->4369/tcp, :::4369->4369/tcp, 0.0.0.0:5671-5672->5671-5672/tcp, :::5671-5672->5671-5672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, :::15671-15672->15671-15672/tcp, 0.0.0.0:25672->25672/tcp, :::25672->25672/tcp, 15691-15692/tcp   rabbitmq
09b243eec8c7   redis                            "docker-entrypoint.s…"   21 hours ago         Up 8 hours          0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                                                                                                                                         redis