Docker最新超详细教程——基本操作

Docker最新超详细教程——基本操作

一、镜像操作

镜像名称

镜像命令

案例一:拉取、查看镜像

案例二:保存、导入镜像

二、容器操作

容器相关命令

容器三个状态  

暂停与停止有什么差别?

案例一:创建并运行一个容器(nginx)

需求:创建并运行nginx容器的命令

命令解读

详细步骤

案例二:进入容器,修改文件

需求:进入Nginx容器,修改HTML文件内容,添加“你好 Harmony3.0”

命令解读

详细步骤

其它命令Test

停止容器stop && 查看容器ps

删除容器rm

小结

三、数据卷(容器的数据管理)

目前存在的问题

什么是数据卷?

数据集操作命令

数据卷操作的基本语法

案例一:CRUD数据卷

需求:创建一个数据卷,并对其进行CRUD

案例二:数据卷挂载到指定容器

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容

命令解读

详细步骤

Docker创建运行MySQL并挂载


Docker最新超详细教程——基本操作

一、镜像操作

镜像名称

镜像的名称组成为2个部分:[repository]:[tag]。在没有指定tag时,默认是latest,代表最新版本的镜像。

注意:mysql:5.7 mysql:8.0 是两个不一样镜像!!!

镜像命令

docker镜像操作的命令无非就是CRUD

常见的镜像操作命令如下所示:

  • docker build
  • docker push
  • docker pull
  • docker images
  • docker rmi
  • docker save
  • docker load

在本地获取镜像有两种方法:

(1)docker build:可以从本地获取,通过DockerFile的文件,将其构建成一个镜像

(2)docker pull:从服务器中拉取一个镜像(常用!) 

想知道本地镜像的情况:

(1)docker images:查看镜像

(2)docker rmi:删除不需要的镜像

想把镜像分享给本人:

(1)docker push:将其上传到镜像服务器,可供本人拉去

(2)docker save、docker load:先将其打成压缩包,发送出去,再将压缩包加载为镜像

命令很多,不一定全都可以记住,但是我们可以使用help命令查看。

如果想看具体哪一个命令的参数有什么

docker images --help

案例一:拉取、查看镜像

我们可以先登入DockerHub,搜索想要拉取的镜像(以nginx为例

先在Centos上启动Docker

sudo systemctl start docker  

再执行pull拉取命令 

sudo docker pull nginx

运行结果如下 

查看刚刚拉取下来的镜像信息

sudo docker images

案例二:保存、导入镜像

需求:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

我们可以先查看一下save保存命令的要求。

option表示参数,例如这里的 -o 就是指定输出的文件路径;image表示导出的是哪一个镜像。

sudo docker save -o nginx.tar nginx:latest

运行截图如下 

说明这样子已经导出成功了。

然后我们将docker中的nginx镜像删除

sudo docker rmi nginx:latest

再使用docker load命令将本地的nginx镜像推送到docker 

我们也可以先看看load命令的帮助文档:

其中:-i表示要上传的文件名;-q是否打印日志。

sudo docker load -i nginx.tar

二、容器操作

我们在之前的章节中提到了容器这一概念,想必大家都知道了容器与镜像的异同,我们在这里就不赘述了。

容器相关命令

  • docker run:创建并运行一个容器,处于运行状态

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

  • docker exec:进入容器执行命令

  • docker logs:查看容器的运行日志

  • docker ps:查看所有的容器和运行状态

容器三个状态  

  • 运行:进程正常运行

  • 暂停:进程暂停,CPU不再运行,并不释放内存

  • 停止:进程终止,回收进程占用的内存、CPU等资源

暂停与停止有什么差别?

两者的差别在于操作系统层面!

如果容器处于暂停状态,操作系统会将容器中的进程挂起,容器关联的内存暂存下来,CPU不再执行这个进程;如果我们将其恢复,进程就会直接运行,内存空间恢复,程序继续运行。

如果容器处于停止状态,操作系统会将容器中的进程“杀死”,容器关联的内存回收下来,只有文件系统会被保留下来。如果我们还需要,只能重新start一个新的进程(容器),可以形象的理解为“投胎”。

案例一:创建并运行一个容器(nginx)

需求:创建并运行nginx容器的命令

docker run --name containerName -p 80:80 -d nginx

由于该命令比较复杂,我们可以通过查看DockerHub来创建:Nginx - 官方图片|Docker Hub

我们可以用官网描述的这个方式来创建

命令解读

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

容器是对外隔离的,任何请求来访问容器都会被拒绝, 所以我们这边将容器与主机的端口映射,用户通过访问主机的端口来间接访问容器。

详细步骤

(1)创建一个名为 nginxname 的容器

首先我们已经有了nginx的镜像(没有的话先创建...)

 docker run --name nginxname -p 80:80 -d nginx

容器名为 nginxname ,端口映射为80:80,镜像名称为nginx

(2)访问nginx容器 

然后我们就可以通过 IP + 端口 的方式访问 

(3)查看日志 

使用 docker logs nginxname(容器名)查看日志

由于我们刚刚有对nginx进行访问,所以这里就会有GET请求的日志。 

案例二:进入容器,修改文件

需求:进入Nginx容器,修改HTML文件内容,添加“你好 Harmony3.0

命令解读

docker exec -it mn bash
  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • mn :要进入的容器的名称

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

详细步骤

(1)进入容器内部

我们已经进入了nginx容器内部,可以发现它的内部是有一套文件系统的。我们要实现上面的需求还需要了解nginx容器内部结构,如何了解?当然是通过查阅DockerHub官方文档啦!

(2)查看DockerHub官网

Nginx - 官方图片|Docker Hub

我们可以发现它的静态文件放在 /usr/share/nginx/html,直接进入

(3)修改index.html 

容器内没有vi命令,无法直接修改,我们用下面的命令来修改

sed -i -e 's#Welcome to nginx#你好 Harmony3.0#g' index.html
sed -i -e 's#<head>#<head><meta charset="utf-8">#g' index.html

在次访问,如下所示: 修改成功!!!

其它命令Test

停止容器stop && 查看容器ps

学习完上面的两个案例,Docker的命令大体都了解了,但是还有几个在上面的案例中没有用到,我们现在就在来演示一下!

我们先将之间创建的名为nginxname容器停止

docker stop nginxname

此时如果我们只是使用docker ps不加参数的话是查看不到该容器的!

可以看看 docker ps --help 中的面描述

我们要加上 -a 这个参数就可以看到刚刚停止的容器了!!!

docker ps -a

删除容器rm

(我们先将stop的容器启动),直接使用rm删除,可以发现失败了

通过查看,想要加上参数 -f 表示强制执行! 

docker rm -f nginxname

 或者在nginxname处于 stop状态 的时候,可以直接 rm 掉!!!

小结

docker run命令的常见参数有哪些

  • --name:指定容器名称

  • -p:指定端口映射

  • -d:让容器后台运行

查看容器日志的命令

  • docker logs

  • 添加 -f 参数可以持续查看日志

删除容器命令rm

  • docker rm nginxname:只能删除处于stop状态的容器

  • docker rm -f nginxname:强制删除!

查看容器状态

  • docker ps

  • docker ps -a 查看所有容器,包括已经停止的

三、数据卷(容器的数据管理)

目前存在的问题

在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦

我们对一个容器进行了修改,这些修改都是对外不可见的,时间久了,你会忘记曾经改了什么东西!并且,当你想创建一个与之一模一样的容器,你可能要把之前的修改操作重新做一遍

这就是因为容器与数据(容器内文件)耦合带来的后果

要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。  

什么是数据卷?

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了。

所以上面提到的3个问题就都解决了!!!

  • 修改宿主机文件系统,就相当于修改了容器。
  • 支持多个容器的数据共享,将两个容器挂载同一个数据卷
  • 不小心删除了容器,但是并不会删除数据卷,只要重新创建一个容器,再挂载到之前的数据卷数据就可以恢复!(共享之前的旧数据卷)

数据集操作命令

数据卷操作的基本语法

docker volume [COMMAND]
  • create 创建一个volume

  • inspect 显示一个或多个volume的信息

  • ls 列出所有的volume

  • prune 删除未使用的volume

  • rm 删除一个或多个指定的volume

案例一:CRUD数据卷

需求:创建一个数据卷,并对其进行CRUD

(1)创建数据卷

docker volume create html

(2)查看所有数据

docker volume ls

(3)查看数据卷详细信息卷

docker volume inspect html

可以看到这就是数据卷的详细信息了!Mountpoint 表示的是挂载点。

(4)删除未使用的数据卷

方法一:prume 

 docker volume prune

由于我们刚刚只是创建了名为 html 数据卷,还未进行使用,故会被删除。

方法二:rm

docker volume rm html

所以可以使用rm删除指定的数据卷。

案例二:数据卷挂载到指定容器

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容

在上面个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

命令解读

运行容器时使用 -v 参数挂载数据卷

详细步骤

(1)创建容器并挂载数据卷到容器内的HTML目录

docker run --name nginxname -v html:/usr/share/nginx/html -p 80:80 -d nginx

执行上述命令,假如在创建容器的时候没有数据卷,做数据卷挂载时,docker会自动创建一个数据卷!  

(2)进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置
docker volume inspect html

(3)修改方式 

我们进入上述目录,可以使用vim修改文件内容了!!!

# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

但是这里我们还要提一下,此处推荐使用第三方工具——FinalShell

进入相应的目录,然后可以看见下图:

然后选择index.html右键打开直接修改即可!! 

注意点

Finallshell软件本身有一个小坑!如果在打开文件的过程中出现了下面的这一种情况,大多数是因为权限所导致的! 

chmod 777 /var/lib/docker/volumes/html

如果还是不能解决,应该就是sftp的问题,取安装一个破解版吧....... 

Docker创建运行MySQL并挂载

Docker最新超详细教程——Docker创建运行MySQL并挂载_面向鸿蒙编程的博客-CSDN博客icon-default.png?t=M666https://blog.csdn.net/weixin_43715214/article/details/125985499

猜你喜欢

转载自blog.csdn.net/weixin_43715214/article/details/125951281