一、引言
1.1 什么是Docker(重要 - 部署)?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
1.2 容器的特性
容器技术又称为容器虚拟化,是一种操作系统虚拟化,属于轻量级虚拟化。
容器首先是一个相对独立的运行环境,并且在一个容器环境中,应该最小化对外界的影响,比如不能在容器中把宿主机上的资源全部消耗完,这就是资源控制。
1.3 为什么需要Docker?
1.3.1 思考
在开发中我们经常会遇到这样的问题,我的代码在本地是好好的,为什么放到其他机器上就跑不起来了呢?
1.3.2 原因
这时候就牵扯到了另一个因素环境。我们的开发环境受制很多因素,比如我用win或者mac os开发的,但是部署到了centos上面了,造成的环境影响。还有配置、版本等等一系列的问题。
1.3.3 方案
因为环境的不同,当运维拿到我们的代码的时候就会很头疼。所以急切的希望出现一种技术来统一这些环境。你开发就不要只提交代码给我了,把你的代码连着你的开发环境直接打包丢给我吧。或者说我来弄一套环境,你在我这上面开发。所以这时候docker就出现了,来解决我们这些一套环境的问题。
1.4 容器 VS 虚拟机
1.4.1 虚拟机
1)虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x 、AMD-V会通过一个 hypervisor 层来实现对资源的彻底隔离。
2)虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源。
虚拟机结构图 |
1.4.2 容器
1)容器则是操作系统级别的虚拟化,仅仅是进程本身就可以实现互相隔离,不需要任何辅助。
2)Docker 容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级,消耗的资源更少。
容器结构图 |
1.5 Docker架构图
Docker架构图 |
1.5.1 仓库
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
1.5.2 镜像
Docker 镜像是用于创建 Docker 容器的模板,类似于Java中类的概念。
1.5.3 容器
是独立运行的一个或一组应用。通过镜像创建生成,类似于Java中的对象概念。
二、Docker的安装
2.1 Docker的发行版
自2017年3月份 Docker 公司把 Docker 划分为了
社区版: Docker Community Edition(CE) 为社区版, 免费。
企业版: Docker Enterprise Edition(EE) 为企业版, 收费。支持安全扫描,LDAP集成,内容签名,多云支持等
2.2 Docker支持的操作系统
Docker最初依赖于linux kernel的一些功能,所以最开始只能在linux系统下运行,常用发行版本,CentOS, Ubuntu, Suse,Federa都是支持。
2015年微软在windows server 2016下实现了Docker,因此也能在windows下运行。
2.3 在CentOS上安装Docker(CentOS版本必须7+)
2.3.1 安装前置环境
yum install -y yum-utils device-mapper-persistent-data lvm2
2.3.2 设置docker-ce版安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
2.3.3 安装docker
yum -y install docker-ce
2.3.4 启动/停止docker
systemctl start/stop docker
2.3.5 基于阿里云配置镜像加速
登录网址: 开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云
需要注册个账号后登录上去,点击“管理中心” |
选择“镜像加速器” |
按照官方的操作文档修改配置文件即可 |
2.3.6 重启docker服务
systemctl restart docker
2.3.7 测试docker服务
docker run hello-world
测试结果 |
三、Docker的基本命令
3.1 镜像相关的命令
3.1.1 搜索镜像
docker search [镜像名称]
参数介绍:
-f, --filter 根据提供的条件过滤器输出
--format 用Go模板打印出漂亮的搜索结果
--limit [n] 搜索结果的最大数量(默认值为25)
--no-trunc 不要截断输出
3.1.2 拉取镜像(从仓库中下载镜像到本地)
docker pull [镜像名称][:标签]
注意:
拉取镜像时如果没有显示的指定tag标签,默认会拉取latest标签的版本镜像
3.1.3 查看本地镜像
docker images
参数介绍:
-q 只显示镜像唯一的标识信息
3.1.4 删除镜像
docker rmi [镜像名称:tag]/[镜像ID]
参数介绍:
-f 强制删除镜像
后面所有用到名称:tag的地方都可以用id代替,反过来也一样
3.2 容器相关的命令
3.2.1 根据镜像运行容器
docker run [镜像名称][:tag]
docker run -d --name mytomcat -p 8888:8080 --restart always tomcat:8
参数介绍:
-i 保持和 docker 容器内的交互
-t 为容器的标准输入,虚拟一个tty
-d 后台运行容器
--rm 容器在启动后,执行完成命令或程序后就销毁(不可于 -d 一起使用)
--name 给容器起一个自定义名称
--restart docker 1.12 新增加的参数,用来指定容器的重启策略, 当前提供的策略包括:
- no 默认值,如果容器挂掉不自动重启。
- on-failure,若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数
- always,只要容器退出,则docker将自动重启容器
-p 将宿主机中的某个端口映射到容器中的某个端口上
-e 动态设置容器的运行环境变量
注意:如果run的镜像在本地不存在,就会自动的进行拉取
3.2.2 查看容器
docker ps
参数介绍:
-a 查看所有容器(默认不查询停止的容器)
-q 只查询容器的id
3.2.3 容器启动/停止/重启
docker start/stop/restart 容器名称
3.2.4 查看容器的元数据(容器的详细信息)
docker inspect 容器名称
3.2.5 删除容器
docker rm 容器名称
删除所有容器
docker rm $(docker ps -aq)
参数介绍:
-f 表示强制删除一个容器(默认不能删除一个运行中的容器)
3.2.6 进入容器中
docker exec [option] 容器名称 [args]
参数介绍:
-i 保持和 docker 容器内的交互
-t 为容器的标准输入,虚拟一个tty
-w 指定进入容器后的工作路径
args:表示进入容器后执行的命令,如果需要和容器进行交互式访问,需要配置参数为-it,并且命令设置为bash(表示通过命令行的方式交互访问容器)
注意:
该命令只能进入到运行中的容器
3.2.7 查看容器运行日志
docker logs 容器名称
参数介绍:
--tail n 选项可以指定查看最后n条日志
-t 选项则可以对日志条目附加时间戳。
--until 显示在某个时间戳(例如:2018-05-25T 13:23:37)之前的日志,还可以相对时间(例如:42m 42 minutes)
-f 实时打印日志内容
3.2.7 宿主机和容器间的数据拷贝
docker cp [OPTIONS] 容器名称:容器内路径 宿主机路径
docker cp [OPTIONS] 宿主机路径 容器名称:容器内路径
注意:
1、复制文件夹不需要添加任何参数(和Linux的命令有区别)
2、无论需要从哪儿拷贝到哪里,命令都是在宿主机执行
四、容器数据卷
4.1 什么是容器数据卷?
数据卷存在于宿主机中,独立于容器,和容器的生命周期是分离的
数据卷可以是目录也可以是文件
容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换
4.2 容器数据卷的特点
1、容器启动时初始化数据卷,如果容器使用的镜像包含了数据,这些数据也会拷贝到数据卷中
2、对 数据卷 的修改会立马生效
3、数据卷的变化不会影响镜像的更新
4、数据卷是宿主机中的一个目录
4.3 数据卷的运用场景
1、在多个运行容器之间共享数据。如果您没有明确创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,无论是读写还是只读。仅当您明确删除卷时才会删除卷
2、当您想要将容器的数据存储在远程主机或云提供商上而不是本地时
3、当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以停止容器,然后备份卷的目录
4.4 数据卷的相关命令
4.4.1 创建容器数据卷
docker volume create 数据卷名称
//查看创建的数据卷
docker volume list
注意
容器卷默认保存在宿主机的/var/lib/docker/volumes路径下
4.4.2 创建容器时指定数据卷
docker run -it
--mount source=数据卷名称,target=容器中的挂载路径,type=volume
--name 容器别名 镜像名称
参数介绍:
source 指定宿主机中数据卷的名称
target 指定容器中对应的挂载路径
type 指定为数据卷的方式挂载,还可以选择bind、tmpfs,默认为volume
注意:
1、如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
2、如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉
4.4.3 直接在创建容器时指定数据卷
docker run ... [-v 宿主机数据卷:docker容器路径:ro] []...
// 删除所有没用的数据卷
docker volume prune
注意:
1、通过这种方式可以任意指定宿主机的数据卷位置
2、如果随意指定数据卷的位置,容器中对应路径的文件就不会复制到宿主机的数据卷中,而是全部被清空
3、:ro表示以只读的方式挂载容器卷,不写再表示以读写的方式挂载
4、可以通过-v连续设置多个容器卷路径
总结:
数据卷未显示声明路径(默认在/var/lib/docker/volumes下)
1、数据卷为空,对应的容器路径有数据,则容器中的数据直接同步到数据卷中
2、数据卷有数据,对应的容器路径不存在,则启动容器时,自动创建该容器路径,并且将数据卷的数据同步到该路径下
3、数据卷有数据,对应的容器路径也有数据(数据不同),会把数据卷中的数据同步到容器路径中,容器路径中的文件会被隐藏(宿主机 覆盖 容器)
如果宿主机的数据卷为空,容器覆盖宿主机,如果数据卷不为空,则宿主机覆盖容器
数据卷声明指定路径
1、数据卷为空,对应的容器路径有数据,则直接将容器路径中的数据隐藏
2、数据卷有数据,对应的容器路径不存在,则启动容器时,自动创建该容器路径,并且将数据卷的数据同步到该路径下
3、数据卷有数据,对应的容器路径也有数据(数据不同),会把数据卷中的数据同步到容器路径中,容器路径中的文件会被隐藏(宿主机 覆盖 容器)
无论情况如何,永远是宿主机 覆盖 容器路径
数据卷是文件的情况
1、数据卷指定一个文件,对应的容器文件不存在,直接将数据卷文件覆盖到容器中
2、数据卷指定的文件不存在,容器的文件存在,启动容器会报错
如果需要绑定文件,则必须保证宿主机的数据卷中文件必须存在
五、Docker的应用
5.1 使用docker安装MySQL
5.1.1 拉取mysql的镜像
docker pull mysql:5.7
5.1.2 根据镜像创建容器
docker run -d
-v ~/mysql/conf:/etc/mysql/conf.d //2
-v ~/mysql/logs:/logs //3
-v ~/mysql/data:/var/lib/mysql //4
-p 3306:3306 //5
-e MYSQL_ROOT_PASSWORD='root' //6
--name mysql
mysql:5.7
docker run -d -v ~/mysql/conf:/etc/mysql/conf.d -v ~/mysql/logs:/logs -v ~/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' --name mysql --restart always mysql:5.7
代码解释
第二行:挂载mysql配置文件到宿主机
第三行:挂载mysql日志文件到宿主机
第四行:挂载mysql的数据路径到宿主机
第五行:将容器中3306端口映射到宿主机的3306端口上
第六方:设置MySQL的root账号密码为root
设置数据库编码
进入~/mysql/confg中,创建一个文件my.cnf,填写如下内容:
[mysqld]
character-set-server=utf8
重启mysql容器
5.2 使用docker安装tomcat
5.2.1 拉取tomcat的镜像
docker pull tomcat:8
5.2.2 运行tomcat容器
docker run -d
--name tomcat
-p 8080:8080
-v ~/tomcat/webapps:/usr/local/tomcat/webapps
tomcat:8
5.2.3 进入容器中进行相关拷贝
docker exec -it tomcat bash
cp -r webapps.dist/* webapps
注意:
docker镜像tomcat8之后容器中webapps中没有任何内容,需要将欢迎页导入
5.2.4 将自定义工程部署到tomcat中
1、使用maven命令或者工具将自定义工程打包
2、到工程的target目录下找到打的war包
3、将war包拷贝到宿主机的tomcat数据卷中
4、重启tomcat容器 docker restart tomcat
六、Docker镜像的制作与管理
6.1 什么是Dockerfile?
Dockerfile简单来说就是docker镜像的描述文件,最基础原始的镜像文件都是通过dockerfile文件构建而来
6.2 Dockerfile模板指令介绍
FROM:指定基础镜像,必备的指令,并且必须是第一条指令。
MAINTAINER:指明该镜像的维护者和点子邮件。
比如:MAINTAINER xxxx "xxxxx@qq.com"
ENV:设置环境变量。
比如:EVN key1=value1 key2=value2...
RUN:在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行。
比如:RUN yum install -y mysql-server
COPY:将主机的文件复制到镜像文件中,如果目标位置不存在会自动创建。
比如:COPY application.yml /etc/resources
ADD:和COPY一样,但是ADD会加上解压操作
EXPOSE:暴露镜像的端口供主机做映射,可以暴露多个端口。
比如:EXPOSE 8080
WORKDIR:在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录,而且在进入容器时,会默认定位到该路径下。
比如:WORKDIR /usr/local
VOLUME:用来向基础镜像中添加数据卷
比如 VOLUME /root/mydata /root/condata
CMD:容器启动时需要执行的命令。(通常是前台指令)
比如 CMD /bin/bash
6.3 案例:使用Dockerfile构建自定义工程的运行镜像
6.3.1 准备好Dockerfile文件以及需要部署的工程war包
制作镜像1 |
6.3.2 Dockerfile文件内容
FROM tomcat:8
WORKDIR /usr/local/tomcat
COPY test.war ./webapps
EXPOSE 8080
RUN ./bin/startup.sh
解释:
第一行:该镜像时基于tomcat:8镜像构建
第二行:设置当前基础路径,也是后续命令的相对路径
第三行:将工程war包复制到tomcat的webapps路径下
第四方:对外暴露8080端口,也就是tomcat访问路径
第五行:设置容器启动时命令,即启动tomcat
6.3.3 通过Dockerfile构建镜像
执行命令
docker build -f ./Dockerfile -t mytest:v1 .
解释:
-f 用来指定Dockerfile模板文件
-t 用来指定自定义镜像的名称以及tag
最后的.表示当前路径
6.4 将自定义镜像推送至镜像中心(私服、阿里云等,这里以阿里云举例)
登录阿里云,并且选择容器镜像服务
创建容器仓库
登录阿里云的仓库并且通过命令推送镜像到阿里云
docker login --username=账号 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ken-hub/myhub:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/ken-hub/myhub:[镜像版本号]
七、Docker-Compose
7.1 什么是Docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务
7.2 Docker-Compose安装
前置条件:安装好Docker
下载docker-compose二进制文件到服务器指定目录
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker_x0002_compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
执行授权操作
chmod +x /usr/local/bin/docker-compose
测试
docker-compose version
7.3 Docker-Compose模板文件
7.3.1 什么是模板文件?
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但是这里面大部分指令跟 docker run 相关参数的含义都是类似的。
默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。
7.3.2 docker-compose模板基本格式案例
version: "3.1"
services:
webapp:
image: examples/web
ports:
- 80:80
volumes:
- /data
version: "3.1"
#管理各种容器
services:
#管理tomcat容器
tomcat:
image: tomcat:8
ports:
- 8888:8080
container_name: mytomcat
restart: always
#管理mysql容器 - 这个地方的名字可以瞎写
mysql:
image: mysql:5.7
ports:
- 3306:3306
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
restart: always
7.3.3 docker-compose模板文件常用指令
image:指定为镜像名称或镜像 ID
ports:设置暴露端口,容器端口 (HOST:CONTAINER) 格式
volumes:数据卷所挂载路径设置
command:覆盖容器启动后默认执行的命令
container_name:指定容器名称
environment:设置环境变量
build:指定 Dockerfile 所在文件夹的路径
7.3.4 docker-compose基本命令
创建并运行容器
docker-compose up -d
参数:
-d 表示后台运行
启动容器
docker-compose start
停止容器
docker-compose stop
停止并移除容器
docker-compose down
注意:命令必须在docker-compose.yml文件所在位置执行
八、持续集成/持续交付/持续部署(CI/CD)
8.1 什么是持续集成?
持续集成(Continuous Integration,简称CI),是一种软件开发实践,指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。通俗一点来讲,就是绑定项目的代码仓库,SVN或者Git库,自动抓取新的代码,完成构建,甚至执行测试,反馈结果。
持续集成 |
8.2 什么是持续交付?
持续交付(Continuous delivery,简称CD),指的是将集成后的代码部署到更贴近真实运行环境的「类生产环境」中,进行系统测试。如果代码没有问题,可以继续手动部署到生产环境中。
持续交付 |
8.3 什么是持续部署?
持续部署(continuous deployment,简称CD)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进⼊生产阶段。
持续部署 |
8.4 CI/CD中相关名词
持续 (Continuous):不断的获取反馈,响应反馈<br /> 集成 (Integration):编译、测试、打包<br /> 部署 (Deployment):应用组件或基本设施的代码或配置变更在产品环境生效称为“部署”<br /> 发布 (Release):具有业务影响的功能变化对最终用户可见称为“发布”<br /> 交付 (Delivery):可以理解为从开发分支到测试分支之间的阶段,更多的强调的是一种能力。开发有能力频繁的部署,业务有能力随时发布
8.5 CI/CD的优点
1、能够快速暴露错误<br /> 2、保证代码提交质量<br /> 3、定位错误更加容易<br /> 4、降低整体集成风险<br /> 5、促进产品快速迭代
九、CI/CD工具Jenkins
9.1 什么是jenkins?
简单来说,Jenkins是一款开源 CI/CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序
官网地址
Jenkins
9.2 使用Jenkins实现CI/CD的具体流程
jenkins实现CI/CD的流程图 |
|
9.3 Jenkins安装
1、准备一台CI服务器(CentOS系统),提前安装好jdk、tomcat<br /> 2、下载Jenkins的war包,上传部署到CI服务器的tomcat中的webapps文件夹下
jenkins安装流程 |
3、启动tomcat<br /> 4、通过浏览器访问CI服务器:[http://CI-Server-IP:8080/jenkins/](http://CI-Server-IP:8080/jenkins/)
jenkins安装流程 |
5、根据提示获取管理员账号,并且登录<br /> 6、Jenkins插件的安装,选择第一个安装默认插件(比较耗时甚至失败,可以忽略)
jenkins安装流程 |
7、重新设置管理员账号后,登录进首页
jenkins安装流程 |
9.4 CI服务器上安装Git
9.4.1 为什么需要在CI服务器上安装GIT?
因为CI服务器需要从代码仓库上拉取最新的代码,所以需要安装git
9.4.2 基于yum安装git
执行命令
yum -y install git
注意
yum安装git被安装在/usr/libexec/git-core目录下
9.5 CI服务器上安装Maven
9.5.1 为什么需要在CI服务器上安装Maven?
因为CI服务器需要将最新拉取的代码进行编译打包,对于Java工程都是基于Maven构建,所以需要安装Maven工具(如果集成部署的工程是基于其他构建工具需要根据实际场景调整)
9.5.2 基于yum安装maven
1、创建并进入文件夹:/usr/local/maven<br /> 2、执行命令下载maven
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
3、解压
tar -zvxf apache-maven-3.6.1-bin.tar.gz
4、编辑配置文件/usr/local/maven/apache-maven-3.6.1/conf/settings.xml,设置阿里云加速
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
注意
可以不用配置环境变量,最后maven的执行者是jenkins,我们告诉jenkins绝对路径即可,环境变量是方便执行人工命令的
9.6 Jenkins安装相应的插件
1、进入插件管理页面
jenkins安装插件 |
2、搜索相关插件
jenkins安装插件 |
3、安装如下插件
git(用于git服务器拉取代码)
Maven Integration(用来构建Maven工程)
Publish Over SSH(用于将相关代码发布到远程服务器上)
9.7 配置Jenkins全局工具
1、进入全局工具配置
jenkins全局工具配置 |
2、配置JDK
配置JDK |
3、配置git(如果没有这个选项,说明git插件没有安装成功,需要重新安装git插件)
配置GIT |
4、配置Maven
配置Maven |
9.8 配置Jenkins系统设置
1、进入系统设置
配置系统设置 |
2、准备一台部署服务器(部署服务器上安装好docker/docker-compose)<br /> 3、配置SSH连接远程部署服务器(如果没有这个配置,说明ssh插件未安装成功)
配置ssh远程连接 |
9.10 创建Jenkins项目
1、选择新建项目<br /> 2、设置项目名称,并且选择maven项目(如果没有maven项目选择,说明maven插件安装失败)
构建项目 |
3、配置项目源码管理
构建项目 |
4、配置构建命令
构建项目 |
5、配置构建后操作,这里选择ssh,将构建结果发送到部署服务器进行部署
构建项目 |
6、设置远程发布的配置
构建项目 |
source files 设置我们需要将什么文件上传到部署服务器
remote diretory 用于设置远程目录,所有上传的文件会上传到部署服务器的这个目录下
exec command 文件上传完成后,执行的命令(我们这里设置的是制作镜像并且运行的命令)
9.11 Jenkins构建并且部署项目
1、将最新的代码上传到代码仓库<br /> 2、在Jenkins端执行代码构建
构建项目 |
3、查看构建日志
构建项目 |
4、访问部署服务器,查看最新的服务是否已经可以访问
9.12 附录
9.12.1 源码结构图
源码结构图 |
9.12.2 Dockerfile内容
FROM openjdk:8
WORKDIR /usr/local/software
COPY ./jenkinsTest.jar ./
EXPOSE 8888
CMD java -jar jenkinsTest.jar
仅供参考,具体写法需要根据实际业务改变
9.12.3 docker-compose.yml内容
version: "3.1"
services:
jenkinstest:
build:
context: ./docker
dockerfile: Dockerfile
ports:
- 8888:8888
container_name: myproject
仅供参考,具体写法需要根据实际业务改变
十、Idea整合Docker部署
10.1 开启docker服务的远程连接
进入docker服务文件
vim /usr/lib/systemd/system/docker.service
修改配置
重启docker服务
systemctl daemon-reload systemctl restart docker
注意
如果开启了防火墙,记得开放2375的端口
10.2 idea下载插件并且配置
idea下载插件
配置插件
文章来源:https://www.toymoban.com/news/detail-757467.html
10.3 SpringBoot整合Docker文章来源地址https://www.toymoban.com/news/detail-757467.html
FROM openjdk:8
WORKDIR /usr/local
COPY xxx.jar ./
EXPOSE 8080
CMD java -jar xxx.jar
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<!-- 镜像名称 guoweixin/exam-->
<imageName>ken/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://docker服务path:2357</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>.</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
//执行maven的打包命令,将自动通过Dockerfile构建镜像并且上传到远程的docker服务器上
package
到了这里,关于容器化技术-Docker的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!