一.Docker 介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。
二.Docker 的基本操作
2.1 基本准备
这篇文章中我的运行环境都是在 CentOS7 中运行。
配套视频: 2020 Docker最新超详细版教程通俗易懂
2.2 安装 Docker
# 1.下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
复制代码
# 2.设置下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码
# 3.安装Docker
yum makecache fast
yum -y install docker-ce
复制代码
# 4.启动Docker,并设置为开机自动启动,测试
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
# 测试
docker run hello-world
复制代码
2.3 Docker 的中央仓库
1. Docker 官方的中央仓库: 这个仓库是镜像最全的,但是下载速度较慢。
https://hub.docker.com/
2. 国内的镜像网站:网易蜂巢、daoCloud。。。
https://c.163yun.com/hub#/home
https://hub.daocloud.io/ (推荐使用)
3. 在公司内部会采用私服的方式拉取镜像。(添加配置)
# 需要在/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["ip:port]
}
# ip:port
公司私服的ip和port
# 重启两个服务
systemctl daemon-reload
systemctl restart docker
复制代码
2.4 镜像的操作
# 1. 拉取镜像到本地
docker pull 镜像名称[:tag]
# 举个例子 tomcat
docker pull daocloud.io/library/tomcat:8.5.15-jre8
复制代码
# 2. 查看全部本地的镜像
docker images
复制代码
# 3. 删除本地镜像
docker rmi 镜像的标识
复制代码
# 4. 镜像的导入导出(不规范)
# 将本地的镜像导出
docker save -o 导出的路径 镜像id
# 加载本地的镜像文件
docker load -i 镜像文件
# 修改镜像名称
docker tag 镜像id 新镜像名称:版本
复制代码
2.5 容器的操作
# 1. 运行容器
# 简单操作
docker run 镜像的标识|镜像名称[tag]
# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[tag]
# -d: 代表后台运行容器
# -p: 宿主机端口:容器端口: 为了映射当前Linux的端口和容器的端口
# --name 容器名称: 指定容器的名称
复制代码
# 2. 查看正在运行的容器
docker ps [OPTIONS]
# OPTIONS说明:
# -a: 代表查看全部的容器,包括没有运行
# -q: 只查看容器的标识
# -f: 根据条件过滤显示的内容
# --format: 指定返回值的模板文件
# -l: 显示最近创建的容器
# -n: 列出最近创建的n个容器
# --no-trunc: 不截断输出
# -s: 显示总的文件大小
复制代码
# 3. 查看容器的日志
docker logs -f 容器id
# -f: 可以滚动查看日志的最后几行
复制代码
# 4. 进入到容器内部
docker exec -it 容器id bash
复制代码
# 5. 删除容器(删除容器前,需要先停止容器)
docker stop 容器id
# 停止指定的容器
docker stop $(docker ps -qa)
# 停止全部容器
docker rm 镜像id
# 删除指定容器
docker rm $(docker ps -qa)
# 删除全部容器
复制代码
#6. 启动容器
docker start 容器id
复制代码
三.Docker 应用
3.1 准备 SSM 工程
# MySQL数据库的连接用户名和密码改变了,修改db.propreties
# 项目重新打包
mvn clean package -DskipTests
# 项目地址
链接: https://pan.baidu.com/s/1F4xTLoOFCMb7rl1VUrBASA 密码: bgjw
复制代码
3.2 准备 MySQL 容器
# 运行MySQL容器
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4
复制代码
3.3 准备 Tomcat 容器
# 运行Tomcat容器,在上面容器操作中已经搞定,只需要将SSM项目的war包部署到Tomcat容器内部
# 可以通过命令将宿主机的内容复制到容器内部
docker cp 文件名称 容器id:容器内部路径
# 举个例子
docker cp ssm.war fe:/usr/local/tomcat/webapps/
复制代码
3.4 数据卷
为了部署 SSM 的工程,需要使用到 cp 的命令将宿主机内的 ssm.war 文件复制到容器内部。
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。
# 1. 创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
复制代码
# 2. 查看数据卷的详细信息
docker volume inspect 数据卷名称
复制代码
# 3. 查看全部数据卷
docker volume ls
复制代码
# 4. 删除数据卷
docker volume rm 数据卷名称
复制代码
# 5. 应用数据卷
# 当你映射数据卷时,如果数据卷不存在。Docker会帮你自动创建
docker run -v 数据卷名称:容器内部路径 镜像id
# 直接指定一个路径作为数据卷的存放位置。这个路径下是空的。
docker run -v 路径:容器内部的路径 镜像id
复制代码
四.Docker 自定义镜像
中央仓库上的镜像,也是 Docker 的用户自己上传过去的。
# 1. 创建一个Dockerfile文件,并且指定自定义镜像信息。
# Dockerfile文件中常用的内容
from: 指定当前自定义镜像依赖的环境
copy: 将相对路径下的内容复制到自定义镜像中
workdir: 声明镜像的默认工作目录
cmd: 需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)
# 举个例子,自定义一个tomcat镜像,并且将ssm.war部署到tomcat中
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
复制代码
# 2. 将准备好的Dockerfile和相应的文件拖拽到Linux操作系统中,通过Docker的命令制作镜像
docker build -t 镜像名称:[tag] .
复制代码
五.Docker-Compose
之前运行一个镜像,需要添加大量的参数。
可以通过 Docker-Compose 编写这些参数。
Docker-Compose 可以帮助我们批量的管理容器。
只需要通过一个 docker-compose.yml 文件去维护即可。
5.1 下载 Docker-Compose
# 1. 去Github官网搜索docker-compose,下载1.24.1版本的Docker-Compose
https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
# 2. 将下载好的文件拖拽到Linux系统中
将文件上传到你所使用的服务器或者虚拟机,然后将文件移动到/usr/local
# 3. 需要将Docker-Compose文件的名称修改一下,基于Docker-Compose文件一个可执行的权限
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose
# 4. 方便后期操作,配置一个环境变量
# 将docker-compose文件移动到了/usr/local/bin,修改了/etc/profile文件,给/usr/local/bin配置到了PATH中
mv docker-compose /usr/local/bin
vi /etc/profile
export PATH=/usr/local/bin:$PATH
source /etc/profile
# 5. 测试一下
# 在任意目录下输入docker-compose
复制代码
5.2 Docker-Compose 管理 MySQL 和 Tomcat 容器
yml 文件以 key:value 方式来指定配置信息
多个配置信息以换行+缩进的方式来区分
在 docker-compose.yml 文件中,不要使用制表符
version: '3.1'
services:
mysql: # 服务的名称
restart: always # 代表只要Docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.4 # 指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql # 映射数据卷
tomcat:
restart: always # 代表只要Docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/tomcat:8.5.15-jre8 # 指定镜像路径
container_name: tomcat # 指定容器名称
ports:
- 8080:8080 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps # 映射数据卷
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs # 映射数据卷
复制代码
5.3 使用 docker-compose 命令管理容器
在使用 docker-compose 的命令时,默认会在当前目录下找 docker-compose.yml
# 1. 基于docker-compose.yml启动管理的容器
docker-compose up -d
复制代码
# 2. 关闭并删除容器
docker-compose down
复制代码
# 3. 开启 | 关闭 | 重启已经存在的由docker-compose维护的容器
docker-compose start | stop | restart
复制代码
# 4. 查看由docker-compose管理的容器
docker-compose ps
复制代码
# 5. 查看日志
docker-compose logs -f
复制代码
5.4 docker-compose 配置 Dockerfile 使用
使用 docker-compose.yml 文件以及 Dockerfile 文件在生产自定义镜像的同时启动当前镜像,并且由 docker-compose 去管理容器
docker-compose.yml
# yml文件
version: '3.1'
services:
ssm:
restart: always
build: # 构建自定义镜像
context: ../. # 指定dockerfile文件的所在路径
dockerfile: Dockerfile # 指定Dockerfile文件名称
image: ssm:1.0.1
container_name: ssm
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai
复制代码
Dockerfile 文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
复制代码
# 可以直接启动基于docker-compose.yml以及Dockerfile文件构建的自定义镜像
dockr-compose up -d
# 如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
# 重新构建的话
# 重新构建自定义镜像
docker-compose build
# 运行前,重新构建
docker-compose up -d --build
复制代码
六.Docker DI、CD
6.1 引言
项目部署
1. 将项目通过 maven 进行编译打包
2. 将文件上传到指定的服务器中
3. 将 war 包放到 tomcat 的目录中
4. 通过 Dockerfile 将 Tomcat 和 war 包转成一个镜像,由 DockerCompose 去运行容器
项目更新了
将上述流程再次的从头到尾的执行一次
6.2 CI 介绍
CI(continuous intergration)持续集成
持续集成:编写代码时,完成了一个功能后,立即提交代码到 Git 仓库中,将项目重新的构建并进行测试。
- 快递发现错误。
- 防止代码偏离主分支。
6.3 实现持续集成
6.3.1 搭建 Gitlab 服务器
1、创建一个全新的虚拟机,并且至少指定 4G 的运行内存
2、安装 docker 以及 docker-compose
3、将 ssh 的默认 22 端口,修改为 60022 端口
vi /etc/ssh/sshd_config
Port 22 -> 60022
systemctl restart sshd
复制代码
4、docker-compose.yml 文件去安装 Gitlab(下载和运行的时间比较长)
version: '3.1'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:11.1.4'
container_name: 'gitlab'
restart: always
privileged: true
hostname: 'gitlab'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.199.110'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 22
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- /opt/docker_gitlab/config:/etc/gitlab
- /opt/docker_gitlab/data:/var/opt/gitlab
- /opt/docker_gitlab/logs:/var/log/gitlab
复制代码
6.3.2 搭建 Gitlab-Runner
查看资料中的 gitlab-runner 文件即可安装
6.3.3 整合项目入门测试
1、创建一个 maven 工程,添加 web.xml 文件,编写 html 页面
2、编写 gitlab-ci.yml 文件
stages:
- test
test:
stage: test
script:
- echo first test ci # 输入的命令
复制代码
3、将 maven 工程推送到 gitlab 中
4、可以在 gitlab 中查看到 gitlab-ci.yml 编写的内容
打开gitlab控制台-左侧CI/CD-流水线-已通过
复制代码
6.3.4 编写.gitlab-ci.yml 文件
1、编写.gitlab-ci.yml 测试命令使用
stages:
- test
test:
stage: test
script:
- echo first test ci
- /usr/local/maven/apache-maven-3.6.3/bin/mvn package
复制代码
2、编写关于 dockerfile 以及 dock er-compose.yml 文件的具体内容
# 1. Dockerfile
FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY testci.war /usr/local/tomcat/webapps
复制代码
# 2. docker-compose.yml
version: '3.1'
services:
testci:
build: docker
restart: always
container_name: testci
ports:
- 8080:8080
复制代码
# 3. ci.yml
stages:
- test
test:
stage: test
script:
- echo first test ci
- /usr/local/maven/apache-maven-3.6.3/bin/mvn package
- cp target/testci-1.0-SNAPSHOT.war docker/testci.war
- docker-compose down
- docker-compose up -d --build
- docker rmi $(docker images -qf dangling=true)
复制代码
3、测试
6.4 CD 介绍
CD(持续交付,持续部署)
6.5 实现持续交付持续部署
6.5.1 安装 Jenkins
官网:https://www.jenkins.io/
version: '3.1'
services:
jeckins:
image: jenkins/jenkins
restart: always
container_name: jenkins
ports:
- 8888:8080
- 50000:50000
volumes:
- ./data:/var/jenkins_home
复制代码
第一次运行时,会因为 data 目录没有权限,导致启动失败
访问 http://192.168.199.109:8888
输入密码
手动指定插件安装:指定下面两个插件即可
Publish ssh
git param...
这里安装过程忘了截图了。。。因为服务器安装的太快,没反应过来
安装成功后,需要指定用户名和密码
6.5.2 配置目标服务器以及 Gitlab 免密码登录
Gitlab -> Jenkins -> 目标服务器
1、Jenkins 去连接目标服务器
左侧的系统设置
选中系统设置
搜索 Publish over SSH
点击新增
----
6.5.3 配置 Gitlab 免密码登录
1、登录 Jenkins 容器内部
docker exec -it jenkins bash
复制代码
2、输入生成 SSH 密钥命令
ssh-keygen -t rsa -C "邮箱"
复制代码
3、将密钥复制到 Gitlab 的 SSH 中
6.5.4 配置 JDK 和 Maven
1、复制本地的 jdk 和 maven 的压缩包到 data 目录下
2、手动解压
3、在监控界面中配置 JDK 和 Maven
6.5.5 手动拉取 gitlab 项目
使用 SSH 无密码连接时,第一次连接需要手动确定
6.5.6 创建 maven 任务
1、创建 maven 工程,推送到 gitlab
2、jenkins 的监控页面中创建 maven 任务
3、执行 maven 任务
4、最终效果
6.6 实现持续交付持续部署
1、安装 Git Parameter 的插件,Persistent Parameter 的插件(版本)
2、重新制定构建项目的方式
3、构建项目成功后,需要将内容发布到目标服务器
4、修改程序代码,(提交到 GitLab 仓库中)
FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY testcd-1.0-SNAPSHOT.war /usr/local/tomcat/webapps
复制代码
version: '3.1'
services:
testcd:
build: docker
restart: always
container_name: testcd
ports:
- 8081:8080
复制代码
5、测试
1. 给当前代码添加一个标签
2. 到 Jenkins 中查看
3. 点击上图的开始构建(查看日志)
4. 去指定的目标服务器中访问具体服务
结束
到这里这篇文章就结束了,如果你觉得这篇文章有用的话,请帮忙点个赞!谢谢!!
评论