Docker基础-常见命令与数据卷

发布于:2025-03-06 ⋅ 阅读:(15) ⋅ 点赞:(0)

在这里插入图片描述

(一)常见命令

一、Docker常见命令

在这里插入图片描述

  1. 使用 docker pull 用来拉取仓库的镜像文件到本地;docker images 用于查看镜像文件;docker rmi 用于删除镜像文件
  2. docker build 用于自定义镜像,将来自己写的java项目也是通过这种方式来构建和打包;同时也可以通过 docker save 命令将项目文件保存到本地变为压缩文件;docker load 也就可以把该压缩文件加载到其他主机的镜像文件当中。
    或者也可以通过 docker push 将本地镜像文件推到镜像仓库(可以是公用仓库或公司的私服)。
  3. 使用 docker run 来创建并运行容器;docker stop 来停止容器,但是停止的是容器内部的进程,容器是仍然存在的;使用 docker start 就可以启动容器内部的进程;根据 docker ps 就可以来查看进程的运行状态;docker rm 用于删除容器;还可以通过 docker logs 来查看容器的运行日志;以及 docker exec 来进入到容器内部
  • 在官方文档当中就能查看到Docker的全部命令
    在这里插入图片描述

二、案例

在这里插入图片描述

  1. 搜索Nginx镜像
    在这里插入图片描述
    就可以查看到Nginx的官方说明文档,并且可以复制拉取镜像文件的命令
    在这里插入图片描述
  2. docker pull nginx
    在这里插入图片描述
//拉取 Nginx 镜像
docker pull nginx
  1. docker images
    在这里插入图片描述
//查看本地镜像列表
docker images
  • docker save
    查看docker save命令可以跟上其他什么参数
    options(-o)可选项用于写文件名称,也就是说要保存的镜像将要存到哪个地方
    在这里插入图片描述
    在这里插入图片描述
//保存镜像
docker save -o xxx.tar xxx:latest //latest 表明某一镜像的最新版本
  • docker rmi
    在这里插入图片描述
    此时只需要重新加载Nginx.tar就能获取到它的镜像
//删除镜像
docker rmi xxx
  • docker load
    在这里插入图片描述
    在这里插入图片描述
//加载镜像
docker load
  1. docker run
    在这里插入图片描述
    container id是当前容器的唯一标识id,status代表状态(Up则是已经启动)
//创建并运行镜像
docker run -d --name xxx -p xx:xx xxx
  1. docker ps
    可以加上–format参数对输出内容做格式化
    在这里插入图片描述
    默认情况下docker ps命令查看的是正在运行的容器,但是加上-a参数就可以查看全部容器
    在这里插入图片描述
//查看正在运行的容器
docker ps (-a)
  1. docker stop
    在这里插入图片描述
//停止容器
docker stop xxx
  1. docker start
    在这里插入图片描述
//开启容器
docker start xxx
  • docker logs查看容器产生的日志
    在这里插入图片描述
    加上-f参数就能持续跟踪该日志
    在这里插入图片描述
    在这里插入图片描述
//查看容器产生的日志
docker logs (-f) xxx
  1. docker exec
    exec指的是executed执行;-it指的是添加一个可交互终端,因为容器内部的隔离环境相当于模拟了一台计算机,我们进入之后要想实现交互就要使用命令行交互,也就需要一个终端,使用bash命令
    在这里插入图片描述
    可以进入到mysql的容器中再来操作mysql数据库,也就是通过容器内部的命令直接访问mysql
    在这里插入图片描述
//进入容器
docker exec -it xxx bash
  1. docker rm
    注意该命令只能删除不在运行当中的容器
    在这里插入图片描述
    或者可以加-f参数来强制删除
    在这里插入图片描述
//删除容器
docker rm xxx (-f)

三、命令别名

前面提到用docker ps命令来查看容器状态得到的数据非常多、混乱,所以往往会加上–format参数来对输出内容进行格式化,那么就会用到一个table语法用于选择要查看哪些信息。
在这里插入图片描述
但是因为这个命令这样子写太长了,就需要来简化该命令,也就要用到Linux的技巧-命令别名。

  1. 进入root权限下的.bashhrc文件夹中
    在这里插入图片描述
    在这里插入图片描述
    可以看到文件中已经存在一些人为/系统添加的别名,用alias关键词用于标记。例如:" rm -i "是一个原始命令,被写成了别名 rm 。
  2. source命令用于让该文件生效
    在这里插入图片描述
    执行dps命令,发现他与之前的docker ps --formet命令的执行结果相同
    在这里插入图片描述
    在这里插入图片描述

(二)数据卷

在这里插入图片描述

一、案例介绍

在这里插入图片描述
当我们运行nginx容器后通过端口映射就可以在主机上连接到nginx线程
在这里插入图片描述
到Nginx的官方文档当中查看如何自定义静态资源,以及指定的静态html目录存放在哪个目录下
在这里插入图片描述
进入到nginx容器以及存放html静态资源的文件夹下就能查看到当前存在的静态html文件
在这里插入图片描述
但是并不能使用vi命令对文件进行直接修改
在这里插入图片描述
因为虽然docker的镜像为应用程序的运行提供了所需系统函数库、系统环境,但是它里面只包含当前应用运行所必备的这些系统函数。所以在Nginx镜像当中就不需要vi、ll 这些命令。

因此要想去对Nginx内部的资源进行修改,就需要去用到数据卷

二、数据卷介绍

在这里插入图片描述
比如现在有一个Nginx容器,里面存在许多目录,而其中一个是用来存放html静态资源的,还有一个conf用来保存它的配置文件。将来我们可能需要对这两个文件进行修改,而在容器内直接修改又非常麻烦,那么就可以利用docker去创建两个数据卷,分别对应html与conf。并且在宿主机(也就是该台虚拟机)中给这两个数据卷创建对应的真实目录及data文件,最后也会将数据卷映射到对应目录下的data文件当中。

而既然数据卷是容器目录与宿主机目录之间映射的桥梁,那么就需要让容器的目录跟数据卷做挂载,两者之间进行关联,最后就能让容器的conf目录与宿主机的conf目录下的data目录产生关联。

关联以后docker就会实现宿主机目录与容器目录的双向绑定。以后只需要在宿主机的conf目录下的data目录下创建一个文件,就会自动加载到容器内的conf目录下,反过来的操作也是同样可行的。

以后也就只需要在宿主机上进行操作就可以影响到容器内。

三、数据卷的相关命令

(1)命令介绍

在这里插入图片描述
volumn参数指的是数据卷。在创建好数据卷以及创建宿主机目录(自动创建)后,接下来就需要去挂载容器目录。

(2)案例示范

在这里插入图片描述
刚才已经看到了nginx的容器内目录,也就是需要挂载的目录
在这里插入图片描述

  1. 创建容器
    在这里插入图片描述
    查看数据卷创建情况
    在这里插入图片描述
    CreatedAt创建时间;Mountpoint挂载点(挂载在宿主机的哪个位置)
//查看数据卷信息
docker volume ls
  1. 部署静态资源
    进入该宿主机目录,就能查看到该index.html文件,我们也就是需要对它来进行修改
    在这里插入图片描述
    在这里插入图片描述
    因为我们使用的是MobaXterm,是比较高级的Shell软件,可以实现对虚拟机内的文件直接修改,也可以直接插入资源文件
    在这里插入图片描述
    在这里插入图片描述
    进入nginx容器内的html目录下,就能看到我们修改的文件资源
    在这里插入图片描述

四、本地目录挂载

在实际应用当中,容器的挂载方式不止以上这一种,接下来就来介绍一下其他的挂载方式

(1)案例示范

在这里插入图片描述

①查看mysql容器是否有挂载数据卷
  1. docker inspect查看容器详情
    查看Nginx容器
    在这里插入图片描述
    可以看到它的挂载信息
    在这里插入图片描述
    查看Mysql容器的详细信息
    在这里插入图片描述
    同样也查看到了挂载信息
    在这里插入图片描述
    但是明明我们在创建Mysql容器时并没有去挂载数据卷,但是却自己挂载好了且有自己的名字
//查看容器详情
docker inspect xxx
②查看Mysql的挂载目录

在该目录下可以看到Mysql的data目录
在这里插入图片描述
当我们在Mysql中创建一个docker数据库并且创建一个test表结构
在这里插入图片描述
可以发现在目录下出现了该docker目录以及test表结构文件
在这里插入图片描述
在这里插入图片描述

因为Mysql在使用的过程中会不断创建新的文件,若不把它保存在宿主机文件而保存在容器当中,那么容器体积就会越来越大,将来想要对容器做迁移就非常不方便。因此处于数据解耦的考虑,这种挂载操作是非常合理的,所以它自动完成了,只不过现在这种做法用的是匿名卷。

而因为匿名卷的名字是随机生成的,很复杂。
当我们要去升级Mysql的版本时直接删除Mysql会发现数据仍然会存在
在这里插入图片描述
但是重新创建Mysql容器又会重新创建一个数据卷,原来宿主机内的旧数据就等于是丢失了。所以使用这种匿名卷是非常复杂、麻烦的,也就可以使用本地目录挂载,把数据目录挂载到任意目录下。

(2)使用本地目录挂载来完成案例

在这里插入图片描述
而要想知道MySQL的配置文件、初始化脚本在哪里,就需要到官方镜像文档当中查看。

  1. 配置文件目录:
    在这里插入图片描述
  2. 初始化脚本目录:
    在这里插入图片描述
  3. 数据目录:
    在这里插入图片描述
③执行
  1. 先创建出三个目录
    在这里插入图片描述
    再执行创建与运行容器的命令
    在这里插入图片描述
    启动成功
    在这里插入图片描述
    再开查看data目录,发现产生了许多数据,说明容器目录成功挂载到了本地目录
    在这里插入图片描述
    验证配置文件也成功挂载,发现所有字符编码都配置为了utf8
    在这里插入图片描述
    在这里插入图片描述

推荐把文件挂载到一个固定的、自己设置的目录,方便以后容器迁移或重新创建。


网站公告

今日签到

点亮在社区的每一天
去签到