docker学习之使用jenkins容器部署web到nginx容器中
参考文章列表:
前言:这里贴出来对我帮助过并在实际操作中参考的的文章连接:
1.CentOS 7 中 Docker 的安装 https://www.cnblogs.com/kaid/p/7640781.html
2.在(Docker里的)Jenkins里运行Docker实践 https://my.oschina.net/donhui/blog/478514
3.Publish Over SSH插件 http://blog.csdn.net/wangmuming/article/details/22925895
4.jenkins构建Docker 镜像 http://blog.csdn.net/gsying1474/article/details/51126522
5.CentOS Docker 安装(菜鸟教程) http://www.runoob.com/docker/centos-docker-install.html
网易云docker镜像(可能需要注册账号): https://c.163yun.com/hub#/m/home/
环境:
centos7.3x64
docker介绍:
关于什么是docker ,docker的种种好处以及使用场景等等就不在此处贴出来了,想来能看到这篇文章的人基本都有了解了。
前言:
在centos7的机器上,使用docker技术,创建两个docker容器: jenkins容器,nginx容器,实现website的自动部署,其中jenkins容器和nginx容器是兄弟关系。
因为看到好多文章都是在宿主机上安装jenkins并配置java,maven,git环境,且都不是用官方的jenkins-docker镜像。还有些文章只是把官方jenkins-docker镜像pull,run,之后怎么自动化并部署都没有涉及,所以感觉很有必要写这个(主要是本人也不是运维相关,突然萌发学习docker的兴趣,说不定哪天就忘记了,就当作是记个笔记了)
(文章整理上传于2018-3-3,可能会有陆续更新与补充,因为实在太懒,所以大部分内容都是c+v)
跳过:
关于什么防火墙啦,宿主机端口开放啦,163镜像站啦就不介绍了
1. 安装docker
前提条件:
目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
//通过 uname -r 命令查看你当前的内核版本:
[root@runoob ~]# uname -r 3.10.0-327.el7.x86_64
//Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令如下:
[root@runoob ~]# yum -y install docker
//安装完成后,启动docker服务:
[root@runoob ~]# service docker start
//查看docker是否安装成功(出现client和server,需启动docker服务后才行):
[root@centos~]# docker version
Client:
Version: 1.12.6
...
Server:
Version: 1.12.6
...
[root@VM_30_202_centos ~]#
2.docker的hello-world
测试运行docker官网提供的 hello-world
//查看本地镜像 :
[root@centos~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
//因为是第一次,还没有任何镜像
//下载官网hello-world镜像到本地:
[root@centos~]# docker pull hello-world
...经过一段时间后
//查看本地镜像
[root@centos~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest f2a91732366c 3 months ago 1.848 kB
//可以看到,有了一个hello的镜像,有时候,因为docker官网特别特别慢,可以从国内镜像站pull镜像,个人推荐163云(跳过如何用163云)
//使用hello-world镜像创建,并运行hello-world容器:
[root@runoob ~]#docker run hello-world
....输出一大堆,代表成功了,hello-world容器会在运行会自动停止
//查看在运行中的docker容器:
[root@centos~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//查看所有的docker容器()包括已经停止的容器:
[root@centos~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//因为没有运行中的,所以啥都没有
//常用命令:
//停止运行中的容器命令:
docker stop 容器名称或者容器id
//移除容器命令
docker rm 容器名称
//移除本机的镜像
docker rmi 镜像名称
3.nginx容器安装及使用:
首先,需要拉去nginx的镜像到本地:
[root@centos~]# docker pull nginx
...等待好久就行了
/*
首先在宿主机创建一个文件夹: /some/content/
这个文件夹主要用来挂载nginx容器内部的 /usr/share/nginx/html 文件夹
这样,只需要把web放入宿主机的/some/content/中,对应的nginx容器/html/中也有了对应文件,不需要在进入nginx操作了,且数据存放在容器之外的宿主机中,即使容器删除了,存储在本机html/中的web数据也不会消失 ,关于映射关系,可以参考文档https://c.163yun.com/hub#/m/repository/?repoId=2967(自行注册网易云镜像中心账号,进入镜像仓库,搜索nginx等,基本都有使用说明)
*/
//创建并启动容器:
[root@centos~]# docker run --name nginx -d -p 80:80 -v /some/content:/usr/share/nginx/html nginx
//上边的命令就不解释了,可参考http://www.runoob.com/docker/docker-install-nginx.html
//查看运行中的容器:
[root@centos~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9967bc5 nginx "nginx -g 'daemon off" 25 hours ago Up 25 hours 0.0.0.0:80->80/tcp nginx
//发现nginx已经启动,宿主机的80端口映射nginx容器的80端口,可以使用http://宿主机ip:80 访问nginx了,如果访问拒绝,说明防火墙没放行,如果能访问,可以随便放置一个index.html到宿主机的/some/content/目录中,就能看到index的内容
//上边的 --name nginx意思是为新的容器命名为nginx
//停止容器,之后http://宿主机ip:80就看不到任何东西了:
[root@centos~]# docker stop nginx (容器名称或者id)
//再次启动nginx容器,之后又可以宿主ip访问了:
[root@centos~]# docker start nginx (容器名称或者id)
//因为已经创建了nginx容器,所以使用start命令,而不是run命令,可参考http://www.runoob.com/docker/docker-command-manual.html
4.jenkins容器安装及初始化:
//jenkins镜像下载
[root@centos~]# docker pull nginx
...省略
/*
在本机创建/your/home/目录,用来存放jenkins容器的数据
(命令略)
*/
//创建jenkins容器,并运行:
[root@centos~]# docker run --name jenkins -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins
...省略
//浏览器: http://宿主ip:8080 ,进行一些初始化设置等等(略过)
5.jenkins容器部署web到ngix容器中:
思路:jenkins首先拉取git代码,然后通过ssh把拉取的代码copy到nginx容器html中,完毕。
1,为了能够使用ssh连接宿主机,然后用宿主机命令拷贝jenkins拉取的代码到nginx容器,
需要为jenkins安装Publish Over SSH插件:
jenkins>系统管理>管理插件>从可选插件中安装Publish Over SSH插件,如果失败,多试几次,总会成功的
2.配置宿主机ssh信息.
jenkins>系统管理>系统设置>翻到最后,配置Publish over SSH内容如下:
具体参数含义可参考文章: http://blog.csdn.net/wangmuming/article/details/22925895
至于如何配置,生成ssh-key,以及如何放置key与权限等,自行度娘,这里放出截图(转):
记得点击下方的’test configuration’,出现success才算成功。
3.jenkins 构建一个自由风格的项目,主要配置无非是填写git地址,构建添加构建步骤 ‘‘Send files or ex
ecute commands over ssh’’ ,把拉取的项目用shell命令放入nginx 的docker容器中:
具体的shell命令就不贴了自行度之。。。
4.之后点击构建项目即可,如果构建失败 ,查看jenkins控制台信息,找出错误并解决即可
关于拷贝,即拷贝jenkins下的对应项目文件夹到nginx容器,即使上边蓝色线条涂抹的部分,自行度之.( cp -r /your/jenkins_home/workspace/nginx1/website /some/content/html/nginx1)
5.玩
//docker 向容器拷贝文件:
docker cp 路径 容器id:路径
//如果不出意外,文章没有后续更新