数据结构 JAVA学习 方法 java 线程池 audio scripting 后台界面模板 多商户商城模板 js事件绑定 虚拟机重启命令 mysql统计数量 java常用的包 python输入输出 python基础语法 python运算符优先级 python搭建网站 java地址 java的for循环 java终止线程 java的socket通信 java日期类 java怎么安装 java字符串函数 props 微信小程序提示框 选择模拟位置信息应用 网络适配器下载 ps扭曲变形 天正建筑2007 如何用ai设计字体 js获取子元素 安卓游戏辅助 360越狱版 dnf传说 思源黑体 幽灵推 qq悄悄话怎么知道对方是谁 苹果手机怎么微信双开 地图数据采集 轮播图代码
当前位置: 首页 > 学习教程  > 编程语言

Docker从入门到SpringBoot SpringCloud项目部署方案

2020/7/24 10:00:53 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

Docker

注:文中命令{ } 属于必填项,[ ] 属于可选填项

Cita 2020-06-19 14:40 Docker官网

docker图标详解

容器(Container):是基于镜像创建的运行实例,一个容器中可以运行一个或多个应用程序(jdk+开发的java应用),可以理 解成容器包含:一个精简版的Linux环境+要运行的应用程序。

仓库(Repository):集中存放镜像文件的场所,分为公有仓库(Public)私有仓库(private)

  • 公有仓库:Docker公司运营的公共仓库叫做Docker Hub,存放了数量庞大的镜像供用户下载,用户可以在Docker Hub注册账号,分享并保存自己的镜像。(注:在Docker Hub下载镜像巨慢)。
  • 国内的公有仓库包括阿里云、网易云等,可以提供大陆用户更稳定快速的访问。

CentOS7安装Docker要内核是3.10_x64以上

// 查看linux内核版本
# uname -r
3.10.0-1062.12.1.el7.x86_64

Docker卸载

// 卸载Docker Engine,CLI和Containerd软件包
# yum remove docker-ce docker-ce-cli containerd.io
// 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有镜像,容器和卷
# rm -rf /var/lib/docker 

Docker安装

​ 官网安装地址: https://docs.docker.com/engine/install/centos/#install-using-the-repository

案例使用镜像仓库安装所以需要连接外网

1. 安装前条件

// 切换到root用户
# su root
// 卸载旧版本docker 但镜像,容器,卷和网络会被保留
# yum remove docker \
             docker-client \
             docker-client-latest \
             docker-common \
             docker-latest \
             docker-latest-logrotate \
             docker-logrotate \
             docker-engine

2. 安装此安装根据官网步骤安装(镜像安装)

// 1.安装yum-utils软件包(提供yum-config-manager 实用程序)
# yum install -y yum-utils
# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

// 2.可选操作(开启night或test repository)作用更新版本
# yum-config-manager --enable docker-ce-nightly
# yum-config-manager --enable docker-ce-test
// 开启 关闭 night和test repository
# yum-config-manager --disable docker-ce-nightly  ||  yum-config-manager --enable docker-ce-nightly
# yum-config-manager --disable docker-ce-test  ||  yum-config-manager --enable docker-ce-test

// 3.安装最新版本Docker和容器(版本可根据官网安装方法指定)
# yum install docker-ce docker-ce-cli containerd.io

// 查看docker版本
# docker version

3. 配置镜像下载地址

// 配置的阿里云的镜像地址(阿里云管理后台有每个人的私人镜像加速地址:控制台->产品与服务->容器镜像服务->镜像加速器)
# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://jxxhar25.mirror.aliyuncs.com"]
}

// 修改后重新加载配置文件,重启docker
# systemctl daemon-reload
# systemctl restart docker

4. 镜像容器存放路径containers、image

# cd /var/lib/docker/
containers  image  network  overlay2  plugins  swarm  tmp  trust  volumes

5. docker 守护进程管理

# systemctl start docker/docker.service     # 运行Docker
# systemctl stop docker/docker.service      # 停止Docker
# systemctl restart docker/docker.service   # 重启Docker
# systemctl disable docker/docker.service   # 开机停止Docker守护进程
# systemctl enable docker/docker.service    # 开机启动Docker守护进程

6. docker 信息命令

// docker命令帮助
# docker --help
// 输出: [docker 可选参数 命令] ,可输入查看
Usage:	docker [OPTIONS] COMMAND
    
// 检查docker概要信息
# docker info  
Server:
 Containers: 0  // 容器数
   Running: 0   // 运行容器数
   Paused:  0 
   Stopped: 0
 Images: 0      // 镜像数
 Server Version: 19.03.11
 Docker Root Dir: /var/lib/docker

7.docker 镜像

7.1. 镜像描述

Docker镜像是由文件系统叠加而成(是一种文件存储形式)。最底端是一个文件引导系统,即bootfs。docker容器启动是需要一些文件,而这些文件可以称为Docker镜像。

在这里插入图片描述

7.2. 镜像仓库查找镜像

https://hub.docker.com/

在这里插入图片描述

7.3. 镜像操作

7.3.1 镜像搜索
// 镜像搜索:docker search {镜像名}
# docker search centOS

//镜像名            描述							  关注度       官方的       是否是自动化构建的
NAME               DESCRIPTION                    STARS      OFFICIAL       AUTOMATED
centos             The official build of CentOS.  6055        [OK]                
centos7-ansible    Ansible on Centos7             130                         [OK]
    
// -s:列出关注数大于指定值的镜像:docker search -s [100] [centOS]
# docker search -s 100 centOS
// --no-trunc 显示完整的镜像秒速Description:docker search --no-trunc [centOS]
# docker search --no-trunc centOS
// 查看镜像的元信息
# docker inspect 镜像ID或者镜像名:TAG

7.3.2 镜像拉取
// 镜像拉取:docker pull {镜像名:版本号(标签名)},不加版本号(标签名)默认拉取latest
# docker pull tomcat:9.0

7.3.3 镜像删除
// 镜像删除:docker rmi -f {镜像名ID/镜像名},-f表示强制删除
# docker rmi -f tomcat:9.0

// 列举所有镜像id
# docker images -q
// 批量删除镜像:docker rmi {镜像ID1} [镜像ID2] [...]
# docker rmi 8de95e6026c3 81a4731e5497
// 删除全部镜像
# docker rmi `docker images -q`

// 一键删除带none:none的镜像
# docker rmi $(docker images | grep "none" | awk '{print $3}')

8. 容器 Container

8.1 查看容器

// 查看运行的容器(命令中的container可省略)
# docker container ps
// 查看所有的容器(命令中的container可省略)
# docker container ps -a
// 查看最后一次运行的容器(命令中的container可省略)
# docker container  ps -l
// 查看停止的容器(命令中的container可省略)
# docker container ps -f status=exited 

8.2 容器的创建、进入

/** 守护式容器的创建:docker run [OPTIONS] 镜像名:标签名
 * 例如解析:docker run -i -t -d -p 8081:8080 --name=tom  tomcat
 * OPTIONS: 
 * -i:表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器),通常与 -t 同时使用.
 * -t:启动后会进入其容器命令行,通常与 -i 同时使用;加入 -it 二个参数后,容器创建就能登录进去,即分配一个伪终端.
 * -d:后台运行
 * -p:表示端口映射,格式为: -p 宿主机端口:容器端口
 *			8081:8080 前面的8081是主机端口,8080是容器的端口
 * -v:表示目录映射,格式为: -v 宿主机目录:容器目录
 * --name: 为创建的容器指定一个名称
 */
# docker run --name=tom -d -p 8081:8080 tomcat

/** 进入容器(必须是启动的容器) docker container exec -it tom /bin/bash
* -i:以交互模式运行容器
* -t:分配一个伪终端,即命令行,通常-it组合来使用
* -v:指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读 
* 退出容器:exit
*/
# docker container exec -it {容器名/容器id} /bin/bash


8.3 容器的运行、停止、删除

// 停止正在运行的一个容器
# docker stop {容器名/容器id}
// 停止正在运行的全部容器
# docker stop `docker ps -a -q`

// 启动已运行过的一个容器
# docker start {容器名/容器id}
// 启动已运行过的全部容器
# docker start `docker ps -a -q`

// 删除一个容器(命令中的container可省略)
# docker container rm -f {容器名/容器id}
// 删除所有的容器(命令中的container可省略)
# docker container rm -f `docker ps -a -q` 

// 直接关掉一个容器(像电脑直接按主机上的关机键一样的操作)
# docker kill {容器名/容器id}

8.4容器的日志查看、详细信息

// 查看容器日志,到当前打印位置退出
# docker logs {容器名/容器id}

// 进入日志,不退出,等待继续打印
# docker logs -f {容器名/容器id}

// 查看容器详细信息 可查看容器ID、IP、网关、挂载目录等等...
# docker container inspect {容器名/容器id}
[ 
     {
      "Id": "7817dea82916fc2571140909393ac44b7b74943e51451f3fcdfb886c06c5387e", // 容器id
	  "Created": "2020-06-23T08:08:50.632762561Z",  // 查看创建时间
      "State": { // 查看详细状态
            "Status": "running",
            "Running": true,
            "Dead": false,
            "Pid": 22371
       },
      "HostConfig": {
        "Binds": [ // 查看挂载的目录
            "/home/xhx/dockerApp/docker_tomcat/xhx/hello.txt:/usr/local/tomcat/xhx/hello.txt:ro"
        ]
      },
     "Networks": { // 查看ip和网关ip 
                "bridge": {
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                }
         }
    }
]

9. 配置文件 / 数据 / 日志挂载

​ 说明: 镜像在容器中,如果要改动相应的配置文件就要到容器中,利用挂载功能先把配置文件拷贝到主机中,改动主机中的配置文件,修改容器中的文件。 每次修改了配置文件就要重启容器重新挂载 。

9.1 宿主机和容器文件的拷贝

  1. 主机建立相应的文件夹(配置文件的文件夹 / 数据的文件夹 / 日志的文件夹)

  2. 拷贝容器的文件到主机中

// docker cp 主机文件路径 容器ID或容器名:容器路径 (!主机中文件拷贝到容器中)
# docker cp /home/xhx/dockerApp/docker_tomcat  tomcat9:/usr/local/tomcat/conf/server.xml  

// docker cp 容器ID或容器名:容器路径 主机文件路径 (!容器中文件拷贝到主机中)
# docker cp tomcat9:/usr/local/tomcat/conf/server.xml  /home/xhx/dockerApp/docker_tomcat

在这里插入图片描述

9.2 容器启动挂载文件

容器启动时:加上-v:表示目录映射,格式为: -v 宿主机目录:容器目录(启动时可一次挂载多个文件)

//docker run -itd [-p 8081:8080][-v 主机目录:容器目录][-v 主机目录1:容器目录1] [--name=tomcat] {镜像:TAG}
# docker run -itd -p 8088:8089  -v /home/xhx/dockerApp/docker_tomcat/server.xml/:/usr/local/tomcat/conf/server.xml/ --name=tomcat tomcat

启动容器后查看日志:

# docker logs {容器名/容器ID}

! 挂载文件出现权限不足:
在这里插入图片描述

// 挂载文件权限不足 使用:--privileged=true
# docker run --privileged=true -itd -p 8088:8089  -v /home/xhx/dockerApp/docker_tomcat/server.xml/:/usr/local/tomcat/conf/server.xml/ --name=tomcat tomcat

在这里插入图片描述

操作:1. 修改宿主机文件后

​ 2. 重新启动容器使用 -v 挂载(主机修改的文件,docker自动挂载到docker容器中了)

9.3 挂载目录(文件夹)

// 可以做一个目录的映射,如果目录中文件夹在宿主机有改动,docker容器就会自动更新
// docker run -itd  -v {主机文件夹路径:容器文件夹路径}
# docker run -itd  -v /home/xhx/tomcat/xhx/:/usr/local/tomcat/xhx/ --name=tomcat tomcat

9.4 挂载文件权限只读(Read-Only)

docker容器中的文件是只读权限,不给写入,但是主机的文件还是可以正常操作

// docker run -itd  -v {主机文件夹路径:容器文件夹路径:ro}
# docker run -itd -v /home/xhx/tomcat/xhx/hello.txt:/usr/local/tomcat/xhx/hello.txt:ro  tomcat

10. Docker实战

!使用虚拟机安装切要在Windows访问Mysql需要使用NAT模式做端口映射,或者关掉防火墙。

10.1 MySQL部署

// 拉取MySQL镜像
# docker pull mysql:5.7

// 创建mysql容器:-e MYSQL_ROOT_PASSWORD=123456 mysql需要设置密码
# docker run -itd -p 3307:3306 --name=mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

// 进入容器
# docker exec -it {容器ID/容器名称} /bin/bash

// 容器内操作mysql数据库
#  mysql -u  root -p


10.2 Redis部署

// 拉取Redis最新镜像
# docker pull redis

// 创建redis容器
# docker run -itd -p 6380:6379 --name=redis redis

// 进入容器
# docker exec -it [容器ID/容器名称] /bin/bash

10.3 Tomcat部署WEB项目

// 拉取tomcat最新镜像
# docker pull tomcat

// 创建tomcat容器并把tomcat文件拷贝到主机路径下(将conf目录文件和webapps目录文件复制到主机一份,用于挂载)
# docker cp tomcat:/usr/local/tomcat/conf     /home/xhx/dockerApp/docker_tomcat
# docker cp tomcat:/usr/local/tomcat/webapps  /home/xhx/dockerApp/docker_tomcat

// 启动tomcat容器挂载 /conf和 /webapps目录挂载
# docker run --privileged=true -itd --name=tomcat -p 8080:8080 -v  /home/xhx/dockerApp/docker_tomcat/webapps/:/usr/local/tomcat/webapps/ tomcat:9.0

// 将项目放在主机目录下的 /home/xhx/dockerApp/docker_tomcat/webapps中,如果修改配置文件直接在主机下的conf
# cd /home/xhx/dockerApp/docker_tomcat/
# ls

// 测试将一个新页面放入访问(主机目录/home/xhx/dockerApp/docker_tomcat/webapps/html/hello.html)
[webapps]# touch /html/hello.html
[html]# vim hello.html 

// 直接访问:虚拟机ip:8080 查看是否部署成功(虚拟机记得开放端口或关闭防火墙)
192.168.136.128:8080/html/hello.html

10.3 RabbitMQ部署

// 拉取rabbitMQ镜像,但rabiitMQ是有管理页面的所以要拉取management版本
# docker pull rabbitmq:management

// 创建rabbitMQ容器,要做二个端口映射 
# docker run -itd --name=rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management

// 测试是否启动成功:虚拟机ip:15672(虚拟机记得开放端口或关闭防火墙)
192.168.136.128:15672 guest guest

11. 上传、备份和迁移

11.1 容器保存为镜像传到镜像仓库上

11.1.1 上传到Docker Hub

​ 构建镜像,上传到Docker Hub(需要有docker Hub账号)

// 1.将一个容器提交为一个新的镜像
// docker commit [-m="描述"] [-a="作者"] {容器名称/容器ID} {新镜像名称:版本号}
# docker commit -m="我的镜像redis" -a="xhx" redis myredis:1.0  或 docker commit redis myredis:1.0

// 2.登录到docker hub
# docker login
输出: Login Succeeded 字样登录成功
    
// 3. 给镜像打上tag标签(把这个镜像指定到一个docker hub账号上)
// docker tag {镜像名:版本号} {账户id +/+ 镜像名:版本号}
# docker tag myredis:1.0 xinghongxiang/myredis:1.0
    
 # docker images  // 查看准备推送的镜像
 REPOSITORY              TAG           IMAGE ID            CREATED             SIZE
 myredis                 1.0           6daa4440e718        3 minutes ago       104 MB
 xinghongxiang/myredis   1.0           6daa4440e718        3 minutes ago       104 MB
    
// 4.将打上tag的镜像推送的docker hub上
// docker push {打上tag的镜像包:tag版本}
# docker push xinghongxiang/myredis:1.0
    

11.1.2 上传到阿里云
11.1.2.1 推送镜像

​ 登录阿里云:https://account.aliyun.com/login/login.htm? 配置镜像仓库

在这里插入图片描述

新增阿里镜像仓库
在这里插入图片描述
在这里插入图片描述

查看上传到阿里云镜像步骤

在这里插入图片描述

/* 推送镜像到ali云镜像仓库(每个人推送的地址都不一样,根据自己ali提示步骤进行)
 * 登录到ali云镜像仓库,需要输入密码
 */
# docker login --username=lifeisalvxing registry.cn-hangzhou.aliyuncs.com

// 镜像ID:docker images 查看到的镜像id,镜像版本号可与当前镜像版本号不一致,已填写的推送到ali镜像仓库为主
# docker tag {镜像ID}  registry.cn-hangzhou.aliyuncs.com/xhx-image/jdk:{镜像版本号}

// 推送到ali镜像仓库
# docker push registry.cn-hangzhou.aliyuncs.com/xhx-image/jdk:{镜像版本号}


例如:推送上面的jdk镜像到阿里云镜像仓库

在这里插入图片描述

查看推送到阿里云的镜像

在这里插入图片描述

11.1.2.2 拉取镜像
// 从阿里云拉取自己账号镜像
# docker pull registry.cn-hangzhou.aliyuncs.com/xhx-image/jdk:[镜像版本号]

在这里插入图片描述

11.2 备份镜像

11.2.1 镜像打成tar包
// 镜像打成tar包:docker save -o {xxx.tar} {镜像名称:tag版本}。打包生成在当前路径
# docker save -o myredis.tar myredis:1.0
# ls 

11.2.1 tar包镜像解压
// tar包解压成镜像
# docker load -i myredis:1.0
# docker images

12. Dockerfile语法

​ Dockerfile用于构建一个新的Docker镜像的脚本文件,是由一系列命令和参数构成的脚本。

例如:运行java项目步骤:

		1.  java项目
  		2.  maven build -> jar(maven将java项目构建成jar或war)
        3.  java -jar xxx.jar(运行项目)

则Dockerfile为:

  • 构建新的镜像步骤:

    1. 编写Dockerfile文件 .
    2. 通过docker build命令生成新的镜像 .
    3. 通过docker run 命令运行 .

12.1. Dockerfile文件

# 基础依赖镜像
FROM scratch 

# 镜像的一些描述或作者信息
MAINTAINER The CentOS Project

# 在基础镜像上又增加一个镜像
ADD centos-7-x86_64-docker.tar.xz / 

# 标签说明
LABEL org label-schema.schema-version="1.0" \ 
      org.label-schema.name="CentOS Base Image" \
      org.label-schema.build-date="20190305"

# 默认执行的命令,创建运行容器时最后会加上/bin/bash
# 所以创建容器时可不加 /bin/bash,既如:docker run -itd --name="centOS" centOS:7
CMD ["/bin/bash"] 

12.2. Dockerfile常用指令

指令(大写的是保留字) 作用 参考
FROM image_name:tag 基础镜像,基于哪个基础镜像启动构建流程. dockerhub官网镜像版本
MAINTAINER user_name 镜像的创建者姓名和邮箱地址等等… centos6.8
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压. centos6.8
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压. centos6.8
ENV key value 设置环境变量(可以写多条). tomcat7
RUN command 是Dockerfile的核心部分(可以写多条),运行到当前行要执行的其它命令. tomcat7
WORKDIR path_dir 设置工作目录,当创建容器后,命令终端默认登录进来后所在的目录,未指定则为根目录 / tomcat7
EXPOSE port 当前对外暴露的端口号,使容器内的应用可以通过端口和外界交互 tomcat7
CMD argumemnt Dockerfile中可以有多个CMD,但是只有最后一个会生效。在构建容器时,会被docker run 后面指定的参数覆盖. tomcat7
ENTRYPOINT argument CMD相似,但是并不会被docker run指定的参数覆盖,而是追加参数
VOLUME 将宿主机文件夹挂载到容器中 mysql

12.3 Dockerfile构建镜像

构建镜像步骤:
  • 书写 Dockerfile 文件

  • 构建镜像

    /* 构建一个镜像语法
     * 注意后边的空格( )和点(.) 不要省略,点(.)表示当前目录
     * -f 指定Dockerfile文件所在路径与文件名。如果未指定 -f 值,则找当前目录下名为Dockerfile的构建文件
     */
    # docker build [-f 路径/文件名] -t 生成的镜像名:标签名 .
    
    
  • 启动镜像构建的容器

12.3.1 镜像文件Dockerfile的编写
  12. 案例:构建一个jdk镜像
// 依赖jdk包所以要下载jdk tar包:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
# ls
jdk14_linux-x64.tar.gz

// 新建一个Dockerfile文件
# vim Dockerfile

# 来自基础镜像
FROM centos:7

# 指定镜像创建者信息
MAINTAINER xhx

# 切换工作目录
WORKDIR /usr/local

# 创建一个存放jdk的路径
RUN mkdir /usr/local/java

# 将jdk压缩包复制并解压到容器中
ADD jdk14_linux-x64.tar.gz /usr/local/java/

# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk-14.0.1
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

CMD ["/bin/bash"]

12.3.2 构建镜像
// 构建jdk14镜像
# docker build -t jdk:14 .
Successfully built 
    
// 查看构建的镜像
# docker images
REPOSITORY          TAG            IMAGE ID            CREATED             SIZE
jdk                 14             81ae38856bc1        9 minutes ago       531 MB
    
//  启动jdk14镜像构建的容器
# docker run -itd --name=jdk14 -p 7777:7777 jdk:14
    
// 进入容器内查看是否构建成功
# docker exec -it jdk14 /bin/bash
[容器内] # java -version
java version "14.0.1" 2020-04-14

​ 查看构建后镜像并验证是否构建成功且启动

在这里插入图片描述

13. 微服务自动部署到Doker

  1. 传统手动部署:

    首先基于源码打包生成jar包(或war包)上传至虚拟机并拷贝至JDK容器。

  2. 通过Maven插件自动部署;对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这里学习如何自动部署,这也是企业实际开发中经常使用的方法。

13.1 采用Maven插件自动部署微服务

镜像推送到阿里云镜像仓库 和 宿主机上

  1. 后面要在cmd命令行窗口使用mvn指令,所以要在本地配置Maven环境变量 >>> 自行百度配置

    查看是否配置成功:cmd命令窗口

    在这里插入图片描述

  2. 修改Dokcer配置

    2.1 修改宿主机的docker配置,让其docker服务可以远程访问,暴露docker服务端口号2375

    # vim /lib/systemd/system/docker.service
    
    

    ExecStart=后添加配置 0.0.0.0代表所有ip,也可指定ip。

    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    
    

在这里插入图片描述

// 刷新配置,重启服务
# systemctl daemon-reload
# systemctl restart docker


验证是否生效(虚拟机关闭防火墙或者把端口开放暴露出来)

访问:http://ip:2375/version
例如:http://192.168.136.128:2375/version

在这里插入图片描述

  1. 在Maven的安装目录下的setting.xml文件中添加阿里云用户名和密码

    (!!!可选步骤是否推送到阿里云镜像仓库,不推送下面的pom.xml中推送到阿里云镜像仓库就不用配置了)

    修改文件路径:apache-maven-3.6.0\conf\setting.xml

    <servers>
       <server>
    	  <!--maven的pom中可以根据这个id找到这个server节点配置 -->
          <id>docker-aliyun</id>
    	  <!--阿里注册的账号 -->
          <username>账号</username>
    	  <!--阿里注册的密码-->
          <password>密码</password>
       </server>
    </servers>
    
    
  2. 在微服务项目pom.xml增加插件配置

    原文件路径: 微服务部署插件\docker-maven自动部署pom.xml

    <build>
        <!-- 当前工程微服务的名称 最后生成的就是app.jar-->
        <finalName>app</finalName>
        
        <plugins>
            <!--maven基础依赖插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--生成镜像相关配置-->
                <configuration>
                    <!-- 将forceTags设为true,这样就会覆盖构建相同标签的镜像  -->
                    <forceTags>true</forceTags>
                    <!-- 远程 docker 宿主机地址, 生成镜像到docker中 -->
                    <dockerHost>http://192.168.136.128:2375</dockerHost>
                    <!--内容是之前修改的maven的settings.xml配置文件中,server节点的id-->
                    <serverId>docker-aliyun</serverId>
                    <!-- 镜像名:阿里云镜像仓库地址 
                        (1.从新建的仓库公网地址处复制 2. 从Registry中拉取镜像处复制此地址)
                         ${project.artifactId}引用当前微服务工程名
                        (需要在阿里镜像仓库上面新建一个 ${project.artifactId}的仓库名称)
                         ${project.version}引用当前微服务工程版本号
                         registry.cn-hangzhou.aliyuncs.com/mengxuegu/demo:0.0.1-SNAPSHOT 
    				-->
                    <imageName>
        		registry.cn-hangzhou.aliyuncs.com/xhx-image/${project.artifactId}:${project.version}
                    </imageName>
                    <!--基础镜像 像Dockerfile中的FROM-->
                    <!--<baseImage>jdk:1.8</baseImage>-->
                    <baseImage>java</baseImage>
                    <!--类似于Dockerfile的ENTRYPOINT指令-->
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>  <!-- 指定打包的资源文件 -->
                            <!-- 指定要复制的目录路径,这里是当前目录 -->
                            <targetPath>/</targetPath> 
                            <!-- 指定要复制的根目录,这里是target目录 -->
                            <directory>${project.build.directory}</directory> 
                            <!-- 这里指定最后生成的jar包 -->
                            <include>${project.build.finalName}.jar</include> 
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    
    
  3. 在阿里云创建${project.artifactId}的仓库(也可不创建,会自动创建)

在这里插入图片描述

  1. 在CMD的命令提示符下(或Idea下的终端Terminal,按着项目名拖到里面即可进入当前项目路径下 ), 进入到微服务项目的工程所在目录,输入以下命令进行打包和上传镜像

    // mvn clean 打包 构建镜像 推送
    # mvn clean package docker:build -DpushImage
    
    

    查看你推送到阿里云镜像仓库的镜像

在这里插入图片描述

docker服务器的宿主机上

在这里插入图片描述

把此镜像启动成一个容器,(别忘了开放宿主机的8081端口)

在这里插入图片描述

然后访问

在这里插入图片描述

13.2 用Dockerfile文件部署微服务(例)

#基础镜像为openjdk:8u242-jdk
FROM openjdk:8u242-jdk

#签名
MAINTAINER author "author@honeycombtech.com"

RUN rm -rf /home/honeycombtech/demo*

# 添加jar
ADD ./demo.jar /opt/honeycombtech/demo/demo.jar

# 添加自定义文件
COPY /customfile /opt/honeycombtech/demo/customfile

# 映射日志目录
VOLUME ["/home/honeycombtech/logs/demo","/home/honeycombtech/logs/demo"]

# 暴露端口,自定义
EXPOSE 18090

# 默认工作目录
WORKDIR /opt/honeycombtech/demo/

# 启动命令
CMD ["java", "-Xms256m", "-Xmx512m", "-Xss256k", "-jar", "demo.jar"]


本文链接: http://www.dtmao.cc/news_show_50198.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?