Centos7 安装docker
$ sudo yum update$ sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2
$ sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum update
$ sudo yum install docker-ce
如出现错误提示:
Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
根据提示得知需要http://containerd.io >= 1.2.2-3,那我们就安装http://containerd.io。
$ yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
然后继续安装docker即可。
$ yum install -y docker-ce
安装完成docker后,接下来拉取docker 的jenkins镜像
$ docker pull jenkins
$ docker run -d -p 9001:8080 --name jenkins jenkins
9001可以换成一个没有被用过的端口号,阿里云服务器的话,还需要去到安全组开放下端口号。
之后访问 http://ip:端口号 ,(例如192.190.1.3:9001)会出现如下图的页面
因我docker run时没有挂载本地文件夹,所有需进容器看密码
$ sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
选择第一个进行安装,并新建一个账号
等待插件安装完成,有部分没安装成功也没关系,可以进入后再继续安装。
准备工作做完后,开始正题:
接下来是参考下面文章一步步搭建起来的:
鑫鑫鑫鑫:采用docker+jenkins+nginx_proxy部署多项目环境zhuanlan.zhihu.com
图片来源:https://www.jianshu.com/p/358bfb64e3a6
1、开发人员提交代码到gitlab。
2、gitlab将代码变动提交到jenkins上(这一步可后续补上)。
3、jenkins进行Dockerfile自动化构建项目。
4、push项目镜像到阿里云镜像仓库。
5、命令远程服务端执行shell脚本,拉取前一步构建好的阿里云镜像,在本地启动并允许项目容器。
6、将构建结果通知到相关测试人员。
一、准备工作
- 基本了解docker容器命令及用法(Dockerfile、docker-compose)。
- 一台安装好docker、docker-composer环境的服务器。
- 一个gitlab账号,也可以是码云、github
- 项目文件
- 部署所需镜像 (后面会提供)
- nginx_proxy镜像:起到反向代理、负债均衡等等作用。
- jenkins镜像:起到自动化部署作用。
- nginx+php(项目镜像,也可以是java、web,根据需要而定)
- 其他非必须扩展镜像(mysql、redis、mongo等等)。
二、Docker Compose 文件配置
Compose 是用于定义和运行多容器Docker应用程序的工具,通过Compse,你可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有容器。
Compose 使用的三个步骤:
- 使用Dockerfile定义应用程序的环境
- 使用docker-compose.yml,定义构成应用程序的服务,这样它们可以在隔离环境一起进行。
- 执行docker-compose up命令来启动并运行整个程序。
以下是一个完整的docker-compose.yml文件
version
在yml中,简单的配置了一个nginx_proxy容器、项目容器、redis容器、mysql容器。
参数说明:
- image:拉取所需镜像
- container_name:容器名称
- restart:always重启时默认启动
- environment:环境变量
- VIRTUAL_HOST:域名,不同项目配置不同域名
- MYSQL_ROOT_PASSWORD:数据库密码
- ports:映射端口
- links:关联网络
配置说明:
nginx_proxy容器:当docker容器发送变化后,会生成 nginx 反向代理配置并且重新加载 nginx,将VIRTUAL_HOST域名信息代理到对应项目容器。
项目容器:集成了php+nginx的项目镜像,nginx_proxy代理到项目容器后,由项目容器里的nginx去调用php文件。
redis容器、mysql容器:作为项目文件需要的扩展镜像。
执行下命令并访问
http://phpinfo.kylel.club/phpinfo.kylel.club
docker-compose up
docker ps
当终端正常显示docker进程,页面正常显示,那么手动构建流程顺利完成。
这里mongo连接失败不影响
接下来我们进行jenkins 自动化构建步骤:(如没有以下配置的地方,请先去安装对应插件)
需要对Jenkins进行一些配置,进入系统管理->系统配置,找到SSH remote hosts、Gitlab,添加服务器进行配置和gitlab账号,并connection成功,如下图。
Credentials 添加 账号密码类型, 输入你的服务器账号密码即可。
gitlab api token 在gitlab 设置里面添加
最后拉到最后,配置cloud configuration信息,将自己服务器的docker服务端口2376开放出来(阿里云服务器记得去安全组打开),并connection成功,如图所示。
可以开通其他端口,我刚开始开通的是2375,然后给别人植入挖矿程序了,o(╥﹏╥)o我就关了2375端口,用了2376
四、自动化构建配置
这是一个简单的项目部署文件,可以配置在自己的gitlab或者码云上。
https://gitlab.com/Jkaiy/phpinfogitlab.com
1、选择第一个进行配置构建项目
2、按下图信息进行配置。
配置gitlab凭证,并连接成功。
配置阿里云项目镜像
配置shell脚本命令,根据自己服务器目录进行对应修改。
点击应用保存。
3.项目构建
出现蓝色即代表构建成功,
如果构建失败,会报红色,可以点击进入查看报错原因。
至此,jenkins自动化部署 流程已大致完成,git 推代码到gitlab上,然后在jenkins上点击 立即构建 即可。
如觉得在jenkins 上点击 立即构建相对繁琐,可以在gitlab上加钩子,即可实现git push 推代码同时 jenkins 自动构建。
以下是附加内容:
sudo docker-compose: 找不到命令
解决办法:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose