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

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 argumemntDockerfile中可以有多个CMD,但是只有最后一个会生效。在构建容器时,会被docker run 后面指定的参数覆盖.tomcat7
ENTRYPOINT argumentCMD相似,但是并不会被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"]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值