容器化技术-Docker

一、引言


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)-云原生介绍 - 阿里云

需要注册个账号后登录上去,点击“管理中心”

选择“镜像加速器”

按照官方的操作文档修改配置文件即可
注意:如果/etc/docker/daemon.json文件不存在,创建一个即可

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下载插件

配置插件

10.3 SpringBoot整合Docker

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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
openmediavault-docker-gui是一个基于OpenMediaVault和Docker的图形用户界面工具。OpenMediaVault是一个开源的网络附件存储(NAS)解决方案,通过提供基于Web的管理界面来简存储设备的设置和管理。而Docker是一种轻量级的容器平台,可以帮助用户轻松地部署和管理应用程序。 openmediavault-docker-gui的目的是为OpenMediaVault提供一个简单易用的界面,方便用户使用Docker来运行各种应用程序。通过该界面,用户可以直观地管理和监控Docker容器,包括创建、删除、启动和停止容器,以及查看容器的状态和日志信息。 通过openmediavault-docker-gui,用户可以无需通过命令行操作来管理Docker容器,大大降低了使用的门槛。它提供了一个直观且易于导航的界面,用户可以通过简单的操作完成复杂的任务,比如安装和配置容器的应用程序。 此外,openmediavault-docker-gui还提供了一些附加功能,如容器映像的导入和导出、网络设置的配置以及数据卷的管理。用户可以根据自己的需求来进行自定义配置,同时还可以通过插件系统来扩展功能。 总而言之,openmediavault-docker-gui通过提供一个友好的图形用户界面,使得用户能够更方便地管理和使用Docker容器,并且与OpenMediaVault的集成使得整个过程更加简单和高效。它为用户提供了一个强大的工具,帮助他们充分利用容器技术来构建和管理他们的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值