安装Docker Desktop
上一篇,完成了Docker Desktop的安装。这一篇,通过命令提示符(终端),学习Docker的两个基础,镜像和容器,掌握其作用和用法。

一、镜像操作

1、拉取镜像

拉取镜像命令为docker pull,命令格式为:docker pull 镜像名称:版本号,如果仅填写镜像名称,则版本号将采用缺省值latest,latest指向了该资源最新版。

  1. # 以下效果等同
  2. docker pull hello-world
  3. docker pull hello-world:latest

有时候,为项目指定某个特定版本,也是可以的。

  1. docker pull mysql:8.0.29

那么,拉取镜像时,我们如何确定待拉取的镜像名称、以及可供拉取的版本呢?

答案是Docker Hub,我们拉取的镜像,默认都是从Docker Hub拉取的,这个Registry由Docker官方管理和维护,要拉取什么,直接上去搜就好了。具体如何使用,后续将单独写一篇文章《什么是Docker Hub》。

2、查看镜像

查看镜像命令为docker images,可以查看当前已拉取的所有镜像。

  1. docker images

image.png

3、删除镜像

删除镜像命令为docker rmi,命令格式为:docker rmi 镜像名称:版本号,如果仅填写镜像名称,则版本号将采用缺省值latest。

  1. # 以下效果等同
  2. docker rmi hello-world
  3. docker rmi hello-world:latest

image.png
也可以通过镜像ID删除,命令格式为:docker rmi 镜像ID,其中,镜像ID可以只填写前几位,能确定唯一镜像即可。

  1. # 参数6:mysql镜像ID的第1位
  2. docker rmi 6

image.png
也可以一次性删除多个镜像,我们先拉取3个镜像,再执行删除。

  1. # 拉取镜像
  2. docker pull hello-world
  3. docker pull mysql
  4. docker pull nginx
  5. # 查看镜像
  6. docker images
  7. # 删除多个镜像
  8. docker rmi 0 6 f

image.png

如果有多个镜像,且第1位不能确定唯一时,可以取前2位、前3位、……,直到能确定唯一镜像即可。

如果通过镜像创建的容器正在运行中,那么该镜像是不可以被删除的,删除时会有失败提示。

如果需要删除这样的镜像,需要先停止运行通过该镜像创建的容器,并且删除该容器。

二、容器操作

1、创建并启动容器

创建并启动容器的命令为docker run,其前提是必须先拉取镜像,这里,我们演示下nginx,并指定其运行端口为8888。

  1. # 拉取镜像
  2. docker pull nginx
  3. # 创建并启动容器(以下效果等同)
  4. docker run -d -p 8888:80 --name nginx nginx:latest
  5. docker run -d -p 8888:80 --name nginx nginx
  6. docker run -d -p 8888:80 --name nginx 0

image.png
参数说明:

  • -d:指定容器在后台运行
  • -p 8888:80:端口映射,将宿主机的8888端口映射到容器的80端口
  • —name nginx:指定容器名称为nginx
  • nginx:latest:指定镜像,版本号不填时则默认为latest,也可以用镜像ID代替

    这时,已成功创建并启动nginx容器,通过宿主机IP和8888端口,即可访问容器中的nginx。

image.png

2、查看容器

查看容器命令为docker ps,可以查看当前运行中的容器。

  1. docker ps

image.png

3、停止容器

停止容器命令为docker stop,命令格式为:docker stop 容器名,或docker stop 容器ID,其中容器ID可以取前几位,能确定唯一容器即可。

  1. # 以下效果等同
  2. docker stop nginx
  3. docker stop 3

image.png

这里的参数nginx,可不是nginx:latest的意思,而是取自NAMES,由docker run命令的—name参数提供。

我们要怎么查看所有容器呢,还是通过docker ps,加上-a即可。

  1. docker ps -a

image.png
可同时停止多个容器,容器之间用空格隔开。为了演示方便,我们再创建2个nginx容器。

  1. # 创建并启动nginx容器
  2. docker run -d -p 8888:80 --name nginx1 0
  3. docker run -d -p 9999:80 --name nginx2 0
  4. # 查看全部容器
  5. docker ps -a
  6. # 停止多个容器
  7. docker stop nginx1 nginx2

image.png

4、启动容器

启动容器命令为docker start,参数与停止容器一致,可同时启动多个容器。

再次启动nginx,不能使用docker run命令,因为nginx容器已经创建,如上面的nginx、nginx1、nginx2。

  1. # 以下效果等同
  2. docker start nginx1
  3. docker start 0
  4. # 以下效果等同(启动多个容器)
  5. docker start nginx1 nginx2
  6. docker start 0 c

image.png

nginx和nginx1不能同时启动,都使用了宿主机的8888端口,同时启动时将提示端口被占用错误。

5、删除容器

删除容器命令为docker rm,参数与停止/启动容器一致,可同时删除多个容器。

  1. # 以下效果等同
  2. docker rm nginx1
  3. docker rm 0
  4. # 以下效果等同(删除多个容器)
  5. docker rm nginx1 nginx2
  6. docker rm 0 c

image.png

运行中的容器是不可以被删除的,删除前必须停止。

三、命令总结

以上介绍了镜像和容器的最基本操作,这里做个总结。

1、镜像

  1. # 1. 拉取镜像
  2. docker pull nginx
  3. docker pull nginx:latest
  4. docker pull mysql:8.0.29
  5. # 2. 查看镜像
  6. docker images
  7. # 3. 删除镜像
  8. docker rmi nginx
  9. docker rmi nginx:latest
  10. docker rmi 0 # 0代表镜像ID
  11. docker rmi 0 6 f

2、容器

  1. # 1. 创建并运行容器
  2. docker run -d -p 8888:80 --name nginx nginx:latest
  3. docker run -d -p 8888:80 --name nginx nginx # 版本默认为latest
  4. docker run -d -p 8888:80 --name nginx 0 # 0代表镜像ID
  5. # 2. 查看容器
  6. docker ps
  7. docker ps -a
  8. # 3. 停止容器
  9. docker stop nginx
  10. docker stop 0 # 0代表容器ID
  11. docker stop 0 c
  12. # 4. 启动容器
  13. docker start nginx
  14. docker start 0 # 0代表容器ID
  15. docker start 0 c
  16. # 5. 删除容器
  17. docker rm nginx
  18. docker rm 0 # 0代表容器ID
  19. docker rm 0 c

3、官方参考

当我们执行某个Docker命令时,可以通过https://docs.docker.com查看官方文档,以了解命令的各项参数和用法。例如docker run,通过搜索进入响应页面,里面有关于该命令的详细解释和例子。
image.png
以上,就是关于镜像和容器最基本的命令介绍了,这也是Docker最基础的操作。接下来,我们还要掌握Docker的几个其他基本知识,以及更高级的用法。