目录

1,镜像和容器的区别

2,搭建自己环境的方法

3,开始docker下的tensorflow的搭建

一、装好anaconda3

二、跟新anaconda和tensorflow的安装

三、安装jupyter notebook

四、主机和docker容器文件交换



1,镜像和容器的区别

http://dockone.io/article/783 区别和说明

注意使用:docker run -it -p 8888:8888 ubuntu:16.04 /bin/bash

                  docker exec -it -p 8888:8888 b836e3ce88df /bin/bash

2,一般搭建自己环境的方法

我们一般先启动一个镜像,运行成容器,然后在这个进程中配置好了相应的环境,比如LAMP,ngnix,tensoflower后,可以通过 " docker commit 容器id 新镜像名:tag " 把它打包成我们要的基础镜像,可以上传到云端 " docker push ",也可以自己本地保存一份原始的镜像 " docker save "。

 

3,开始docker下的tensorflow的搭建

我们这里的要求稍微不一样,我想实现搭好环境后,既能在本地上跑(anaconda),也可以使用浏览器卡房端口跑用例(Jupyter)

参考到:

http://blog.51cto.com/yanconggod/1880348        端口暴露


这里配置的环境是cpu版本的

一、先装好anaconda3

这里是直接使用的ubuntu.16.04的docker镜像作为基础。

(1)我的云服务器是centos7,现在上面安装docker

即 yum install docker

 

(2)获得ubuntu:16.04的docker镜像作为我们的版本基础

#docker pull ubuntu:16.04

======================================

docker运行容器

# docker run -it -p 宿主机端口:容器应用端口 centos:latest /bin/bash

docker容器转镜像

# sudo docker commit -m "镜像说明" -a “你的用户名" 容器id 镜像名:标签

========================================

[root@centos ~]#docker run -it -p 8888:8888 ubuntu:16.04 /bin/bash #进入到改镜像的容器当中

 

root@b836e3ce88df: (进入容器后开头是这样子的)

root@b836e3ce88df: apt-get update
root@b836e3ce88df: apt-get install -y vim
root@b836e3ce88df: apt-get install -y wget #下面的开头都是这样,就简写了
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.1.0-Linux-x86_64.sh
yum install -y bzip2 #不安装这个,会出现bunzip2: command not found的错误
bash Anaconda3-5.1.0-Linux-x86_64.sh

提示输入 yes 

最后

# source ~/.bashrc

 

到这里我们的anaconda是已经安装好了

-------------------------------------

我们这里也可以查看下环境变量的anacnda是不是Ok的.

echo $PATH

若不是ok的,可以使用下面的方法配置环境变量

vim /etc/profile

export PATH=".......... ":$PATH

 

source /etc/profile

---------------------------------------------

最后通过下面这条,查看我们配置的conda的版本 # conda -V

root@b836e3ce88df:/# conda -V
conda 4.4.10

则安装完成 

 

二、跟新anaconda和tensorflow的安装

更新anaconda 

# conda upgrade --all 

安装包 

# conda install 包名

 

1.关于镜像资源,更换清华源(墙太高),国内的会快很多

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

 

2.创建一个名flappbird 的环境

(这个名字可以任意取,建议不要取tensorflow,尽量区分开,为自己的使用环境)

conda create -n flappbird python=3.6

#因为我这里就只配置了一个python3.6的版本(anacodna3默认)

 

3.激活环境

source activate flappbird

激活这个环境就可以使用了,你可以在这个环境下安装一些python模块。不影响他人

激活前 root@b836e3ce88df:

激活后会变成 (flappbird) root@b836e3ce88df:

不使用时:source deactivate

 

注:比如我自己系统当中是用的python2.7的版本,在系统中使用python xxx.py时,使用的是2.7的编译器

        只有当激活了source activate flappbird,我们在这个flappbird环境当中使用的是我们所配置的python3.6编译器(anaconda3默认的)

 

4.tensorflow安装

给 flappbird 环境安装tensorflow

conda install -n flappbird -c https://conda.anaconda.org/jjhelmus tensorflow

或者使用pip安装:

pip install --upgrade --ignore-installed tensorflow

 

5.环境测试

到这里如果没有出现什么错误之外的话,基本上我们的tensorflow环境就搭建好了。

我们创建一个test.py 文件写入下面内容:

vim test.py

# -*- coding:UTF-8 -*-
import glob
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
import numpy as np
import time
from skimage import io,transform

a = tf.constant(10)
b = tf.constant(32)
with tf.Session():
   c = tf.add(a,b)
   print(c)
   print(c.eval())

python test.py 运行,你会发现报错,没有skimage,但是没有说找不到tensorflow,说明我们的环境是配置OK的。

(flappbird) root@b836e3ce88df:~/anaconda3/envs/TensorFlow/bin# python test.py
Traceback (most recent call last):
File "test.py", line 2, in <module>
from skimage import io,transform
ModuleNotFoundError: No module named 'skimage'

 

6.anaconda安装不存在的包

那接下来就是我们我安装一些conda中没安装的库拉,例如上面的skimage。

(1)Anaconda作为一个工具包集成管理工具,下载python工具包是很方便的,直接敲:

conda install package_name

 

即我们直接输入:conda install skimage

但是有时候安装一个工具包(如skimage)的时候,在当前的channels中找不到这个包,会提示

                          

docker和anaconda的区别 anaconda和docker有什么区别_anaconda

 

(2)这个时候,我们可以使用下面的指令来查找我们想要安装的包(以skimage为例)

$ anaconda search -t conda skimage

docker和anaconda的区别 anaconda和docker有什么区别_python_02

 

(3)如上图所示,这里我们找到了一个可用的skimage包,名为DavidMertz/accelerate-skimage。

接着,我们使用show指令来查看该包的详细情况

$ anaconda show DavidMertz/accelerate-skimage

docker和anaconda的区别 anaconda和docker有什么区别_tensorflow_03

 

(4)根据前一步返回的提示,我们使用下面的指令install这个包

$ conda install --channel https://conda.anaconda.org/DavidMertz accelerate-skimage

docker和anaconda的区别 anaconda和docker有什么区别_python_04

 

(5)选择y(yes),然后等待下载安装 

docker和anaconda的区别 anaconda和docker有什么区别_python_05

 

(6)安装完成后,我们可以打开python试试是否已经成功导入了skimage包,然后我们在运行上面的6步骤的内容就不会再报错了。可以打印出正常的结果:

Tensor("Add:0", shape=(), dtype=int32)

42

 

7.若出现错误(关于网络的错误)

错误:

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.continuum.io/pkgs/main/linux-64/repodata.json.bz2>

Elapsed: -

An HTTP error occurred when trying to retrieve this URL.

HTTP errors are often intermittent, and a simple retry will get you on your way.

ConnectionError(MaxRetryError("HTTPSConnectionPool(host='repo.continuum.io', port=443): Max retries exceeded with url: /pkgs/main/linux-64/repodata.json.bz2 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fd5d462df28>: Failed to establish a new connection: [Errno 101] Network is unreachable',))",),

解决办法: 

可能为我们设置的获取镜像资源的链接问题,打开源文件

我在配置的时候问题是,主要在于tensorflow-base-1.9.0下载的超级慢

vim ~/.condarc

删除defaults行就可以

docker和anaconda的区别 anaconda和docker有什么区别_docker_06

内容改成:

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
show_channel_urls: true

conda config --set show_channel_urls yes  

然后在进行更新就可以了

 

 

三、安装jupyter notebook

# conda install jupyter notebook 

启动jupyter 

# jupyter notebook

 

1.创建登录密码

#conda install ipython

#ipython

Python 3.6.2 (default, Aug 4 2018, 12:13:48)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: #一定要记住这个密码,即为后面网页登录的密码
Verify password:
Out[2]: 'sha1:3321fccb5b5d77e66080a5d3d94' #后面是需要的
In [3]:exit

 

2.生成配置文件

#jupyter notebook --generate-config --allow-root

得到提示:Writing default config to: /root/.jupyter/jupyter_notebook_config.py

 

3.修改配置文件

vi ~/.jupyter/jupyter_notebook_config.py

添加以下内容:

c.NotebookApp.ip='*' # 设置所有ip皆可访问

c.NotebookApp.password = u'sha1:3321fccb5b5d77e66080a5d3d94' #注意这里的密钥是刚刚生成的那个

c.NotebookApp.open_browser = False # 禁止自动打开浏览器

c.NotebookApp.port =8888 #随便指定一个端口,使用默认8888也可以

 

4.保存镜像

docker commit 容器ID 镜像名称

 

5. 启动images提供服务

docker run --privileged -d -p 8888:8888 -v /sys/fs/cgroup:/sys/fs/cgroup --name jupyter jupyter2:v2 /usr/sbin/init

 

6. 进入docker image

docker exec -it jupyter /bin/bash

 

7. 启动jupyter

# jupyter notebook --allow-root

docker和anaconda的区别 anaconda和docker有什么区别_docker和anaconda的区别_07

如上图,则服务就启动了

 

8.在浏览器输入服务器的IP+映射的端口号即可访问,完成(输入的密码为上面我们自己设置的)

http://192.168.1.127:8888就可以访问到网页,输入密码,就能进入了

docker和anaconda的区别 anaconda和docker有什么区别_python_08

 

四、主机和docker容器文件交换

docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

 1、 从容器里面拷文件到宿主机                 

在宿主机里面执行以下命令 :  

              docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 

     示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js,  现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?

     答案:在宿主机上面执行命令

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

2、从宿主机拷文件到容器里面

在宿主机里面执行如下命令:

              docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

       示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?

       答案:在宿主机上面执行如下命令     

docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
   
注:需要注意的是,不管容器有没有启动,拷贝命令都会生效。

 

至此就完成了,anaconda和tensorflow的安装了,就可以开始跑你的例子了