要基于Docker安装tensorflow,当然首先要安装Docker了,下面先说安装Docker的步骤

1.  首先卸载电脑上可能存在的老的版本,如果没有安装过可以不执行

$ sudo yum remove docker \
                  docker-common \
                  docker-selinux \
                  docker-engine



2. 配置Docker仓库

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2



$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo



下面两步可选:

$ sudo yum-config-manager --enable docker-ce-edge



$ sudo yum-config-manager --enable docker-ce-test



3. 安装Docker CE(Community Edition, Docker官网推荐安装这种)

$ sudo yum install docker-ce



如果你要安装指定版本的docker,可以用下面的命令

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64            17.09.ce-1.el7.centos             docker-ce-stable



查找到之后,再安装对应的版本,我这里安装的默认的版本


4. 启动Docker

$ sudo systemctl start docker



5. 可以通过如下的命令来验证Docker是否启动成功

$ sudo docker run hello-world



好的,到了这里Docker就已经安装完成,官网地址: 

https://docs.docker.com/engine/installation/linux/docker-ce/centos/#upgrade-docker-ce


接下来说下基于Docker来安装Tensorflow的步骤

Docker中文社区中说用如下命令来安装:

$ docker run -it b.gcr.io/tensorflow/tensorflow



但是执行后报错:

Unable to find image 'gcr.io/tensorflow/tensorflow:latest' locally
docker: Error response from daemon: Get https://gcr.io/v1/_ping: dial tcp 64.233.188.82:443: i/o timeout.
See 'docker run --help'.



但是网上说主要是国内的用户会报错,有的借助VPN可以解决,但是有的不行

解决办法就是更换镜像的pull镜像库,也就是说不是从Tensorflow给出的库进行pull,而是用Docker的库

因此执行如下命令:(注意这里在docker中装tensorflow镜像的时候,已经装了一个操作系统了,tensorflow是装在操作系统上的,一般都是在docker中装镜像,而装镜像一般都是自带操作系统的,软件是装在操作系统上的) 。失败了可以重试几次

$  sudo docker run -it -p 8888:8888 tensorflow/tensorflow



接下来会得到如下输出:

Unable to find image 'tensorflow/tensorflow:latest' locally
latest: Pulling from tensorflow/tensorflow
ae79f2514705: Pull complete 
5ad56d5fc149: Pull complete 
170e558760e8: Pull complete 
395460e233f5: Pull complete 
6f01dc62e444: Pull complete 
abeb898c5fe7: Pull complete 
d66940709c30: Pull complete 
44835d776a0b: Pull complete 
6ec5364eed97: Pull complete 
3ff1cc6e638b: Pull complete 
56aa69af61b9: Pull complete 
982e3b05055e: Pull complete 
Digest: sha256:22ffc051ea06ee478045e8ff1bcaa13522c79be64feba8ed60204372a5d10708
Status: Downloaded newer image for tensorflow/tensorflow:latest
[I 02:10:35.653 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 02:10:35.688 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 02:10:35.697 NotebookApp] Serving notebooks from local directory: /notebooks
[I 02:10:35.697 NotebookApp] 0 active kernels
[I 02:10:35.697 NotebookApp] The Jupyter Notebook is running at:
[I 02:10:35.697 NotebookApp] http://[all ip addresses on your system]:8888/?token=3da8b01693d986b54eb3a0b2d6e21bf1f15d386b0798696e
[I 02:10:35.697 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 02:10:35.698 NotebookApp] 
    
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=3da8b01693d986b54eb3a0b2d6e21bf1f15d386b0798696e



因为这个镜像比较大,所以需要一定的时间来执行pull


打开一个新的命令终端进行测试看是否安装成功, 现在的这个终端不能关闭

首先看下docker中有哪些容器/镜像存在,  其实这里每个镜像都是包含一个操作系统的,“COMMAND ID” 可以理解成镜像的Id,其实也可以理解成操作系统的Id

$ sudo docker ps -a



得到的输出如下:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                              NAMES
4e6872b2712a        tensorflow/tensorflow   "/run_jupyter.sh --a??   5 minutes ago       Up 5 minutes        6006/tcp, 0.0.0.0:8888->8888/tcp   unruffled_lalande



可以看到我的Docker容器中只有一个tensorflow,其id为:4e6872b2712a


接着进入容器,替换我的这个id:4e6872b2712a为你的,其他的不变。

$ sudo docker exec -i -t 4e6872b2712a /bin/bash



得到的输出为:

[@tc_57_128 ~]# docker exec -i -t 4e6872b2712a /bin/bash
root@4e6872b2712a:/notebooks#

这里我们可以认为是进入到了Docker中Id为4e6872b2712a的操作系统中,而这个系统里面装了tensorflow,可以看到root@4e6872b271a的含义为:

root:  当前的账户

4e6872b2712a: 机器的标识,等价于机器的ip

我们可以来看下这个操作系统是Linux的哪个发行版:

root@4e6872b2712a:/notebooks/myCode# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.3 LTS
Release:	16.04
Codename:	xenial

可以看到是ubuntu的

那么我们就可以使用apt-get命令来给这个操作系统安装所需要的软件, 比如可以安装vim:

$ apt-get update && apt-get install vim


注意: 这里安装的软件只在这个Docker的这个镜像中有效,其他的镜像中是无效的,因为不同的镜像属于不同的操作系统

这个镜像(操作系统)中也已经装了python

可以查看下python的版本

root@4e6872b2712a:/notebooks# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>



导入tensorflow看是否安装成功

>>> import tensorflow as tf
>>>


可以看到import后没有报错,所以tensorflow安装成功

那么以后使用tensorflow的话,就必须进入这个tenforflow镜像的操作系统中才能使用


最后备注下在mac os下安装docker的方法:


那么如何重启一个tensorflow容器呢?

首先看下有哪些容器

$docker ps -a 

可以看到如下输出:

tensorflow docker映像_tensorflow docker映像

可以看到id为9598c088945a的tensorflow容器目前处于exit状态,就是还没有开始工作

启动这个容器

$docker restart 9598c088945a

然后进入这个docker容器



$docker exec -i -t 9598c088945a /bin/bash

接下来就可以愉快的使用tensorflow了