先来两张图,可以当做笔记复习用:
图1、Docker镜像的常用操作指令:

图2、Docker容器的常用操作指令:

了解Docker操作镜像之前,首先普及一下镜像的命名规范:
镜像名称一般由两部分组成:[repository]:[tag],例如8.0版本的mysql,就是 mysql:8.0,而如果我们没有指定tag的话,那么默认是最新版本。
镜像操作命令:
| 命令 | 描述 |
|---|---|
| docker build | 根据Dockerfile构建本地镜像 |
| docker pull | 从镜像服务器拉取镜像 |
| docker push | 将本地镜像推送到镜像服务器 |
| docker images | 查看本地镜像 |
| docker rmi | 删除镜像 |
| docker save | 将本地镜像保存为一个压缩包 |
| docker load | 将压缩包加载成一个镜像 |
要想详细查看某个命令的用法,可以使用 docker [相应命令] --help 进行查看,例如,我想知道 docker save 的用法,那么我可以使用命令 docker save --help,如下:

文档告诉我们,docker save 后面可以跟options,而该options的可选项就是最下面的 Options,这里只有一个 -o,这个 -o 表示把他写到一个文件来替代输出到控制台。然后后面是镜像文件的名称(记得命名规范:[repository]:[tag])。
下面,我们就试着跑一下吧。
首先是,从镜像服务端拉取镜像(点击这里进入DockerHub官网)。我们以Nginx为例:

点击,进入上图中的Docker官方镜像页面,可以看到他告诉我们可以使用指令docker pull nginx直接拉取最新版的Nginx官方镜像文件。

如果要指定某个版本可以往下拉,有一个Supported tags and respective Dockerfile links,里面的版本都是可以指定下载的,这里我们指定一下,下载那个1.22版本。

在Linxu中使用命令docker pull nginx:1.22进行镜像文件的拉取。

然后我们输入docker images查看我们本地的镜像文件。

然后我们再使用命令docker save -o nginx1.22.tar nginx:1.22拷贝我们的nginx1.22镜像文件成一个压缩包。(可以看到,我们打包了一个叫nginx1.22.tar的压缩包)

然后我们先使用命令docker rmi nginx:1.22删除本地的nginx:1.22的镜像文件,然后再用docker images命令查看现在的本地镜像,确保真的有把刚才的nginx:1.22镜像删除干净:

接着,我们使用命令docker load -i nginx1.22.tar解压我们刚才的nginx1.22.tar成镜像。然后使用docker images查看当前的本地镜像如下:

容器操作命令:
介绍容器的操作命令前,首先我们介绍一个容器的三个状态。
| 命令 | 描述 |
|---|---|
| docker run | 创建容器,此时容器处于运行状态 |
| docker pause | 暂停容器(运行 -> 暂停) |
| docker unpause | 恢复容器的运行状态(暂停 -> 运行) |
| docker stop | 停止容器(运行 -> 停止) |
| docker start | 再次运行容器(停止 -> 运行) |
| docker rm | 删除容器 |
| docker ps | 查看所有运行的容器和容器的状态 |
| docker logs | 查看容器的运行日志 |
| docker exec | 进入容器执行命令 |
案例一、创建并运行Nginx容器
这里由于启动容器的命令比较长,建议在DockerHub官网查看他是怎么运行容器的。我们要启动Nginx容器,我们就找到Nginx镜像,然后再到它里面,往下拉,找到标题为How to use this image的内容。
这里以一句比较简单的为例,并解释下其中的参数:
docker run --name tmp-nginx-container -p 80:80 -d nginx
因此,我们现在如果要启动一个nginx1.22的容器,名称我们就叫myNginx,使用宿主机的8090端口号映射到容器的80端口号,那么命令如下:
docker run --name myNginx -p 8090:80 -d nginx:1.22

此时,我们使用命令docker ps可以看到容器成功运行。

然后,我们让防火墙把宿主机的8090端口号开放出来。
#防火墙开启8090端口号
firewall-cmd --add-port=8090/tcp --permanent
#防火墙重新加载配置
firewall-cmd --reload
#查看当前防火墙开放的端口号
firewall-cmd --list-all

此时,我们就可以使用宿主机的ip地址加8090端口号访问我们的Nginx容器了。
例如,如果你的宿主机的ip地址是 192.168.10.11,那么你就访问 192.168.10.11:8090,如果看到这个页面,那么就说明访问成功了。

此时,我们还可以使用命令docker logs [容器名]来查看我们容器的日志信息,如果要跟踪日志,那么就使用docker logs -f [容器名]命令。
针对上面的例子,我们要查看我们的容器的日志就应该使用命令:
docker logs myNginx

如果我们要监听/跟踪我们的日志,那么我们就使用命令
docker logs -f myNginx
案例二、进入Nginx容器,修改HTML文件内容,添加“Hello,World!”
进入容器命令如下:
docker exec -it myNginx bash
命令解读:
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
myNginx:要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
进入容器后,我们使用命令 ls 可以看到容器内的结构像一个Linux服务器一样,前面解释过Docker会把库还有依赖什么都打包进来,作为一个镜像,所以他其实是由Docker模拟出来的一个独立的Linux文件系统,如下:

我们使用命令cd usr/share/nginx/html/进入Nginx的“欢迎页面” 的目录,并使用命令sed -i -e 's#Welcome to nginx#Hello,World!#g' -e 's###g' index.html修改页面的显示结果。然后用我们服务器的ip地址加端口号再次访问我们的Nginx,结果如下:

然后我们可以使用命令exit;退出我们的容器。
使用命令docer pause myNginx暂停我们的容器(暂停容器,使用命令docker ps仍然可以看到容器,但是在状态后面会有一个括号将Pause括起来),如果想要启动被暂停的容器,只需要使用命令docker unpause myNginx即可。

如果我们使用docker stop myNginx直接停止我们的容器的话,那么我们用docker ps是看不到此时的容器的,必须得用docker ps -a进行查看才行。被stop的容器要想再次启动,就得使用命令docker start myNginx。


如果在运行docker start myNginx的时候出现以下报错信息:

那么重启一下我们的docker,命令如下:
systemctl restart docker
然后,再使用命令docker start myNginx 重新启动我们的 myNginx 容器即可。