分布式之Docker

1 Docker概述

1.1 虚拟化技术和分类

  • 虚拟化(英语:Virtualization)是一种计算机资源管理技术,是将计算机的各种硬件资源,比如服务器、网络、CPU、内存及存储等,予以抽象和转换后呈现出一套新的硬件资源环境,在这一套新的硬件环境下可以安装我们的操作系统,部署我们的应用运行环境等,它打破计算机硬件资源不可切割的障碍,使我们可以比原本的计算机硬件资源结构更好的方式来组合应用这些资源。
  • 虚拟化技术的分类,虚拟化一般分为:
    硬件级虚拟化(hardware-level-virtualization)
    操作系统级虚拟化(os-level-virtualization)
    硬件级虚拟化 是运行在硬件之上的虚拟化技术,它的核心技术是Hypervisor 发音 [,haipə’vaizə],Hypervisor 是一种运行在基础物理服务器硬件之上的软件层,可以虚拟化硬件资源,例如 cpu、硬盘、内存资源等。然后我们可以通过在虚拟化出来的资源之上安装操作系统,这也就是所谓的虚拟机。像 VMWare, VirtualBox 等都是使用该技术,我们经常使用的桌面版的虚拟机 VMWare 就是采用这种虚拟化技术。
    通过 Hypervisor 层,我们可以创建不同的虚拟机,并且每个虚拟机都是分离、独立的,这样一来,我们就可以在一台硬件服务器和本地操作系统之上虚拟化出多个服务器,用来部署我们的应用;

1.2 虚拟化技术优缺点

  • 虚拟化技术的优点:
    一台物理服务器可以虚拟化出多个虚拟的服务器,让计算机资源得以充分利用;
  • 虚拟化技术的缺点:
    1、每创建一个虚拟机的时候,都会创建一个操作系统,这个操作系统会占用很多资源,这样无疑大大的增加了资源的消耗,当安装的虚拟机越多,资源消耗就越多。
    2、环境兼容性问题,开发时的环境运行正常,部署到虚拟机环境测 试则有可能发生错误;

1.3 容器技术发展

基于硬件级虚拟化技术的缺点和不足,后续又发展出来了另一种虚拟化技术,即操作系统级虚拟化技术;
操作系统级虚拟化 是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,该技术也称为容器化技术。
在容器化技术领域,Docker 是目前最流行的一种实现。Docker 发布于 2013 年,Docker 基于 LXC 技术,LXC 是 Linux 平台上的容器化技术实现。
注:LXC 是 Linux Container 的简写,它是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,它与宿主机使用同一个内核,性能损耗小,这种技术是 Linux 提供的,但是直到 Docker出世,该技术才被发挥出来。

1.4 Docker定义

  1. Docker 是一个开源的应用容器引擎,它基于 Google 公司推出的Go 语言实现,项目代码托管在 GitHub 上进行维护;https://github.com/docker/docker-ce
  2. Docker 技术让开发者可以打包他们的应用以及依赖包到一个可移
    植的容器中,打包好的容器可以发布到任何流行的 Linux 服务器上运 行,这样就可以解决开发环境与运维环境不一致的问题了,所以容器技术解决了开发和运维之间的矛盾,让开发专注于开发,运维专注于运维,不要被环境问题所打扰;
  3. Docker 彻底释放了虚拟化的威力,极大降低了计算机资源供应的成本,Docker 重新定义了程序开发测试、交付和部署过程,Docker 提出了“构建一次,到处运行”的理念,让应用的开发、测试、部署和分发都变得前所未有的高效和轻松!
  4. Docker 是一种轻量级的操作系统虚拟化解决方案,Docker 的基础是 Linux 容器(LXC)技术,在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单;
  5. Docker 自开源后受到广泛的关注,Docker最早是基于Ubuntu开发的,但后续 CentOS、Debian、Fedora 等主流的 Linux 操作系统都支持 Docker;总结:简单地说,Docker 是对软件和其依赖环境的标准化打包,应用之间相互隔离,共享一个 OS Kernel(解决了资源浪费的问题),可以运行在很多主流操作系统上;但是也需要澄清一下,Docker 本身不是容器,Docker 只是管理容器的引擎。

1.5 容器与虚拟机区别

  • 容器是将代码和环境的关系打包在一起的一个集合,而虚拟机是在物理层面上,分出来的一个操作系统;
    多个容器可以运行在同一台物理服务器上,并共享一个操作系统的内核资源。多个虚拟机也可以运行在同一台机器上,但每个虚拟机都需要一个完整的操作系统;
  • 容器是在本地操作系统层面上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术方式则需要单独安装每个虚拟机的操作系统。
特性容器虚拟机
启动秒级分钟级
硬盘空间一般为几十 MB一般为 10GB
性能接近原生弱于原生
系统支持量单机支持上千个容器一般几十个
操作系统与宿主机共享 OS宿主机OS上运行虚拟机 OS

1.6 Docker优势

  1. Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。
  2. Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
  3. 容器除了运行其中的应用外,基本不消耗额外的系统资源,使得应用的性能很高。传统虚拟机方式运行 10 个完全不同的应用可能我们会起 10 个虚拟机来部署,而 Docker 只需要启动 10 个隔离的应用即可。
  4. Docker 可以更快速的交付和部署,大量地节约开发、测试、部署的时间,对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
  5. 更高效的虚拟化,Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
  6. 更轻松的迁移和扩展,Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,这种兼容性可以让用户轻松地把一个应用程序从一个平台直接迁移到另一个平台。

2 Docker使用

2.1 版本

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。

  • Docker CE 即社区免费版,可永久免费使用;
  • Docker EE 即企业版,功能更全,更强调安全,但需付费使用; 本课程介绍 Docker CE 版本,目前 Docker 版本为 18.03

Docker 官方网站:https://www.docker.com/

2.2 安装

首先,我们知道 Docker 并不是容器,它是一个管理容器的引擎。
Docker 支持 CentOS 6 及以后的版本;
CentOS7 系统可以直接通过 yum 进行安装:
安装前可以查看一下系统是否已经安装了 Docker:

yum list installed | grep docker

安装:yum install docker -y
安装后,使用 docker –version(docker version,docker -v)查看 docker
是否安装成功,
卸载:

yum remove docker.x86_64 -y 
yum remove docker-client.x86_64 -y 
yum remove docker-common.x86_64 -y

2.3 启动

安装之后启动 Docker 服务;
启动:systemctl start docker 或者 service docker start
停止:systemctl stop docker 或者 service docker stop
重启:systemctl restart docker 或者 service docker restart
检查 docker 进程的运行状态:
systemctl status docker 或者 service docker status
查看 docker 进程:ps -ef | grep docker

解决问题 # service docker start docker: unrecognized service
https://blog.51cto.com/u_12976213/2546813

2.4 服务信息

docker info 查看 docker 系统信息
docker 查看所有的帮助信息
docker commond –help 查看某个 commond 命令的帮助信息

2.5 使用

Docker 的运行机制:Docker 并不是容器,而只是一个管理容器的引擎;
Docker 的底层运行原理:

Docker 服务启动 → 下载镜像 → 启动该镜像得到一个容器 → 容器里运行着我们想要的程序;

根据 Docker 的运行机制,我们将按照如下步骤运行第一个 Docker 容 器

  1. 将 Docker 服务启动;

  2. 下载一个镜像,Docker 运行一个容器前需要本地存在有对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库https://hub.docker.com)。
    CentOS 下怎么下载(pull)镜像?
    从 docker hub 官网搜索要使用的镜像,也可以在命令行使用命令搜索要使用的镜像,比如 docker search tomcat 进行搜索,然后下载所需要的镜像:
    下载镜像:docker pull tomcat
    运行镜像:docker run tomcat 前台运行, 要后台运行,加参数 -d 显示本地已有的镜像:docker images
    在列出信息中,可以看到几个字段信息REPOSITORY:来自于哪个仓库,比如 docker.io/tomcat

    TAG:镜像的标记,比如 latest IMAGE ID:镜像的 ID 号(唯一)
    CREATED:创建时间
    SIZE:镜像大小
    
  3. 启动下载下来的镜像得到一个容器:docker run -d docker.io/tomcat 或者 docker run -d 41a54fe1f79d
    默认是前台启动,如果需要后台启动,指定-d 参数;
    通过 ps -ef | grep tomcat 查看,检查 tomcat 镜像是否启动容器成功;

进入 Docker 容器
进入容器:docker exec -it cef0d139bfd6 bash
其中 i 表示交互式的,也就是保持标准输入流打开; t 表示虚拟控制台,分配到一个虚拟控制台;
退出容器:exit
客户机访问容器
从客户机上访问容器,需要有端口映射,docker 容器默认采用桥接模式与宿主机通信,需要将宿主机的 ip 端口映射到容器的 ip 端口上
停止容器:docker stop 容器 ID/名称
启动容器:docker run -d -p 8080:8080 docker.io/tomcat 或者 41a54fe1f79d

3 Docker核心组件

3.1 Docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建。
镜像与容器的关系类似于面向对象编程中的类与对象的关系。

Docker面向对象
镜像
容器对象

3.2 Docker核心要素

Docker 包括三个核心要素镜像(Image)容器(Container)仓库(Repository)
理解了这三个概念,就理解了 Docker 的整个生命周期。
Docker 的运行离不开以上核心几个组件的支持,Docker 的成功也是拜这几个组件所赐。
有人会误以为,Docker 就是容器,但 Docker 不是容器,而是管理容器的引擎。

3.3 镜像

  1. 镜像的基本概念
    Docker 镜像就是一个只读的模板,可以用来创建 Docker 容器。
    例如:一个镜像可以包含一个完整的 centos 操作系统环境,里面仅安装了 mysql 或用户需要的其它应用程序。
    Docker 提供了一个非常简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
  2. 镜像的组成结构
    镜像是由许多层的文件系统叠加构成的,最下面是一个引导文件系统bootfs,第二层是一个 root 文件系统 rootfs,root 文件系统通常是某种操作系统,比如 centos、Ubuntu,在 root 文件系统之上又有很多层文件系统,这些文件系统叠加在一起,构成 docker 中的镜像;
  3. 镜像的日常操作
    • 下载镜像,比如下载 redis 镜像:docker pull redis:latest
      reids 是查询到的镜像名称,latest 是镜像的标签 tag获取一个镜像有两种方式,一种是从官方镜像仓库下载,一种是自己通过 Dockerfile 文件构建。如果有官方镜像,我们就不必自己用 Dockerfile 文件构建了,除非官方没有才会自己去 Dockerfile 文件构建;
    • 列出已经下载的镜像(images):docker images,或者 docker images redis
    • 运行镜像:docker run -d redis 其中-d 表示在后台运行,然后通过 ps -ef | grep redis 可以查到 redis 进程
    1. 查看容器镜像的状态:docker ps
      通过 docker exec -it a8584016f9b6(镜像 ID) bash 进入 redis 容器
    2. 删除镜像:docker rmi redis:latest 注意是 rmi,不是 rm,rm 是删除容器;

3.4 容器

  1. 容器的基本概念
    容器是从镜像创建的运行实例。它可以被启动、停止、删除。每个容器都是相互隔离的、保证安全平台。可以把看做一个简易版的 Linux环境,包括 root 用户权限、进程空间、用户空间和网络空间和运行在其中的应用程序。
    Docker 利用容器来运行应用,镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
  2. 容器的日常操作
    启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。
    通过镜像启动容器:docker run -d redis
    查看运行中的容器:docker ps
    查看所有的容器:docker ps -a
    停止容器:docker stop 容器 id 或容器名称
    已经停止的容器,我们可以使用命令 docker start 来启动。
    开启容器:docker start 容器 id 或容器名称
    因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
    删除容器:docker rm 容器 id 或容器名称
    删除容器时,容器必须是停止状态,否则会报错;
    进入容器:docker exec -it 容器 id 或容器名称 bash
    还可以使用 docker inspect + 容器 id 或容器名称 查看容器的更多信息;
    停用全部运行中的容器:docker stop $(docker ps -q)
    删除全部容器:docker rm $(docker ps -aq)
    一条命令实现停用并删除容器:docker stop $(docker ps -q) & docker rm -f $(docker ps -aq)

3.5 仓库

  1. 仓库的基本概念
    仓库是集中存放镜像文件的场所,有时候会把仓库和仓库注册服务器(Registry)看做同一事物,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag);
    仓库分为公开仓库(Public)和私有仓库(Private)两种形式;
    最大的公开仓库是 Docker Hub (https://hub.docker.com/),存放了数量庞大的镜像供用户下载;当然,用户也可以在本地网络内创建一个私有仓库;
    当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来即可;
    注:Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务;
  2. 仓库的日常操作
    用户可通过 docker search 命令来查找官方仓库中的镜像:docker search rabbitmq
    可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建;官方的镜像说明是官方项目组创建和维护的,automated 资源允许用户验证镜像的来源和内容;
    根据是否是官方提供,可将镜像资源分为两类;
    • 一种是类似 centos 这样的基础镜像,被称为基础或根镜像。这些基础镜像是由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字;
    • 还有一种类型,比如 tianon/centos 镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀。可以通过前缀 user_name/ 来指定使用某个用户提供的镜像,比如 tianon 用户;
      并利用 docker pull 命令来将它下载到本地:docker pull rabbitmqdocker pull centos

4 Docker使用例子

4.1 Docker安装Mysql

#下载 MySQL 镜像:

docker pull mysql:latest (安装的是 mysql 8.0
docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

其中-e 是指定环境变量

#进入容器:

docker exec -it 3e8bf7392b4e bash

#登录 MySQL:

mysql -u root -p 

#修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

#授权远程登录访问:

CREATE USER 'wkcto'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO ' wkcto'@'%';

4.2 Docker安装Nginx

#下载 Nginx 镜像:

docker pull nginx
docker run -d -p 80:80 nginx

#进入容器:

docker exec -it 3e8bf7392b4e bash

#浏览器访问 Nginx:

http://192.168.230.128:80

#Nginx 部署静态网站: 将 linux 的文件拷贝到 docker 容器某个目录下:

docker cp /root/test.html bf8a58328e18:/usr/share/nginx/html

4.3 Docker安装Zookeeper

#下载 Zookeeper 镜像:

docker pull zookeeper
docker run -p 2181:2181 -d zookeeper

#进入容器:

docker exec -it 3e8bf7392b4e bash

#客户端工具访问 Zookeeper,查看树形结构。

4.4 Docker安装ActiveMQ

#下载 ActiveMQ 镜像:

docker pull webcenter/activemq
docker run -p 8161:8161 -d activemq

#进入容器:

docker exec -it 3e8bf7392b4e bash

#浏览器访问 activemq:

5 自定义镜像

5.1 Do ckerfile文件

Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像,比如下面就是一个
Dockefile 文件样例:

FROM XXX/jdk:8
MAINTAINER docker_user
ENV JAVA_HOME /usr/local/java
ADD apache-tomcat-8.0.32.tar.gz /usr/local/
RUN mv apache-tomcat-8.0.32 tomcat8
EXPOSE 8080
RUN chmod u+x /usr/local/tomcat8/bin/*.sh
CMD /usr/local/tomcat8/bin/catalina.sh start

5.2 Dockerfile基本结构

一般的,Dockerfile 分为四部分:

  • 基础镜像信息;
  • 维护者信息;
  • 镜像操作指令;
  • 容器启动时执行指令;

5.3 Dockerfile指令

FROM
格式为 FROM <image>FROM <image>:<tag>Dockerfile 文件的第一条指令必须为 FROM 指令。并且,如果在同一
个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次);

MAINTAINER
格式为 MAINTAINER <name>,指定维护者信息;
ENV
格式为 ENV <key> <value>,指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持;

ADD
格式为 ADD <src> <dest>;复制指定的<src>到容器中的<dest>

EXPOSE
格式为 EXPOSE <port> [<port>...]
告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p 映射端口,Docker 主机会自动分配一个端口转发到指定的端口;

RUN
格式为 RUN <command>
RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行;

CMD
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。
如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的
命令。

5.4 Dockerfile自定义镜像

  1. 自定义 JDK 镜像

    FROM centos:latest
    MAINTAINER wkcto
    ADD jdk-8u121-linux-x64.tar.gz /usr/local
    ENV JAVA_HOME /usr/local/jdk1.8.0_121
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH $PATH:$JAVA_HOME/bin
    CMD java -version
    

    构建镜像:docker build -t wkcto_jdk1.8.0_121 .
    运行镜像:docker run -d ac84bde53958

  2. 自定义 Tomcat 镜像
    定义 Dockerfile 文件:

    FROM wkcto_jdk1.8.0_121
    MAINTAINER wkcto
    ADD apache-tomcat-8.5.24.tar.gz /usr/local/
    ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.24
    ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    EXPOSE 8080
    CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run
    

    构建镜像:docker build -t wkcto-tomcat-8.5.24 .
    运行镜像:docker run -d -p 8080:8080 ab41b5f48256

  3. 自定义 MySQL 镜像
    定义 Dockerfile 文件:

    FROM centos:centos6
    MAINTAINER wkcto 
    RUN yum install mysql-server mysql -y
    RUN /etc/init.d/mysqld start &&\ 
     mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH GRANT OPTION ;"&&\ 
     mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456' WITH GRANT OPTION ;"&&\
     mysql -uroot -p123456 -e "show databases;" 
    EXPOSE 3306
    CMD /usr/bin/mysqld_safe
    

    构建镜像:docker build -t wkcto-mysql .
    运行镜像:docker run -d -p 3306:3306 09ce279d92df

  4. 自定义 Redis 镜像
    定义 Dockerfile 文件:

    FROM centos:latest
    MAINTAINER wkcto
    RUN yum install epel-release -y && yum install redis -y && yum install net-tools -y
    EXPOSE 6379
    CMD /usr/bin/redis-server –protected-mode no
    

    构建镜像:docker build -t wkcto-redis .
    运行镜像:docker run -d -p 6379:6379 390583cf0531

5.5 镜像发布仓库

  1. 阿里云容器镜像仓库
    网址:https://dev.aliyun.com

  2. 注册阿里云镜像仓库
    如果没有阿里云账号,需要注册一个阿里云账号;也可以使用淘宝账号、支付宝账号登录;

  3. 发布镜像阿里云镜像仓库
    登录阿里云镜像,进入管理中心,在自己我管理中心中,左侧点击镜像仓库菜单,如果自己没有镜像仓库的话,需要创建一个镜像仓库;对自己的镜像仓库点击管理链接,按照操作指南进行操作即可;

    • 登录阿里云 Docker Registry

      docker login --username=hi35331710@aliyun.com registry.cn-qingdao.aliyuncs.com
      

      用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
      您可以在产品控制台首页修改登录密码。
      2. 将镜像推送到 Registry

      docker tag [ImageId] registry.cn-qingdao.aliyuncs.com/123test/1234test:[ 镜像版本号 ] 
      docker push registry.cn-qingdao.aliyuncs.com/123test/1234test:[镜像版本号]
      

      请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
      imageId: a78da0202f84

      docker tag a78da0202f84 registry.cn-qingdao.aliyuncs.com/123test/1234test:latest
      
      docker push registry.cn-qingdao.aliyuncs.com/123test/1234test:latest
      
  4. Docker hub 镜像加速
    /etc/docker/daemon.json

    {"registry-mirrors": ["https://gg3gwnry.mirror.aliyuncs.com"]}
    

6 Docker应用部署

  1. 部署一个 SpringBoot 项目
    • 将开发的 springboot 程序打成 jar 包或者 war 包;
    • 将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker
    • 定义 Dockerfile 文件,用于创建项目镜像;
  2. Docker 部署 Jar 包 SpringBoot 程序
    • 定义 Jar 包程序 Dockerfile 文件

      FROM wkcto_jdk1.8.0_121
      MAINTAINER wkcto
      ADD springboot-web-1.0.0.jar /opt
      RUN chmod +x /opt/springboot-web-1.0.0.jar
      CMD java -jar /opt/springboot-web-1.0.0.jar
      
    • 构建和运行 Jar 包程序的镜像
      构建镜像:docker build -t springboot-web-jar
      运行容器:docker run -d ac84bde53958

    • Jar 包程序依赖容器环境准备
      运行 Redis 容器:docker run -p 6379:6379 -d redis
      运行 MySQL 容器:docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
      修改容器保存:docker commit 容器 id xxx(镜像名:tagxxx)
      比如:docker commit b034f6d23833 wkcto_mysql_new

    • 运行 Docker 化的 Jar 包程序
      通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;

  3. Docker 部署 War 包 SpringBoot 程序
    • 定义 War 包程序 Dockerfile 文件

      FROM wkcto-tomcat-8.5.24
      MAINTAINER wkcto
      ADD springboot-web-1.0.0.war /usr/local/apache-tomcat-8.5.24/webapps
      EXPOSE 8080
      CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run
      
    • 构建和运行 War 包程序的镜像
      构建镜像:docker build -t springboot-web-war

    • War 包程序依赖容器环境准备
      与上面部署 Jar 程序依赖的容器环境一样;

    • 运行 Docker 化的 War 包程序
      通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;
      springboot-web-1.0.0.war → springboot-web-1.0.0

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zkFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值