目录
4.1 创建dockerfile文件,并且指定自定义镜像信息
4.1.2 将准备好的Dockerfile和相应的文件拖拽到Linux操作系统中,通过Docker的命令制作镜像
6.1.1 去github官网搜索Docker -Compose
6.1.3 修改docker-compse-Linux-x86文件名为docker-compse,添加执行权限
6.1.4 为了方便操作,将docker-compose文件放到bin目录下,
6.2 Docker-Compose管理mysql和tomcat容器
6.3.1 基于docker-compose.yml启动管理的容器
6.3.3 开启|关闭|重启由docker-compose维护的容器
6.4 docker-compose配合dockerfile使用
7.6.1. 安装Git parameter的插件(安装jenkins的时候已经指定好了,因为和版本有关这里再下载一下presistent parameter的插件 )
7.6.4. 修改程序代码 dockerfile 和.yml
二 Docker 的基本操作
2.1 安装Docker
2.1.1 安装环境
[root@node001 yum.repos.d]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
2.1.2 下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-presistent-data lvm2
2.1.3 设置一下Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
可以看到repo文件
2.1.4 安装Docker
yum makacache fast
yum -y install docker-ce
2.1.5 启动 并设置开机自动启动 测试
启动Docker服务
systemctl start docker
设置开机自启动
systemctl enable docker
测试
docker run hello-world
CentOS 7(使用 yum 进行安装)
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
安装校验
root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
相关链接
2.2 Docker的中央仓库
推荐使用国内:http://hub.daocloud.io/
2.3 镜像的操作
2.3.1 拉去镜像到本地
docker pull 镜像名称[:tag]
举个例子:拉取tomcat镜像到本地
[root@node001 yum.repos.d]# docker pull daocloud.io/library/tomcat:8.5.16-jre8
2.3.2 查看全部本地的镜像
docker images
2.3.3 删除本地的镜像
上一张图我们可以看到tomcat镜像的标识ID为 b226...
docker rmi 镜像的标识
2.3.4 镜像的导入导出
1 将本地的镜像导出
docker save -o 导出的路径/要保存的名称 镜像id
2 加载本地的镜像文件
dockers load -i 镜像文件
将下载的tomcat镜像删掉
root@node001 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
[root@node001 ~]# docker rmi b2
加载本地的镜像文件
[root@node001 ~]# docker load -i tomcat-image
我们可以看到本地镜像加载后 镜像的名字和版本都为none
因此我们需要修改本地镜像的 名称和版本
3 修改镜像的名称
docker tag 要修改镜像的id 新镜像名称:版本
2.4 容器的操作
2.4.1 运行容器
运行起来的镜像叫做容器
简单运行操作:这种运行方式 运行起来的镜像,外部是无法访问的(需要加参数)
docker run 镜像的标识| 镜像的名称[:tag]
加参数运行操作
命令格式:docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
运行tomcat实列:docker run -d -p 8081:8080 --name tomcat b2
-d 代表后台运行
-p 宿主机端口和容器端口 为了映射当前Linux的端口和容器的端口
--name 容器的名称;指定该容器的名称
访问测试:
2.4.2 查看当前正在运行的容器
docker ps [-qa]
-a:查看全部的容器,包括没有运行
-q:之查看容器的标识
2.4.3 查看容器的日志
docker logs -f 容器id
-f:可以滚动查看日志的最后几行
强制退出 ctrl+c
2.4.4 进到容器内部
docker exec -it 容器的id bash
[root@node001 ~]# docker exec -it f7 bash
root@f703f6765a1e:/usr/local/tomcat#
退出容器 exit
2.4.5 停止与删除容器
删除容器前需要先停止容器
停止单个容器
docker stop 容器ID
停止所有运行的容器
docker stop $(docker ps -qa)
删除单个容器
docker rm 容器ID
删除所有运行的容器
docker rm $(docker ps -qa)
2.4.6 docker的启动
dockers start 容器ID
三 实列
将war包运行在tomcat中
3.1 创建Mysql容器
3.2 将本地war包上传到tomcat容器指定文件夹下
可以看到目前有两个容器在运行分别为,tomcat和mysql
3.3 数据卷
3.3.1 创建数据卷
[root@node001 tomcat]# docker volume create tomcat
3.3.2 查看数据卷
[root@node001 tomcat]# docker volume inspect tomcat
[
{
"CreatedAt": "2021-07-12T19:31:46+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/tomcat/_data",
"Name": "tomcat",
"Options": {},
"Scope": "local"
}
]
[root@node001 tomcat]#
3.3.3 查看全部数据卷
docker volume ls
3.3.4 删除数据卷
docker volume rm 数据卷名称
3.3.5 应用数据卷
数据卷不存在时,docker会帮我们自动创建数据卷
当你映射数据卷时,如果数据卷不存在,docker会帮我们自动创建数据卷,默认的数据卷是存在于/var/lib/docker/volumes/路径下的
docker run -v 数据卷名称:容器内部的路径 镜像ID
将war包拷贝到_data文件(这里_data文件跟tomcat的webapps对应)
直接指定一个路径作为数据卷的存放位置
docker run -v 路径:容器内部的路径 镜像ID
在没有事先创建数据卷的情况下,直接指定一个路径作为数据卷的存放位置并且与容器内部的路径做映射,该方式不会映射到容器内部路径下的文件。
四 自定义镜像
中央仓库的镜像也是我们自定义镜像后上传上去的。
自定义镜像分为如下几步:
4.1 创建dockerfile文件,并且指定自定义镜像信息
4.1.1 dockerfile文件中常用的内容:
From: 指定当前自定义镜像依赖的环境
copy: 将相对路径(相对于dockerfile文件)下的内容拷贝到自定义镜像
workdir:声明镜像的默认工作目录
cmd:需要执行的命令 (在workdir下执行的,cmd命令可以写多个,只以最后一个为准)
4.1.2 将准备好的Dockerfile和相应的文件拖拽到Linux操作系统中,通过Docker的命令制作镜像
dockers build -t 镜像的名称:[tag] Dockerfile所在路径
执行上面命令后 会默认到Dockerfile所在路径下找Dockerfile文件,
创建自定义镜像:
查看镜像
运行容器
六 Docker -Compose的使用
6.0 为什么使用Docker -Compose
之前运行一个镜像,需要添加大量的参数,全部记住这些参数不太现实,所以我们可以使用Docker -Compose编写这些参数,把这些参数编写到一个文件里,后期修改会比较方便。
其次,Docker -Compose可以帮我们批量的管理容器。并且只需要使用docker -compose.yml文件维护即可。为了使用Docker -Compose需要先下载Docker -Compose
6.1 下载Docker -Compose
6.1.1 去github官网搜索Docker -Compose
下载1.24.1版本的docker-compose
地址为:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
我们需要1.24.1
6.1.2 将下载好的文件上传到linux系统中。
root用户 将文件放到/usr/local 目录下
6.1.3 修改docker-compse-Linux-x86文件名为docker-compse,添加执行权限
[root@node001 local]# mv docker-compose-Linux-x86_64 docker-compose
[root@node001 local]# chmod 777 docker-compose
6.1.4 为了方便操作,将docker-compose文件放到bin目录下,
![](https://img-blog.csdnimg.cn/20210719202904568.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTY3MjY4NA==,size_16,color_FFFFFF,t_70)
[root@node001 local]# mv docker-compose bin/
修改配置文件:[root@node001 bin]# vi /etc/profile
export PATH=$PATH:$JAVA_HOME/bin:/usr/local/bin
启动配置文件:[root@node001 bin]# . /etc/profile
6.1.5 测试一下docker-compose命令
在任意目录下输入docker-compose命令。
看到如下提示:表示配置成功。
6.2 Docker-Compose管理mysql和tomcat容器
yml文件以key: value方式指定配置文件
多个配置文件以换行+缩进的方式来区分
在docker-compose.yml文件中千万不要使用制表符 Tab键
version: '3.1'
services:
mysql: #服务的名称
restart: always #代表只要docker启动,那么这个容器就跟着一起启动。
image: daocloud.io/library/mysql:5.7.4 #指定镜像路径
container_name: mysql #启动后容器的名字
ports:
- 3307: 3306 #指定端口号映射
environment:
MYSQL_ROOT_PASSWORD: root #指定mysql的root登录密码
TZ: Asia/shanghai #指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql_data: /var/lib/mysql
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.16-jre8
container_name: tomcat
ports:
- 8081: 8080
environment:
TZ: Asia/shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps: /usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs: /usr/local/tomcat/logs
6.3 使用docker-compose命令管理容器
在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
6.3.1 基于docker-compose.yml启动管理的容器
docker-compose up -d
6.3.2 关闭并删除容器
docker-compose down
6.3.3 开启|关闭|重启由docker-compose维护的容器
docker-compose start|stop|restart
6.3.4 查看由docker-compose管理的容器
docker-compose ps
6.3.5 查看日志
docker-compose log -f
6.4 docker-compose配合dockerfile使用
使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动当前镜像,
并由docker-compose去管理容器。
七 Docker CI、CD
7.1 引言
项目部署的流程:
1. 将项目通过maven进行编译打包
2. 将项目上传到指定服务器中
3.将war包放到tomcat中
4 通过dockerfile将tomcat和war包转成一个镜像,由Docker-compose运行容器
项目更新了怎样办
将上述流程重新处理一次:
7.2 CI
CI( continous intergration) 持续集成
持续集成:编写代码时,完成了一个功能以后,立即提交代码到Git仓库,将项目重新构建并且测试。
持续集成的优势:
1 快速发现错误
2 放置代码偏离主分支
7.3 实现持续集成
7.3.1 搭建Gitlab服务器
1.创建一个新的虚拟机,并且至少指定4G的运行内存
2. 安装docker以及docker-compose
3.docker-compose.yml文件安装gitlib服务器
在创建 /opt/docker_gitlab文件夹,在该文件夹下,编写docker-compose。yml文件
可以看到这个文件使用到了虚拟机额的22端口,因此我们需要将ssh远程连接的原有22端口改为60022,修改的配置文件是 vi /etc/ssh/sshd_config;重新启动配置文件systemctl restart sshd
运行docker-compse up -d (此过程会比较长)
7.3.2 搭建Gitlab-Runner
可以看到Gitlib-runner已经安装好了
2 整合Gitlib-runner和GItlib
找到项目的runner URL
输入令牌
描述 随便写
至此 runner跟testci这个工程集成到一起了
再次刷新Gitlib 在Runner中我们可以看到如下信息
勾选
保存修改
7.3.3 整合项目入门测试
7.5 实现持续交付 持续部署
7.5.1 安装jenkins
https://www.jenkins.io/zh/blog/2018/12/10/the-official-Docker-image/
docker pull jenkins/jenkins
编写yml文件:
运行:
[root@node001 docker_jenkins]# docker-compose up -d
查看运行日志
修改权限 data文件夹权限
访问8888的路径:
启动成功后会让我们输入一个密码, 密码即为日志中的如下:
指定jenkins需要安装的额插件
手动指定插件安装:
选择插件安装
1.git
2. publish
点击安装即可(时间比较慢)
安装完成以后:需要创建一个管理员用户
默认会有一个实列配置
保存并完成:
点击开始使用:
7.5.2 配置目标服务器
代码在Gitlib上-->jenkins--->目标服务器
1. jenkins去连接目标服务器
1.1 左侧的系统设置 选中系统设置:
1.2 添加一个server
选择安装gitlib的服务器作为目标服务器:点选高级 和勾选使用密码
到目标服务器上去创建jenkins目录
内容解释:
7.5.3 jenkins免密登录到Gitlib
2. jenkins免密登录到Gitlib
2.1 登录Jenkins容器内部
2.2 输入生成ssh密钥的命令:
2.3 将密钥复制到Gitlib的ssh中
2.1 登录Jenkins容器内部
2.2 输入生成ssh密钥的命令:
2.3 将密钥复制到Gitlib的ssh中
跳到宿主机 进到data目录下 查看复制公钥
Gitlib ssh的配置
s
7.5.4 jenkins中配置JDK和maven
jenkin会向gitlib上拉去下拉代码,在jenkin上执行一个maven的package打包,然后在扔到目标服务器。所以说jenkins需要JDK和maven的环境。
1. 复制本地的jdk和maven的压缩包到data目录下
data 目录已经映射到了容器的指定路径
2 手动解压
上传到data目录并解压(jdk和maven)
3. 在监控界面种配置jdk和maven
在jenkin的界面
新增jdk
新增maven
7.5.5 jenkins手动拉去Gitlib中的项目
使用ssh无密码连接时,第一次连接需要手动确认。后续就可以以信任的方式拉去内容了。
进到jenkins容器的内部
找到项目的来ssh连接
手动拉去项目
拉去完之后我们可以把拉去下拉的项目删除掉
7.5.6 创建maven任务
在jenkins中创建一个maven任务,
1 创建maven工程 推送到gitlib上
1.1 推送到gitlib上(指定忽视的文件 创建git仓库) 右键Git add放到暂存区--右键Git Commit提交本地仓库
1.2 gitlib中创建新的项目 项目名testcd
拿到项目路径的Http地址
可以在gitlib中看到内容
2. Jenkins的监控页面中创建一个maven任务
2.1. 创建一个自定义任务
2.2 给自定义任务起个名字
2.3 丢弃旧的构建 设置保持构建的最大数
2.4 源码管理选用Git 方式 拿到Gitlib项目的ssh路径放到下面
2.5 指定maven的构建 采用package方式
点击保存 开始测试
登录首页--点击项目 立即构建
详情 控制台输出 查看执行日志
3 执行maven任务
我们希望看到的结果是jenkens将项目打成一个war包
4 最终效果
/var/jenkins_home 跟宿主机映射好了 我们可以在宿主机的data目录下看到workspace文件夹
一级一级的进到目录下可以看到 war包已经打包成功
7.6 实现持续交付持续部署
7.6.1. 安装Git parameter的插件(安装jenkins的时候已经指定好了,因为和版本有关这里再下载一下presistent parameter的插件 )
进到jenkins中
找到插件 安装
安装后重启jenkins
7.6.2.重新指定构建项目的方式
jenkins回到首页 回到工程中
找到配置
指定参数化构建过程
指定名称和默认值
修改构建方式 先删除之前构建方式 再指定shell构建方式
指定shell构建方式
编写shell
解释: 1.打印一下刚才Git参数名称 2. 进到jenkins容器存放项目的目录下(该项目下youwar包) 3 git切换到指定的分支 4 重新的pull orign 5 maven(因为maven命令没有 需要到安装maven的路径下执行) 清除一下package |
7.6.3 构建项目成功后,需要将内容发布到目标服务器
3.1 添加构建后的操作
我们需要指定需要将工程的哪些内容添加到目标服务器。我是想将项目达成一个war包,并且部署到容器内部,或者运行一个tomcat容器把项目跑起来。
3.2 我们需要将项目target路径下的war包(**表示全部),docker-compose.yml ,docker/* *(含有dockerfile文件)放到指定目录下。这里指定需要的内容
3.3 指定目标路径:
之前我们指定里一个路径是jenkins 这个路径用户拼接后面指定的路径(testcd)。
3.4容器内部 指定目录下执行的命令
7.6.4. 修改程序代码 dockerfile 和.yml
4.1 再项目中创建两个文件,对应3.2所说的文件路径
4.2 编写dockerfile文件
4.3 编写docker-compose.yml文件
4.4 将项目再次推送到git中
commmit --push
我们推送到Gitlib后并不会在tomcat中立即部署,CD的我们配置中指定过需要基于标签执行。因此我们需要指定版本号标签。
4.5 在jenkins中找到项目所在的位置
在gitlib中找到项目 给项目打标签 ,点击标签 给当前的版本打标签
指定标签为v1.0版本--创建标签
回到jenkins刷新一下 可以看到标签 点击开始构建
点进去可看到日志信息。
出现该信息:重启目标服务器docker即可解决
7.6.5 测试
添加项目路径访问v1
项目路径信息如下 v1
修改信息再次测试:
push之后找到工程 再添加一个标签v2.0
返回到jenkins中看到部署的时候多了一个可选项 v2.0
可选择部署 开始构建
部署成功后刷新