《第一本 Docker 书》读书笔记 - 2 - docker 的基本使用

220 阅读4分钟

《第一本 Docker 书》读书笔记 - 1: 简介与安装

1. 镜像

1.1 拉取(下载)镜像

当你刚刚安装好 Docker 的时候,你的机器上是一无所有的,这个时候你就需要下载镜像到本地,从哪里下载呢?当然是从仓库中上下载。

Dcoker 的仓库和 Maven 的仓库比较相似,分为公共仓库和私有仓库。公共仓库一般指的是有 Docker 公司运营的 Docker Hub,上面按照创建者的不同分为两种类型:Docker 官方创建和维护的镜像、其他用户创建和维护的镜像。

Docker Hub

image-20190717150538551

安装构建方式的不同分为:自动构建、非自动构建。自动构建一般是将 Github 等代码托管平台中含有 Dockerfile 文件的仓库连接到 Docker Hub 中,当我们向仓库中推送代码的时候就会触发一次构建创建一个新的镜像;非自动构建是指通过命令行将本地构建好的镜像推送到 Docker Hub 。

当你想要拉取一个镜像,当时又不确定这个镜像基本的信息的时候,你就可以在 Docker Hub 中查找:

image-20190717151638250

当然你也可以使用命令行来进行查找:

# 查找 windows 镜像
$ docker search windows

image-20190717151850460

说了这么多,我们终于可以开始拉取镜像了,只需要一条非常简单的命令:

# 拉取 python 镜像
$ docker pull python

image-20190717152334500

通过第一句输出日志可以看到使用了默认的标签 latest ,在 Docker 中是使用标签来区分同一个镜像的不同的版本,比如 python 这个镜像就存在很多的标签:

image-20190717153035710

当然同一个镜像是可以打上不同的标签推送到 Docker Hub 中,但是在此时就会认为这两个标签对应的是两个不同镜像,这是因为 Docker 是以镜像名和标签共同来确定一个镜像的。同时当你没有显示的指定标签的时候就会默认使用 latest 标签。

当一个镜像成功拉取到本地后,就会输出这个镜像的 id :

image-20190717153542796

1.2 查看本地的镜像

当你下载一个镜像后就可以使用命令看看本地中的镜像列表:

# 查看镜像列表
$ docker images

image-20190717153849005

iamges 命令会显示本地的镜像列表,并显示每一个镜像的简要信息。当 iamges 后边跟上具体的镜像名的时候就会显示这一个镜像的简要信息:

image-20190717154317271

1.3 显示镜像的详细的信息

# 查看 python 镜像的详细的信息
$ docker image inspect python

你可以使用上述的命令去查看镜像的更多的信息,该命令会返回一个 JSON 形式的字符串,会包含镜像的名称、标签、启动配置、网络端口等等的非常详细的信息。

1.4 删除镜像

# 删除 hello-world 镜像
$ docker rmi hello-world

image-20190717155730338

除了直接指定镜像名外还可以再删除的时候指定镜像的 ID ,防止在你本地构建时候如果出现一个没有名称的镜像时可以使用镜像的 ID 来进行删除:

image-20190717160046347

2. 容器

2.1 运行一个容器

# 以交互式的方式运行一个名为 fedora-container 的容器,在运行结束后自动删除
$ docker run --rm --name fedora-container -t -i fedora:31

image-20190717163327858

参数 含义
--rm 在容器结束运行后删除该容器
--name 为容器命名,例如:hello-world-container
-t 分配一个伪 tty
-i 开启 STDIN ,即使没有连接

当然 docker run 命令还有很多的参数,可以使用 docker run —help 来进行查看:

image-20190717162131300

2.2 容器运行的两种方式

容器运行分为两种方式:交互式容器与守护式容器。

交互式容器:就是 2.1 中所演示的,为了某种短暂的任务而启动,随着任务的结束而停止,一般不会长时间的运行。一般交互式容器可以分配一个伪 tty 终端,并且可是在启动的时候使用 —rm 参数,让其在运行结束后自动销毁。

守护式容器:守护式容器一般是为了某些长期运行的任务而启动,在后台长期的驻留运行,在不出错的情况下一般只能使用 docker stop 命令关闭。开启守护式命令只需在 docker run 命令添加参数 -d 即可。例如 MySQL 、Nginx 等服务。

# 以守护式的方式运行一个名为 mysql_docker 的容器,将容器的 3306 端口映射到宿主机的 3306 端口上
docker run --name mysql_docker -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD='password' mysql
参数 含义
-d 启动一个守护式容器
-e 设置容器的环境变量
-p 端口映射

2.3 查看容器的信息

查看容器列表

# 查看所有的容器
$ docker ps -a

image-20190717165158813

参数 含义
-a 查看所有的容器,不加该参数只显示运行中的参数

查看单个容器的详细信息

# 查看 mysql_docker 容器的详细的信息
$ docker container inspect mysql_docker

image-20190717165850520

该命令最终会以 JSON 形式输出容器的详细的信息。

2.4 停止容器的运行、启动容器、重新启动容器

# 停止一个运行中的容器
$ docker stop mysql_docker

# 启动容器
$ docker start mysql_docker

# 重启启动容器
$ docker restart mysql_docker

image-20190717170446789

这三个命令输出的都是容器的名称或容器的 ID (未设置容器名称时)。

2.5 删除容器

# 删除 mysql_docker 容器
$ docker rm mysql_docker

3. 补充

  1. Id 与 name 之间的区别

    无论是镜像还是容器,多会分配一个 id ,但是你还可以指定一个 name (镜像不用指定),大多说情况下两者都是等效的。

  2. 守护式容器不可以自动删除

    开启一个守护式容器的时候不可以使用 —rm 使容器在运行结束后自动删除。