> For the complete documentation index, see [llms.txt](https://kerasnoone.gitbook.io/garnet/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kerasnoone.gitbook.io/garnet/gong-cheng-zhan/docker-ge-li-yuan-li/docker-jing-xiang/docker-pull.md).

# docker pull

## Pull

项目image一般从一个纯净的环境开始. 例如我们开发一个python后台服务, 可以从纯净的python环境开始:

```bash
docker pull python
```

又或我现在需要创建一个虚拟环境运行深度学习模型, 需要一个装有tensorflow包的python环境:

```bash
docker pull tensorflow/tensorflow
```

这里的`tensorflow/tensorflow`, 第一个`tensorflow`指的是用户名, 第二个`tensorflow`是image的名字. 使用上面这个命令行, 得到是装有最新CPU版本tensorflow的环境, 其实等同于:

```bash
docker pull tensorflow/tensorflow:latest
```

`latest`是这个image的一个**标签**(tag), `latest`常作为默认的标签, 如果pull时不指定标签, 得到的就是这个标签对应的image.

一个image可以包含多个标签, 这点类似于git中的分枝(branch). 例如我们想使用最新GPU版本的tensorflow, 就需要使用下面的tag:

```bash
docker pull tensorflow/tensorflow:latest-gpu
```

如果要使用`1.14`GPU版本的tensorflow:

```bash
docker pull tensorflow/tensorflow:1.14.0-gpu-py3
```

### 格式

总结上面各种pull的例子, `docker pull`命令的格式如下:

```bash
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
```

其中镜像名称部分可以总结为:

```bash
docker pull <hub-user>/<repo-name>[:<tag>]
```

结合`docker pull tensorflow/tensorflow:latest-gpu`理解.

`OPTIONS`中常用的有:

* `-a`: 拉取所有 tagged 镜像
* `--disable-content-trust`: 忽略镜像的校验, 默认开启

## 总结

以tensorflow为例, 可以使用docker pull拉取不同tag的镜像, 就可以做到**CPU/GPU, 多版本**的共存. 如果有使用多版本tensorflow的需要, 这样的做法就避免了环境的冲突.

## 参考

* [Docker命令-docker pull](https://www.jianshu.com/p/f0c6302e869e)
* [docker pull](https://docs.docker.com/engine/reference/commandline/pull/)
