Docker入门

1. 初识Docker

1.1 什么是Docker

  • Docker是一个开源的应用容器引擎。其诞生于2013年初,基于Go语言实现,由dotCloud公司出品(后改名为Docker Inc)。
  • Docker可以让开发者将他们的应用及其依赖包打包到一个轻量级、可移植的容器中,然后发布到任意流行的Linux机器上。容器是完全使用沙箱机制、相互隔离的,性能开销极低。
  • Docker从17.03版本后分为CE(Community Edition 社区版)和EE(Enterprise Edtion 企业版)。

1.2 为什么使用Docker

使用Docker主要是为了解决应用程序“水土不服”问题:即软件在开发环境可以正常运行,但迁移到测试环境、生产环境,由于环境配置或依赖问题而不能正常运行,这种情况称为软件跨环境迁移问题。

而Docker能将软件及其运行所依赖的环境打包到一起,成为一个“容器”,可以直接部署在各种不同的平台上,由容器内的环境为软件运行提供支持,避免了软件跨环境运行问题。

具体来说,Docker主要有以下优点:

  • 更快速的交付和部署:一次创建,可以在任意地方正常执行。启动时间是秒级的,大幅地节省开发、测试、部署的时间。
  • 更有效率的虚拟化:Docker 容器的执行不需要额外的虚拟化支援,它是核心层级的虚拟化,因此可以实作更高的效能和效率。
  • 更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上执行,包括实体机器、虚拟机、公有云、私有云、个人电脑、服务器等, 同时方便了程序迁移。
  • 更简单的管理:Docker的所有的修改都以增量的方式被分发和更新,从而实作自动化并且有效率的管理。

1.3 安装Docker

Docker最好还是安装在Linux环境中,可以使用VMware workstation创建Ubuntu或CentOS的虚拟机,在其中安装Docker。

具体可以参考Docker的安装指南:https://docs.docker.com/get-docker/#installation

1.3.1 Ubuntu

通过系统内置组件安装

Ubuntu 14.04 版本组件库中已经内置了Docker组件,可以直接安装:

$ sudo apt-get update
$ sudo apt-get install -y docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker

如果使用操作系统内置组件安装Docker,目前安装的版本是比较旧的0.9.1,要安装新版本,可以通过更新Docker组件库的方式进行安装。

通过Docker组件库安装最新版本

要安装最新版本的Docker,首先要安装 apt-transport-https 支持,之后通过新增组件库来安装

$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install -y lxc-docker

快速安装方法(推荐)

$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

14.04之前版本

如果是旧版本的Ubuntu系统,需要先更新核心。

$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
$ sudo reboot

然后按上述步骤安装即可。

安装之后需启动Docker服务

$ sudo service docker start

1.3.2 CentOS

Docker支持CentOS6及之后的版本

CentOS6

对于CentOS6,可以使用EPEL组件库安装Docker,如下:

$ sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
$ sudo yum install docker-io

CentOS7

CentOS7系统的 CentOS-Extras 库中已内置Docker,可以直接安装:

$ sudo yum install docker

也可通过 yum 包安装:

# 先删除旧的docker组件
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 1. yum包更新最新
$ sudo yum update
# 2. 安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-presistent-data lvm2
# 3. 设置yum源
# 官方镜像源,若无效则更换为阿里云镜像
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云镜像源
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4. 安装 docker,出现输入界面都输入 y
$ sudo yum install -y docker-ce
# 5. 查看docker版本,验证是否安装成功
$ docker -v

安装之后启动Docker服务,并让其随系统启动自动载入:

$ sudo service docker start
$ sudo chkconfig docker on

1.4 Docker架构

1.4.1 镜像(Image)

  • Docker 镜像就是一个只读的模板。例如,一个镜像可以包含一个完整的Ubuntu系统环境,里面仅安装了Apache 或使用者需要的其它应用程序。
  • 镜像可以用来建立Docker 容器。Docker 提供了一个很简单的机制来建立镜像或者更新现有的镜像,使用者甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

1.4.2 容器(Container)

  • Docker 利用容器来执行应用。容器是从镜像建立的执行实例,镜像与容器的关系,就像是面向对象程序设计中的类与对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 可以把容器看做是一个简易版的Linux 环境(包括root 使用者权限、程序空间、使用者空间和网路空间等)和在其中执行的应用程序。

注:镜像是只读的,容器在启动的时候建立一层可写层作为最上层。

1.4.3 仓库(Repository)

  • 仓库是集中存放镜像的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
  • 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是Docker Hub,存放了数量庞大的镜像供使用者下载。 国内的公开仓库包括Docker Pool等,可以提供国内使用者更稳定快速的存取。当然,使用者也可以在本地建立一个私有仓库。
  • 当使用者建立了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。

注:Docker 仓库的概念跟Git类似,注册服务器可以理解为GitHub 这样的托管服务。

2. Docker命令

2.1 Docker服务相关命令

# 1. 启动Docker服务
systemctl start docker
# 2. 停止Docker服务
systemctl stop docker
# 3. 重启Docker服务
systemctl restart docker
# 4. 查看Docker服务状态
systemctl status docker
# 5. 设置开机启动Docker服务
systemctl enable docker

在这里插入图片描述

2.2 Docker镜像相关命令

查看本地镜像

# 1. 查看本地所有镜像
docker images
# 2. 查看所有镜像的ID
docker images -q

如果是刚安装Docker,还没有拉取镜像,本地镜像是空的,查看结果如下:
在这里插入图片描述
拉取镜像后可查看所有镜像。

搜索远程仓库镜像

# 1. 搜索远程仓库中存在的镜像
docker search [name]

在这里插入图片描述

从远程仓库拉取镜像

# 1. 根据镜像名称拉取镜像,版本可不指定,默认为最新版本
docker pull [name]:[version]

2024年6月6日起,国内各大镜像网站接连失效,需要使用其他方法拉取Docker镜像,方法之一参考:

  1. https://www.bilibili.com/video/BV1Zn4y19743/?spm_id_from=333.999.0.0&vd_source=a732e6d0a6db16ffd68140d76399e070
  2. Github地址:https://github.com/tech-shrimp/docker_image_pusher

如果不指定版本号,默认拉取的是最新版本(latest)
在这里插入图片描述
Docker镜像仓库:https://hub.docker.com/,可以查找Docker镜像。

删除本地镜像

# 1. 根据镜像ID删除
docker rmi [image id]
# 2. 根据镜像名称+版本删除
docker rmi [repository]:[tag]
# 3. 删除所有镜像
docker rmi `docker images -q`

rmi即remove image,后跟镜像ID或镜像名称+版本。
在这里插入图片描述

2.3 Docker容器相关命令

查看容器

# 1. 查看正在运行的容器
docker ps
# 2. 查看所有容器,包括运行中与停止的容器
docker ps -a

在这里插入图片描述

创建并启动容器

docker run 参数
# 参数说明
# -i:保持容器运行。通常与-t同时使用。加入it这两个参数后,容器创建后会自动进入容器,退出容器后,容器自动停止。
# -t:为容器重新分配一个伪输入终端,通常与-i同时使用。
# -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。退出后,容器保持运行。
# -it创建的容器一般称为交互式容器,-id创建的容器一般称为守护式容器
# --name:为创建的容器命名

在这里插入图片描述

此处创建容器的命令含义为:docker run -it —name=[自定义容器名] [镜像名] [进入容器操作],此处设置进入容器后打开伪终端界面。
在这里插入图片描述

使用-id创建的容器不会自动进入伪终端界面,可以用docker exec命令进入。-it创建的容器,退出后会停止运行,-id创建的容器退出后则不会停止运行。

进入容器

# 使用此命令进入容器后,退出容器时 容器不会关闭
docker exec 参数

停止容器

# 停止指定容器
docker stop 容器名称
# 停止所有容器
docker stop `docker ps -aq`

启动容器

docker start 容器名称

删除容器

# 如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称或容器ID
# 删除所有容器
docker rm `docker ps -aq`

查看容器信息

docker inspect 容器名称

3. Docker容器的数据卷

3.1 数据卷概念及作用

数据卷概念

  • 数据卷是容器宿主机中的一个目录或文件。
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步。
  • 一个数据卷可以被多个容器同时挂载。
  • 一个容器也可以被挂载多个数据卷。

数据卷作用

  • 容器数据的持久化
  • 外部机器与容器间的通信
  • 容器之间的数据交换

数据卷的概念及作用有些类似Linux进程通信的共享内存,用来解决容器与容器、容器与外部机器之间的数据交互,并且由于其存在于宿主机中,因此容器被删除后数据卷也能被保留下来,实现容器数据的持久化。

3.2 数据卷配置

在创建启动容器时,使用-v参数,设置数据卷

docker run -其他参数 -v 宿主机目录(文件):容器内目录(文件)

注意事项:

  1. 目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷

创建并挂载数据卷:
在这里插入图片描述

在宿主机数据卷中创建文件,会同步到容器中:
在这里插入图片描述
在这里插入图片描述
反之亦然,并且对数据卷中的修改都会同步。

容器挂载多个数据卷,可以使用多个-v参数完成。

3.3 数据卷容器

可以创建一个专门作为数据卷的容器,其他容器只需要继承该容器,即可绑定相同的数据卷,使配置数据卷的方式更加简单。

# 1. 创建启动数据卷容器,使用 -v 参数设置数据卷
docker run -it --name=数据卷容器名 -v 数据卷目录 镜像名 /bin/bash
# 2. 创建启动其他容器,使用 --volumes-from 参数设置数据卷容器
docker run -it --name=一般容器名 --volumes-from 数据卷容器名 /bin/bash
# 3. 可以用docker inspect命令,查看Mount字段,即可查看宿主机数据卷目录对应的容器数据卷目录
docker inspect 数据卷容器名

在这里插入图片描述
在这里插入图片描述

4. Docker应用部署

4.1 MySQL

在Docker容器中部署MySQL,并通过外部MySQL图形化界面操作容器的MySQL Server。

实现步骤:

  1. 搜索MySQL镜像
  2. 拉取MySQL镜像
  3. 创建容器
  4. 操作容器中 的MySQL

注:

  • 容器内的网络服务于外部机器不能直接通信,而外部机器和宿主机可以直接通信,宿主机又可与容器直接通信。
  • 当容器中的网络服务需要被外部机器访问时,可以将容器中提供的服务端口映射到宿主机的端口上,这样外部机器可以通过访问宿主机的端口,进而访问到容器的服务
  • 例如,容器中的MySQL服务需要通过3306端口访问,可以在创建MySQL容器时,将容器的3306端口映射到宿主机的3306端口,这样外部机器访问宿主机的3306端口就相当于访问了容器的3306端口,即访问了容器的MySQL服务。
  • 这种操作被称为端口映射
    在这里插入图片描述

MySQL应用部署命令

  1. 搜索MySQL镜像
docker search mysql
  1. 拉取MySQL镜像
docker pull mysql:5.7
  1. 创建容器,设置端口映射、目录映射
# 在/root目录下创建MySQL目录,用于存储MySQL数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3306:3306 \ # 端口映射 宿主机端口:容器端口
--name=c_mysql \ # 容器名称
-v $PWD/conf:/etc/mysql/conf.d \ # MySQL配置文件映射,$PWD即当前路径
-v $PWD/logs:/logs \ # MySQL日志目录映射
-v $PWD/data:/var/lib/mysql \ # MySQL数据库存储地址映射
-e MYSQL_ROOT_PASSWORD=123456 \ # MySQL root账户密码
mysql:5.7 # MySQL 5.7镜像

在这里插入图片描述

  1. 操作容器中的MySQL
docker exec -it c_mysql /bin/bash

在这里插入图片描述

  1. 外部机器连接容器MySQL服务

如无法连接容器MySQL,参考:https://www.cnblogs.com/rhenic/p/16171570.html

若无法连通宿主机地址:端口,可能是因为防火墙没有关闭,可以用以下命令关闭防火墙

 [root@localtion]$ sudo systemctl stop firewalld     #关闭防火墙
 [root@localtion]$ sudo systemctl disable firewalld   #重启后也不开启防火墙

若必需打开防火墙,则使用防火墙单独打开3306端口即可

 [root@localtion]$ : sudo firewall-cmd --zone=public --permanent --add-port=3306/tcp
 [root@localtion]$ : sudo ffirewall-cmd --reload       永久开启3306端口

查看虚拟机IP地址:ip addr 命令
在这里插入图片描述

外部机器连接虚拟机内容器的MySQL
在这里插入图片描述

连接完成后,可以建库建表、对表进行操作,进一步验证外部机器连接容器MySQL是否生效。

其他应用如Tomcat、Nginx、Redis容器的部署与连接,同MySQL大同小异,此处不做赘述。

5. Dockerfile

5.1 Docker镜像原理

Linux文件系统

  • Linux操作系统由许多子系统组成,其中包括文件管理子系统,其作用是对文件进行管理,由bootfs(boot file system)和rootfs(root file system)两部分组成。
  • bootfs包括bootloader(引导加载程序)和kernel(内核),rootfs包含典型的Linux系统中的/dev、/proc、/bin等标准目录和文件。
  • 不同的Linux发行版,bootfs基本一样,而rootfs不同,如Ubuntu、CentOS等。

Docker镜像原理

  • Docker镜像是由特殊的文件系统叠加而成的。其最底端是宿主机的bootfs,上一层是宿主机的rootfs(称为base image),再往上可以叠加其他镜像文件。
  • Docker镜像就是这样由一层一层的文件系统叠加组成的,这种技术称为统一文件系统技术(Union File System),它将不同的层整合为一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,从用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面,位于下一层的镜像称为父镜像,最底层的镜像称为基础镜像。
  • Docker的镜像是只读的,当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器,便于我们对容器做出自己想要的修改。修改完成后还可以将这个容器打包成一个新的镜像模板。
    在这里插入图片描述

思考

  • Docker镜像的本质是什么?
    • 是一个分层的文件系统。
  • Docker中的CentOS镜像只有200多MB,而一个CentOS的iso文件却有几个G?
    • CentOS的iso文件包含bootfs与rootfs及其他子系统,而Docker的CentOS镜像只需要复用操作系统的bootfs,只包含rootfs与其他镜像层。
  • Docker中的Tomcat镜像有500多MB,而下载Tomcat安装包却只有70多MB?
    • 由于Docker镜像是分层的,Tomcat虽然只有70多MB,但其镜像包含了所依赖的父镜像和基础镜像,所以对外显示的Tomcat镜像大小为500多MB。

5.2 Dockerfile概念及作用

Docker镜像制作

Docker镜像制作有两种方式:

  1. 容器转为镜像
  2. Dockerfile制作

容器转为镜像

# 1. 容器转换为镜像
docker commit 容器ID 镜像名称:版本号
# 2. 压缩镜像
docker save -o 压缩文件名称 镜像名称:版本号
# 3. 解压镜像
docker load -i 压缩文件

注意:容器提交为镜像时,其挂载的数据卷不会同步提交,后面若需要同步数据卷,可以解压镜像创建容器,再挂载相同的数据卷。

Dockerfile概念

  • Dockerfile是一个文本文件,包含了一条条指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境。
  • 对于测试人员:可以直接拿开发时所构建的镜像或通过Dockerfile文件构建i一个新的镜像开始工作。
  • 对于运维人员:再部署时,可以实现应用的无缝移植。

5.3 Dockerfile关键字

关键字作用备注
FROM指定父镜像指定 dockerfile 基于那个 image 构建
MAINTAINER作者信息用来标明这个 dockerfile 作者
LABEL标签用来标明 dockerfile 的标签可以使用 Label 代码 Maintainer 最终都是在 docker image 基本信息中可以查看
Run执行命令执行一段命令默认是 /bin/sh 格式:RUN command 或者 RUN [“command”,”param1”,”param2”]
CMD容器启动命令启动容器时候的默认命令和 ENTRYPOINT 配合使用 格式 CMD command param1 param2 或者 CMD [“command”,”param1”,”param2”]
COPY复制文件build 的时候复制文件到 image 中
ADD添加文件build 的时候添加文件到 image 中 不仅仅局限于当前的 build 上下文 可以来源与远程服务
ENV环境变量指定 build 时候的环境变量可以在启动的容器的时候通过 - e 覆盖格式 ENV name=value
ARG构建参数构建参数只在构建的时候使用的参数如果有 ENV 那么 ENV 的相同名字的只始终覆盖 arg 的参数
volume定义外部可以挂载的数据卷指定 build 的 image 哪些目录可以启动的时候挂载到文件系统中启动容器的时候使用 - v 绑定 格式 VOLUME [“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口启动容器的时候使用 - p 来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定 / 使用的是绝对地址 如果不是 / 开头 那么是在上一条 workdir 的路径的相对路径
USER指定执行用户指定 build 或者启动的时候 用户在 RUN CMD ENTRYPOINT 执行的时候的用户
HEALTHCHECK健康检查指定检测当前容器健康监测的命令,基本上没用 因为很多时候应用本身有健康监测机制
ONBUILD触发器当存在 ONBUILD 关键字的镜像作为基础镜像的时候 当执行 FROM 完成之后会执行 ONBUID 的命令 但是不影响当前镜像用处也不怎么大
STOPSIGNAL发送信号量到宿主机该 STOPSIGNAL 指令设置将发送到容器的系统调用信号以退出
SHELL指定执行脚本的 shell指定 RUN CMD ENTRYPOINT 执行命令的时候使用的 shell

Dockerfile案例

可以在hub.docker.com上查看镜像的Dockerfile,以下是CentOS的Dockerfile:
在这里插入图片描述

5.4 案例:发布Spring Boot项目

定义Dockerfile,发布Spring Boot项目。

步骤如下:

  1. 定义父镜像:FROM java:8
  2. 定义作者信息:MAINTAINER 作者信息
  3. 将jar包添加到容器:ADD 原始jar包名称 容器中jar包名称
  4. 定义容器启动执行的命令:CMD java -jar 容器中jar包名称
  5. 通过Dockerfile构建镜像:docker build -f Dockerfile文件路径 -t 镜像名称:版本

6. Docker服务编排

6.1 Docker Compose概述

  • 服务编排:按照一定的业务规则批量管理容器
  • Docker Compose:是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建、启动和停止。使用步骤:
    • 利用Dockerfile定义运行环境镜像。
    • 使用docker-compose.yml定义组成应用的各服务。
    • 运行docker-compose up启动应用。

6.2 Docker Compose安装使用

安装Docker Compose

Compose目前已经完全支持Linux、Mac OS和Windows,在安装Compose之前,需要先安装Docker。

# 1. 安装Docker Compose
curl -L https://github.com/docker/compose/release/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 2. 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 3. 查看版本信息
docker-compose -version

卸载Docker Compose

# 二进制包方式安装的Docker Compose,删除二进制文件即可
rm /usr/local/bin/docker-compose

6.3 案例:编排Spring Boot + Nginx项目

创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

编写docker-compose.yml文件

version: '3'
services: 
 nginx: 
  image: nginx
  ports: 
   - 80:80
  links: 
   - app
  volumes: 
   - ./nginx/conf.d:/etc/nginx/conf.d
 app: 
  image: app
 expose:
  - "8080"

创建./nginx/conf.d目录

mkdir -p ./nginx/conf.d

在./nginx/conf.d目录下,编写config.conf文件

server {
  listen 80;
  access_log off;
  
  location / {
    proxy_pass http://app:8080;
  }
}

在~/docker-compose目录下使用docker-compose启动容器

docker-compose up

测试访问

http://虚拟机IP/hello

7. Docker私有仓库

7.1 搭建私有仓库

# 1. 拉取私有仓库镜像
docker pull registry
# 2. 启动私有仓库
docker run -id --name=registry -p 5000:5000 registry
# 3. 打开浏览器,输入地址 http://私有仓库服务器IP:5000/v2/_catalog,看到{"repositries":[]}表示私有仓库搭建成功
# 4. 修改deaomon.json
vim /etc/docker/deamon.json
# 在上述文件中添加一个key,保存并退出。此步骤用于让Dcoker信任私有仓库地址;注意私有仓库服务器IP修改为自己的私有仓库服务器真实IP、
{"insecure-registries": ["私有仓库服务器IP:5000"]}
# 5. 重启Docker服务
systemctl restart docker
docker start registry

7.2 上传镜像

# 1. 将镜像标记为私有仓库镜像
docker tag 镜像名称:版本号 私有仓库服务器IP:5000/镜像名称:版本号
# 2. 上传标记的镜像
docker push 私有仓库服务器IP:5000/镜像名称:版本号

7.3 拉取镜像

# 拉取镜像
docker pull 私有仓库服务器IP:5000/镜像名称:版本号

8. 容器虚拟化与传统虚拟机的比较

容器是什么

容器就是将软件打包成标准化单元,以用于开发、交付和部署。

  • 容器是轻量级的、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件在任何 环境中都能始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队在相同基础设施上运行不同软件时的冲突。

容器与虚拟机的比较

  • 相同
    • 容器与虚拟机具有相似的资源隔离和分配优势。
  • 不同
    • 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。
    • 传统虚拟机可以运行不同 的操作系统,容器只能运行同一类型的操作系统。
特性容器虚拟机
启动秒级分钟级
硬碟容量一般为MB一般为GB
效能接近原生比较慢
系统支援量单机支援上千个容器一般几十个
  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值