Docker是一个开源的应用容器引擎,基于Go语言开发,Docker可以打包应用及其依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。
docker相关资源:

  • Docker 官方主页: https://www.docker.com
  • Docker 官方博客: https://blog.docker.com/
  • Docker 官方文档: https://docs.docker.com/
  • Docker Hub: https://hub.docker.com

Docker架构

来源:菜鸟教程
图片来源:Docker 架构

  • 镜像(Image):Docker镜像(Image),相当于时一个root文件系统。比如Ubuntu镜像就包含了完整的一套Ubuntu最小系统的root文件系统。
  • 容器(Container):独立运行的一个或一组应用,是镜像运行后的进程,镜像和容器类似于面向对象程序设计种的类和对象,镜像是静态的定义(比如类),容器时镜像运行时的实体(对象)。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Respository):可以看成一个代码控制中心,用来保存镜像。官方在Docker Hub提供了庞大的镜像集合供使用,也可以自己上传镜像

Docker与虚拟机的区别:

  • 容器与容器之间只是进程的隔离,虚拟机是完全的资源隔离(容器虚拟化的是操作系统,虚拟机虚拟化的是硬件)
  • 虚拟机的启动需要的时间是分钟级别,Docker启动是秒级甚至更短
  • 容器使用宿主操作系统的内核,只能运行在同一类型操作系统,虚拟机使用完全独立的内核,可以运行不同操作系统

安装

Docker可以运行在MAC、Windows、CentOS、Ubuntu等操作系统上,官网:https://www.docker.com/
网上有很多安装教程,尽量在linux系统上安装使用。
安装成功后,可以通过docker -v命令查看安装是否成功

> docker -v
Docker version 20.10.11, build dea9396

Docker基本命令

服务相关命令

命令描述
systemctl start docker启动docker服务
systemctl stop docker停止docker服务
systemctl restart docker重启docker服务
systemctl status docker查看docker服务状态,启动中:active (running)、停止状态:inactive (dead)
systemctl enable docker设置开机启动docker服务

在这里插入图片描述

镜像相关命令

命令描述
docker images查看本地所有的镜像
docker search 镜像名称从 Docker Hub 查找需要的镜像
docker pull 镜像名称[:版本号]从Docker Hub(仓库)下载指定版本镜像到本地,如果版本号未指定,则默认下载最新的版本。
docker rmi 镜像id
docker rmi 镜像名称[:版本号]
根据镜像id或镜像名称+版本号(若版本号未输,默认是latest)删除指定镜像
docker save 镜像名称:版本>路径/xxx.tar将指定镜像导出到指定路径下(文件后缀为rar)
docker load<文件路径将指定镜像文件导入到系统中
docker tag 原镜像名称:版本 新镜像名称:新版本
docker tag 镜像id 新镜像名称:新版本
标记本地镜像为新镜像名称、新版本(不会修改原有的镜像)
docker history 镜像名称查看指定镜像的创建历史

docker images

命令:docker images [OPTIONS]
描述:列出本地镜像
输出结果字段说明:

  • REPOSITORY: 镜像名称
  • TAG:镜像版本号
  • IMAGE ID:镜像在本地的id
  • CREATED:镜像在官方被创建的日期
  • SIZE:镜像大小

在这里插入图片描述

docker search

命令:docker search 镜像名称
描述:从 Docker Hub 查找需要的镜像
输出结果字段说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布,若显示为[OK]表示是官方提供的镜像
  • STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

在这里插入图片描述

docker pull

命令:docker pull 镜像名称[:版本号]
描述:从 Docker Hub 拉取指定的镜像到本地

在这里插入图片描述

docker rmi

命令:

  • 根据镜像id删除:docker rmi 镜像id
  • 根据镜像名称和版本号(默认为latest)删除:docker rmi 镜像名称[:版本号]

描述:rmi(remove images的缩写)删除指定的镜像
注意:如果镜像名称一样,版本号一个是latest,一个是具体的版本号,如果具体的版本号就是最新的,则2个镜像的镜像id是一样的,这个时候使用镜像id删除会失败,这个时候就只能使用镜像名称+版本号的方式去删除指定的镜像。

在这里插入图片描述
在这里插入图片描述
也可以批量删除镜像(需要跟docker images -q结合使用),命令行格式为:
docker rmi `docker images -q redis`
在这里插入图片描述

docker save

命令:docker save 镜像名称:版本>路径/xxx.tar
描述:将指定镜像导出到指定路径下(文件后缀为rar)
注意:文件对应的路径必须是已经存在的,路径不存在的话会失败

在这里插入图片描述

docker load

命令:docker load<文件完整路径(包含文件名)
描述:将指定镜像文件导入到系统中

在这里插入图片描述

docker tag

命令:

  • 按照镜像名称和版本:docker tag 原镜像名称:版本 新镜像名称:新版本
  • 按照镜像id:docker tag 镜像id 新镜像名称:新版本
    描述:标记本地镜像为新镜像名称、新版本

在这里插入图片描述
从结果来看,docker tag并没有将原有的内容进行修改(IMAGE ID)一样,相当于是复制了个镜像

docker history

命令:docker history 镜像名称
描述:查看指定镜像的创建历史

在这里插入图片描述

容器相关命令

命令描述
docker ps查看正在运行的容器
docker run [option] --name=容器名称 本地镜像名称:镜像版本 [待执行命令]创建并启动容器,且自动执行待执行命令
docker exec 参数 容器名称或容器id 待执行命令进入容器(后面退出容器,容器不会关闭)
docker start/restart/stop/kill 容器名称或容器id启动/重启/停止/杀掉 容器
docker pause/unpause 容器名称或容器id暂停容器运行
docker rm 容器名称或容器id删除容器
docker inspect 容器名称或容器id查看容器元信息
docker top 容器名称或容器id查看容器中运行的进程信息
docker stats 容器名称或容器id查看容器占用资源情况
docker cp 本地路径 容器id:路径
docker cp 容器id:路径 本地路径
将本地路径内容拷贝到指定容器的指定路径下
将指定容器的指定路径内容拷贝到本地指定路径
docker logs [option] 容器名称或容器id查看指定容器的日志

docker ps

命令:docker ps或docker ps -a
描述:查看正在运行的容器
结果字段说明

  • CONTAINER ID:容器ID
  • IMAGE:镜像
  • COMMAND:创建容器时执行的命令(比如docker run时在命令末尾的内容)
  • CREATED:容器创建时间
  • STATUS:容器运行状态
  • PORTS:网络访问端口
  • NAMES:容器名称

在这里插入图片描述

docker run

命令:docker run [option] --name=容器名称 镜像名称:镜像id 待执行命令
option常用参数:

  • -i:以交互模式运行容器,通常与 -t 同时使用,使用it这2个参数后,容器创建后自动进入容器中,推出容器后,容器自动关闭。
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • -d:以守护(后台)模式运行容器,并返回容器ID。创建一个容器在后台运行,需要使用docker exec进入容器,退出后容器也不会关闭
  • –name:为创建的容器命名
    描述:创建并启动容器,并在容器中自动执行指定的一条命令

在这里插入图片描述

docker start/restart/stop/kill

命令:docker start/restart/stop/kill 容器名称或容器id
描述:启动/重启/停止/杀掉 容器

在这里插入图片描述

docker pause/unpause

命令:docker pause/unpause 容器名称或容器id
描述:暂停容器运行

在这里插入图片描述

docker rm

命令:docker rm 容器名称或容器id
选项:

  • -v:删除容器后,会去查看关联的卷(数据卷容器类型的)是否不在使用中了,如果不在使用中,则将卷同步删除
    描述:删除容器(需要停止容器再删,运行状态的会删除失败)

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

docker inspect

命令:docker inspect 容器名称或容器id
描述:查看容器元信息

在这里插入图片描述

docker top

命令:docker top 容器名称或容器id
描述:查看容器中运行的进程信息
输出结果字段说明:

  • PID:进程的进程号
  • PPID:父进程进程号
  • C、%CPU:cpu使用率
  • STIME:进程启动时的系统时间
  • TTY:进程启动时终端设备,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
  • TIME:运行进程需要的累积CPU时间
  • CMD:启动程序名称或命令

在这里插入图片描述

docker stats

命令:docker stats 容器名称或容器id
描述:查看容器占用资源情况

在这里插入图片描述
输入docker stats命令,回车后,出现如下界面:
在这里插入图片描述
之后可以Ctrl+C退出当前界面

docker cp

命令:docker cp 路径1 路径2
描述:将路径1的内容复制到路径2去。如果是表示某个容器的路径,则需要是容器id:容器名称:开头
注意:路径均为绝对路径

在这里插入图片描述

docker logs

命令:docker logs [option] 容器名称或容器id
描述:获取容器的日志
option参数说明

  • -f:跟踪日志输出
  • –since:显示某个开始时间的所有日志
  • -t:显示时间戳
  • –tail:仅列出最新N条容器日志

在这里插入图片描述

docker exec

命令:docker exec 参数 容器名称或容器id 待执行命令
描述:在运行的容器中执行命令(exit命令退出容器后,容器不会关闭)
参数说明:

  • -d:分离模式(在后台运行)
  • -i:保持STDIN打开
  • -t:分配一个伪终端

在这里插入图片描述

数据卷和数据卷容器

思考:

  • Docker容器删除后,容器中产生的数据也会随之销毁(数据非持久化)
  • Docker容器和外部机器不能可以直接交换文件(不能直接,那就间接)
  • 容器之间想要进行数据交互(不能直接,那就间接)

为了解决容器中的数据无法与其他机器、容器交互和持久保存的问题,Docker提供了数据卷。
数据卷:

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

数据卷作用:

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

配置数据卷

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

docker run … -v 宿主机目录(文件):容器内目录(文件)

注意事项:

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

在这里插入图片描述
一个容器可以挂载多个数据卷
在这里插入图片描述

配置数据卷容器

如果某个容器想与数据卷容器共享数据,除了2者的数据卷是同一个的方法外,也可以设置一个数据卷容器,然后其他容器可以跟这个数据卷容器进行挂载。
在创建启动数据卷容器时,使用 -v参数 设置数据卷:

docker run … -v 容器内目录(文件)路径

在创建启动容器时,使用 –volumes-from 数据卷容器id或名称 挂载数据卷容器

docker run … --volumes-from 数据卷容器id或名称

在这里插入图片描述

docker volume命令

docker volume ls

格式:docker volume ls [option]
常用选项:

  • --filter dangling=true:只显示未使用中的卷

描述:查看全部数据卷容器信息(只展示数据卷容器的卷,主机的数据卷目录、文件或关联数据卷容器的容器均不被识别)

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

docker volume inspect

格式:docker volume inspect 卷名称
描述:查看卷详情

在这里插入图片描述

docker volume rm

格式:docker volume rm 卷名称
描述:删除对应的卷(如果卷还在使用中【被映射、挂载】,则删除失败)

在这里插入图片描述

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐