《第一本 Docker 书》读书笔记 - 1: 简介与安装python
当你刚刚安装好 Docker 的时候,你的机器上是一无全部的,这个时候你就须要下载镜像到本地,从哪里下载呢?固然是从仓库中上下载。mysql
Dcoker 的仓库和 Maven 的仓库比较类似,分为公共仓库和私有仓库。公共仓库通常指的是有 Docker 公司运营的 Docker Hub,上面按照建立者的不一样分为两种类型:Docker 官方建立和维护的镜像、其余用户建立和维护的镜像。sql
Docker Hubdocker
安装构建方式的不一样分为:自动构建、非自动构建。自动构建通常是将 Github 等代码托管平台中含有 Dockerfile 文件的仓库链接到 Docker Hub 中,当咱们向仓库中推送代码的时候就会触发一次构建建立一个新的镜像;非自动构建是指经过命令行将本地构建好的镜像推送到 Docker Hub 。shell
当你想要拉取一个镜像,当时又不肯定这个镜像基本的信息的时候,你就能够在 Docker Hub 中查找:windows
固然你也能够使用命令行来进行查找:bash
# 查找 windows 镜像
$ docker search windows
复制代码
说了这么多,咱们终于能够开始拉取镜像了,只须要一条很是简单的命令:网络
# 拉取 python 镜像
$ docker pull python
复制代码
经过第一句输出日志能够看到使用了默认的标签 latest
,在 Docker 中是使用标签来区分同一个镜像的不一样的版本,好比 python 这个镜像就存在不少的标签:post
固然同一个镜像是能够打上不一样的标签推送到 Docker Hub 中,可是在此时就会认为这两个标签对应的是两个不一样镜像,这是由于 Docker 是以镜像名和标签共同来肯定一个镜像的。同时当你没有显示的指定标签的时候就会默认使用 latest
标签。spa
当一个镜像成功拉取到本地后,就会输出这个镜像的 id :
当你下载一个镜像后就能够使用命令看看本地中的镜像列表:
# 查看镜像列表
$ docker images
复制代码
iamges
命令会显示本地的镜像列表,并显示每个镜像的简要信息。当 iamges
后边跟上具体的镜像名的时候就会显示这一个镜像的简要信息:
# 查看 python 镜像的详细的信息
$ docker image inspect python
复制代码
你能够使用上述的命令去查看镜像的更多的信息,该命令会返回一个 JSON 形式的字符串,会包含镜像的名称、标签、启动配置、网络端口等等的很是详细的信息。
# 删除 hello-world 镜像
$ docker rmi hello-world
复制代码
除了直接指定镜像名外还能够再删除的时候指定镜像的 ID ,防止在你本地构建时候若是出现一个没有名称的镜像时能够使用镜像的 ID 来进行删除:
# 以交互式的方式运行一个名为 fedora-container 的容器,在运行结束后自动删除
$ docker run --rm --name fedora-container -t -i fedora:31
复制代码
参数 | 含义 |
---|---|
--rm | 在容器结束运行后删除该容器 |
--name | 为容器命名,例如:hello-world-container |
-t | 分配一个伪 tty |
-i | 开启 STDIN ,即便没有链接 |
固然 docker run 命令还有不少的参数,能够使用 docker run —help
来进行查看:
容器运行分为两种方式:交互式容器与守护式容器。
交互式容器:就是 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 | 端口映射 |
查看容器列表:
# 查看全部的容器
$ docker ps -a
复制代码
参数 | 含义 |
---|---|
-a | 查看全部的容器,不加该参数只显示运行中的参数 |
查看单个容器的详细信息:
# 查看 mysql_docker 容器的详细的信息
$ docker container inspect mysql_docker
复制代码
该命令最终会以 JSON 形式输出容器的详细的信息。
# 中止一个运行中的容器
$ docker stop mysql_docker
# 启动容器
$ docker start mysql_docker
# 重启启动容器
$ docker restart mysql_docker
复制代码
这三个命令输出的都是容器的名称或容器的 ID (未设置容器名称时)。
# 删除 mysql_docker 容器
$ docker rm mysql_docker
复制代码
Id 与 name 之间的区别
不管是镜像仍是容器,多会分配一个 id ,可是你还能够指定一个 name (镜像不用指定),大多说状况下二者都是等效的。
守护式容器不能够自动删除
开启一个守护式容器的时候不能够使用 —rm
使容器在运行结束后自动删除。