Docker是什么

官网
https://www.docker.com/

Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视

传统VM解决的核心问题是资源调配的问题,而容器解决的核心问题是应用开发,测试和部署的问题
再厉害的VM虚拟化技术,都不可避免地会出现计算、I/O、网络性能损失,其本质是因为多了一层软件运行一个完整的客户机操作系统

传统VM需要在宿主机上通过Hypervisor对硬件资源进行虚拟化,而Docker直接使用宿主机操作系统硬件资源,在资源利用率上远超传统VM

Docker通过容器虚拟化、内核共享,能够把应用需要的运行环境、缓存环境、数据库环境等封装起来,以最简单的方式支持应用运行,轻装上阵,性能更佳。Docker镜像特性则让这种方式更加简单易行

Docker的作用

简化配置

将环境和配置放入代码然后进行部署,Docker配置能够在各种环境使用,实现了将应用环境和底层环境解耦

代码管道化管理

令代码从开发者的机器轻松发布到生产环境的机器。实现端到端的发布流程管理

合并服务资源

合并多个服务资源以降低费用,不占用过多的操作系统内存,跨实例共享多个空闲内存

作为多租户容器

可以作为云计算的多租户容器,使用Docker更容易为每个租户创建、运行多个实例

开发环境的生产化

使得开发环境更加接近生产环境。令多个Docker装载一系列服务在单机上运行,最大程度模拟生产分布式部署的环境

应用隔离

在一台机器上运行多个应用,这就需要将原来的单体应用切分为很多微服务。将多个应用服务部署在多个Docker中

快速部署

Docker可以快速地启停容器,能够实现秒级的系统启动

用Docker快速搭建环境

安装Docker

使用yum安装方便管理
yum install docker
yum info docker
image.png

配置镜像仓库地址

默认docker官方镜像仓库,使用阿里云加速
image.png
该地址配置后,vim /etc/docker/daemon.json编辑镜像仓库地址
image.png
docker info查看是否配置正确
image.png

docker常用命令

docker --help
image.png

镜像相关

docker images 查看本地镜像

image.png
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID(唯一)
CREATED:镜像的创建日期(不是pull日期)
SIZE:镜像大小

docker search [OPTIONS] TERM 从docker仓库搜索镜像

一般默认搜索25条,例如docker search --limit 100 jdk 搜索jdk相关镜像前100条
image.png
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:标星
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

docker pull [OPTIONS] NAME[:TAG|@DIGEST] 拉取镜像

默认为最新的latest镜像,如果要拉取特定版本tag镜像可以用docker pull NAME:TAG
例如docker pull docker.io/redis:4.0 特定拉取redis4.0的镜像
image.png

docker rmi [OPTIONS] IMAGE [IMAGE…] 删除一个或多个镜像

image

容器相关

镜像拉取之后运行后成为容器

docker ps [OPTIONS] 查看容器

-a,显示所有容器(默认显示正在运行)
-s,显示文件总大小

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 通过镜像启动容器

image.png
启动容器的参数很多,常用的有
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

  • 交互式创建 退出容器则停止运行
    docker run -i -t --name=容器名称 镜像名称:标签 /bin/bash
    image.png
    进入docker的centos之后查看top也只有2个进程在使用
    image.png
    exit退出容器之后发现docker没有在运行容器
  • 守护式容器方式创建 退出后继续运行
    docker run -i -d --name=容器名称 镜像名称:标签
    image.png
  • 登陆守护容器
    docker exec -i -t 容器名称 (或者容器ID) /bin/bash
    image.png
    退出之后守护线程还在
    image.png

docker start/stop [OPTIONS] CONTAINER [CONTAINER...] 启动/停止容器

image.png
默认容器存放在/var/lib/docker/containers

宿主机和容器文件互传

  • docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 从宿主机SRC_PATH把资源拷贝到容器DEST_PATH
    image.png
  • docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH 从容器中SRC_PATH把资源拷贝到宿主机DEST_PATH
    image.png

容器目录挂载

  • docker run -v 宿主机目录:容器目录 :在创建容器的时候,将宿主机的目录与容器内的目录进行映射,可以通过修改宿主机某个目录的文件从而去影响容器
    image.png

删除容器

docker rm 容器名称(容器ID)
删除容器前必须要确保容器已经关闭。同样删除镜像要确保通过镜像创建的容器关闭


这个家伙很懒,啥也没有留下😋