docker jenkins registry gitlap rancher k8s nacos 容器部署与持续集成(单机测试在centos7下进行)

docker jenkins registry gitlap rancher k8s nacos 容器部署与持续集成(单机测试在centos7下进行)

1.安装centos

参考
​ https://jingyan.baidu.com/article/15622f24dad3bafdfcbea5f7.html

1.1.安装jdk

参考
​ https://www.cnblogs.com/116970u/p/10400436.html
​ //注意不要安装在root目录下

1.2.安装maven

​ 在/usr/local下创建maven maven仓库mavendev (赋于独写得权限 chmod 777+文件所在路径)

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz

​ 如出现wegt命令找不到 先安装

yum -y install wget   --可以使用wegt不用安装

​ 解压maven

tar -zxvf  apache-maven-3.1.1-bin.tar.gz

​ 将 apache-maven-3.1.1 改为 maven

mv apache-maven-3.1.1 maven

​ 更改settings.xml文件中

vi conf/settings.xml

​ 添加仓库路径

<localRepository>/usr/local/mavendev</localRepository>

​ 添加阿里云私服

<mirror>
	  <id>alimaven</id>
	  <name>aliyun maven</name>
	  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	  <mirrorOf>central</mirrorOf>       
	</mirror>

​ 配置环境变量

vi /etc/profile 

	export M2_HOME=/maven/maven                                   -- maven 安装的路径
	export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

​ 修改完重载这个文件使文件立即生效,否则重启计算机即可生效。

source /etc/profile 

​ //验证

	mvn  -v 

1.3.安装git

​ 查看是否安装过git

git --version

​ 安装git

yum -y install git
###移除git
yum remove git

2.安装docker

​ 防火墙设置
​ 查看防火状态

systemctl status firewalld
service  iptables status

​ 暂时关闭防火墙

systemctl stop firewalld
service  iptables stop

​ 永久关闭防火墙

systemctl disable firewalld
chkconfig iptables off

​ 重启防火墙

systemctl enable firewalld
service iptables restart 

​ yum安装docker

yum install docker
systemctl enable docker	 // systemctl是centos7中系统服务管理命令

​ 配置国内仓库:/etc/docker/daemon.json 配置仓库地址

vim /etc/docker/daemon.json
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
systemctl  restart docker
或者
{"registry-mirrors":["https://wghlmi3i.mirror.aliyuncs.com"]}  
systemctl  restart docker

​ 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

docker容器跟随docker启动

docker update --restart=always 容器名称或者容器id

2.1安装docker的可视化界面portainer

docker search portainer
docker pull portainer/portainer

#启动

docker run -d -p 9000:9000 \
    --restart=always \
    -v /opt/portainer:/data/portainer \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --name prtainer-test \
    portainer/portainer
  1. 启动完成后通过9000端口访问http://IP:9000
  2. 设置用户名密码 admin admin1234
  3. 单机版选择Local即可连接到本地Docker

//注意安装docker使用yum安装 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker
在root用户下 su root
sudo yum update

3.安装gitlap

​ 拉取镜像

docker pull gitlab/gitlab-ce
运行镜像
# 将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级。
	mkdir -p /mnt/gitlab/etc 
	mkdir -p /mnt/gitlab/log 
	mkdir -p /mnt/gitlab/data

# 分别指定映射的端口,容器名字,挂载的卷(config,logs,data),镜像
	docker run -d \
	-p 2222:22 -p 4555:80 -p 8443:443 \
	--name gitlab \
	-v /data/gitlab/config/:/data/gitlab/config/ \
	-v /data/gitlab/logs/:/data/gitlab/logs/ \
	-v /data/gitlab/data/:/data/gitlab/data/ \
	gitlab/gitlab-ce:latest

# 检查是否运行成功,看到gitlab说明没问题:
	docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                      PORTS                                                               NAMES
d94a3639e722        gitlab/gitlab-ce:latest   "/assets/wrapper"        16 hours ago        Up 16 hours (healthy)       0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp   gitlab
确认以上步骤无误后,以下操作均需要在容器内进行:
# 进入容器内配置GitLab
	docker exec -it gitlab /bin/bash
[email protected]:/# 
# 出现上面一行说明已经进入容器内了
# 容器内进行配置相关配置文件
	vim /etc/gitlab/gitlab.rb
添加下面的配置(填写虚拟机Ip)
external_url 'http://192.168.11.3'
保存并退出

​ 更新配置

[email protected]:/# gitlab-ctl reconfigure
# 该步骤至少需要几分钟

​ 重启gitlab

[email protected]:/# gitlab-ctl restart
# 查看运行状态是否正常:
[email protected]:/# gitlab-ctl status
run: alertmanager: (pid 1193) 58248s; run: log: (pid 299) 58494s
run: gitaly: (pid 1202) 58247s; run: log: (pid 303) 58494s
run: gitlab-exporter: (pid 1209) 58247s; run: log: (pid 293) 58494s
run: gitlab-workhorse: (pid 1218) 58246s; run: log: (pid 287) 58494s
run: grafana: (pid 1227) 58246s; run: log: (pid 283) 58494s
run: logrotate: (pid 37010) 3202s; run: log: (pid 291) 58494s
run: nginx: (pid 1244) 58245s; run: log: (pid 289) 58494s
run: postgres-exporter: (pid 1249) 58244s; run: log: (pid 297) 58494s
run: postgresql: (pid 1268) 58244s; run: log: (pid 305) 58494s
run: prometheus: (pid 1278) 58243s; run: log: (pid 285) 58494s
run: redis: (pid 1286) 58243s; run: log: (pid 311) 58494s
run: redis-exporter: (pid 1422) 58243s; run: log: (pid 295) 58494s
run: sidekiq: (pid 1547) 58239s; run: log: (pid 309) 58494s
run: sshd: (pid 1554) 58239s; run: log: (pid 31) 58510s
run: unicorn: (pid 1561) 58237s; run: log: (pid 307) 58494s
如果配置得有问题,但是不想逐个去改,那么首先应该在容器外停止相应的容器:“docker stop gitlab”,再通过“docker rm containerID”这一命令删除指定容器,而镜像则不用动。containerID可以用“docker ps -a”获取。

docker update --restart=always 容器名称或者容器id

输入网址:http://192.168.11.3:4555/(虚拟机IP加上端口号)

4.安装jenkins

​ 拉取镜像

docker pull jenkins/jenkins:lts

​ 在主机上创建目录,并添加读写权限以便jenkins应用运行时读写文件

mkdir /var/jenkins_home
chmod 777 /var/jenkins_home
sudo chown -R 1000  /var/jenkins_home

​ 运行jenkins镜像 启动jenkins

docker run -d \
  -u root \
  -p 4455:8080 -p 50000:50000 \
  --name jenkins \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /usr/lib/jvm/java:/usr/lib/jvm/java \
  -v /usr/local/maven:/usr/local/maven \
  -v /usr/local/mvndev:/usr/local/mavendev \
  -v /var/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

查看jenkins得密码

docker exec -it 容器id /bin/bash
	cat /var/jenkins_home/secrets/initialAdminPassword
	cc11dae969234e5398da8f1eb283aaf8

4.1Jenkins配置

下载插件 mavne gitlap Gitlab Hook Plugin Build Authorization Token Root

配置jdk maven git

在这里插入图片描述
在这里插入图片描述

创建一个自由风格的项目

在这里插入图片描述

下面圈住的内容要在gitlap中网络挂钩
在这里插入图片描述

执行mvn构建

在这里插入图片描述

在gitlap上

在这里插入图片描述

在gitlap填写Jenkins上面的url和token

在这里插入图片描述

项目demo 随意建立一个springboot的项目 项目中配置dockerfile和docker registry的私仓地址 填写对应的信息

<build>
    <!--打包后的项目的文件名称-->
    <finalName>app</finalName>
    <!--<finalName>${project.artifactId}</finalName>-->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <!--生成的镜像名字-->
                <imageName>192.168.11.3:5000/${project.artifactId}:${project.version}</imageName>
                <!--基础镜像名称,相当于dockerfile中的FROM centos-jdk8 -->
                <baseImage>openjdk:8</baseImage>
                <!--入口点-->
                <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                <!-- copy the service's jar file from target into the root directory of the image
                要将生成的微服务的jar资源拷贝到哪里,这里配置的是容器的根目录下面,相当于ADD /app.jar /-->
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
                <!--设置docker的服务地址,默认连接的docker主机为localhost:2375-->
                <!--<dockerHost>http://192.168.11.3:2375</dockerHost>-->
            </configuration>
        </plugin>
    </plugins>
</build>

//注意运行jenkins时要挂载jdk和maven 挂载Jenkins_home用于docker安装得jenkins在使用中可以找到宿主机上得安装环境**

5.安装 registry

​ 拉取镜像

docker  pull  registry 

​ 首先在在主机上新建一个目录,供存储镜像

cd /usr/local/
mkdir docker_registry 
赋于jenkins对应的1000得权限
sudo chmod 777  docker_registry 

修改daemon.json,让 docker信任私有仓库地址
	vim /etc/docker/daemon.json
添加如下内容,保存退出。
{
"insecure-registries":["192.168.11.3:5000"]
}
注意:该文件中如有多个内容,比如有之前配置的私服镜像地址,用英文逗号隔开,参考如下:  ,分隔
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
,"insecure-registries":["192.168.40.134:5000"]
}

重启docker

systemctl restart docker
docker run -d -p 5000:5000 --name=helregistry --restart=always --privileged=true  -v /usr/local/docker_registry:/var/lib/registry  docker.io/registry

启动

http://192.168.11.3:5000/v2/_catalog

6.安装Rancher

​ 在服务器上直接执行下面语句安装最新版的:

docker run -d --restart=always -p 80:80 -p 443:443 -v /usr/local/rancher:/var/lib/rancher/ rancher/rancher:stable

浏览器输入192.168.11.3进入rancher

6.1 k8s部署

在这里插入图片描述

点击下一步 如下图 点击复制再linux上执行

在这里插入图片描述

此时k8s单机集群正处于准备状态中等待一段时间集群自动搭建完成:

等待一段时间集群自动搭建完成,显示为active状态集群就搭建完成
在这里插入图片描述

点击执行kubectl命令行

执行 kubtc1 get svc

点击建立的测试集群-----点击储存

​ 添加持久卷:

在这里插入图片描述

k8s部署结束

6.2 部署项目

查看项目及命名空间:添加项目

在这里插入图片描述

在这里插入图片描述

开始部署项目: 填写项目名称 镜像 端口号

在这里插入图片描述
在这里插入图片描述

测试访问192.168.11.3:30001/hello

7. docker部署mysql

下载镜像

[[email protected] ~]# docker pull mysql:5.7.20

创建mysql目录

[[email protected] ~]# mkdir /opt/mysql/{data,conf,logs} -p
目录说明:
    data:数据目录
    conf:配置文件
    logs:日志目录

编辑配置文件

[[email protected] ~]# vim /opt/mysql/conf/mysqld.cnf
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
lower_case_table_names = 1  ## 忽略mysql查询大小写

注意:这只是简单的mysql参数,具体的参数需要根据业务需求,自行添加即可,这里需要注意的是,涉及到mysql数据目录的话,一定要写容器内的路径,而不是映射到宿主机的目录。

启动

[[email protected] ~]# docker run -d --restart=always -p 3306:3306 --name mysql \
 -v /opt/mysql/data:/var/lib/mysql \
 -v /opt/mysql/logs:/var/log/mysql \
 -v /opt/mysql/conf:/etc/mysql/mysql.conf.d \
 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.20

参数解释:

  1. –name: 容器名称
  2. -p 3306: 映射端口
  3. MYSQL_ROOT_PASSWORD:mysql初始密码
  4. -v冒号前面是宿主机目录,后面是容器目录

设置远程登录

docker exec -it mysql /bin/bash
[email protected]:/# mysql -uroot -p

Enter password: ######输入mysql的密码(123456)

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 MySQL Community Server (GPL)

Copyright © 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.01 sec)

mysql> exit

8.docker部署nacos

安装nacos镜像

docker pull nacos/nacos-server:1.2.1

启动nacos镜像

docker run --env MODE=standalone --name nacos -d --restart=always -p 8848:8848 nacos/nacos-server:1.0.0

边做了端口映射,最后可以通过 ip:8848/nacos 访问,登录密码默认nacos/nacos

项目配置 添加mybatis mysql nacos 依赖 连接池依赖(//因为nacos内置的连接池和项目中连接数据库会产生冲突)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.20</version>
</dependency>
<!-- nacos注册中心和配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>
<!-- nacos配置文件选择 -->
<profiles>
    <profile>
        <!-- 本地开发环境 -->
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <!-- 生产环境 -->
        <id>prod</id>
        <properties>
            <profiles.active>prod</profiles.active>
        </properties>
    </profile>
</profiles>
<resources>
    <resource>
        <directory>${project.basedir}/src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>${project.basedir}/src/main/resources</directory>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>bootstrap.yml</include>
            <include>**/*-${profiles.active}.yml</include>
        </includes>
    </resource>
</resources>

9.编写shell脚本定时删除tag为none的镜像

创建清除脚本

在root目录下创建clear.sh

vim clear.sh

添加下面内容

#!/bin/bash
docker rmi `docker images | grep  '<none>' | awk '{print $3}'`

使用chmod命令赋予脚本的执行权限

chmod +x clear.sh

定时执行(测试每分钟)

vi /etc/crontab
#每分钟执行该脚本
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
 */1 * * * * root bash /root/clear.sh

重启crontab

systemctl restart crond

自己简单总结,仅作参考—哈哈哈```

猜你喜欢

转载自blog.csdn.net/m0_47010811/article/details/107657102