1. 环境
最开始是实验性质,所以就安装在工作电脑的 Ubuntu16.04LTS 操作系统的虚拟机上。无nvida显卡,所以也不需要GPU支持。
本文参考的是Tensorflow安装的官方指南。
2. 安装docker
参考源:Docker官网
安装新版本 docker 需要移除旧版本的 docker ,官方推荐的命令是:
$ sudo apt-get remove docker docker-engine docker.io
我们可以选择从 apt 安装或者下载 deb 文件安装,这里还是从 apt 安装。
首先运行 sudo apt-get update
命令来更新库。
然后安装一些必要的工具:
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
接着添加 docker 官方的 GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
你可以打印以下看看是否是正确的值:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
然后就是加入 docker 的源到你的 apt 软件库中了:
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
好了,至此所有必要的准备都做好了,就可以安装 docker了,话说 docker 是分为两种不同的版本:CE 和 EE, EE是商业版本,这里我们选择CE。
这里先更新一下 apt 远程库:
sudo apt-get update
然后就可以安装 docker了:
sudo apt-get install docker-ce
如果你要安装特定版本的 docker, 也可以使用 $ sudo apt-get install docker-ce=<VERSION>
命令去安装。
3. 为 docker 设置代理 && 运行 hello world
由于这边是用的实验室的网,要访问外网需要走本地的一个 http 代理,所以需要给
docker 设置一个代理,当然,如果觉得由于某些不可描述的原因,访问官方 repository 不够顺滑,也可以用这种方法给 docker 设置一个代理。
大致方法就是在 /etc/systemd/system/docker.service.d/
目录下建立一个内容为
[Service]
Environment="HTTP_PROXY=http://username:password@proxy.example.com:80/"
的名为 httpproxy.conf
的文件。
然后刷新一下 systemd 的设置:
$ sudo systemctl daemon-reload
再然后重启一下 docker 服务,或者重启一下系统:
$ sudo systemctl restart docker
代理就设置好了,这时候可以先运行一下计算机世界万能的 hello world 例程:
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
$ sudo docker run hello-world
前面两个命令是新建一个名为 docker
的 unix group 并把当前用户加入其中,会看到系统会先 pull 一个 hello world 镜像下来,然后运行之。
4. 下载 tensorflow 镜像并运行
运行过 hello world, 运行 tensorflow 也就不那么难了。
$ docker run -it -p hostPort:containerPort TensorFlowCPUImage
其中 hostPort:containerPort
是可选的,代表 docker 监听的端口,这里可以不用,会选一个可用端口来做, TensorFlowCPUImage
是 tensorflow 的镜像地址,我们这里选 gcr.io/tensorflow/tensorflow
。
完整命令如下:
docker run -it gcr.io/tensorflow/tensorflow
然后就会看到 tensorflow 看起来像是一个后台进程一样运行起来了,并且占用了当前
shell 的标准输入输出。
啊,那如何用 tensorflow 的库呢,我们先运行一下
docker ps
会看到如下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63e779a8b666 gcr.io/tensorflow/tensorflow "/run_jupyter.sh --a…" 18 seconds ago Up 16 seconds 6006/tcp, 8888/tcp romantic_lamport
观察到它的名字是romantic_lamport
, 于是用命令:
docker exec -it romantic_lamport bash
就可以进到 docker 的 shell 下,然后就可以用 python shell 或者 whatever 下用 tensorflow 的库愉快的玩耍啦~!
关闭也很简单:
docker stop romantic_lamport