目录
1,镜像和容器的区别
http://dockone.io/article/783 区别和说明
镜像和容器的操作的方法:https://blog.csdn.net/dongdong9223/article/details/52998375
注意使用: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)
参考到:
https://blog.csdn.net/u011552182/article/details/80054899
https://blog.csdn.net/luojie140/article/details/78696330
https://blog.csdn.net/qq_28888837/article/details/80757731
https://www.cnblogs.com/wuyida/p/6300210.html
http://blog.51cto.com/yanconggod/1880348 端口暴露
https://blog.csdn.net/cs_leebo/article/details/64444243
这里配置的环境是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安装不存在的包
此部分参考https://www.cnblogs.com/php-linux/p/8944646.html
那接下来就是我们我安装一些conda中没安装的库拉,例如上面的skimage。
(1)Anaconda作为一个工具包集成管理工具,下载python工具包是很方便的,直接敲:
conda install package_name
即我们直接输入:conda install skimage
但是有时候安装一个工具包(如skimage)的时候,在当前的channels中找不到这个包,会提示
(2)这个时候,我们可以使用下面的指令来查找我们想要安装的包(以skimage为例)
$ anaconda search -t conda skimage
(3)如上图所示,这里我们找到了一个可用的skimage包,名为DavidMertz/accelerate-skimage。
接着,我们使用show指令来查看该包的详细情况
$ anaconda show DavidMertz/accelerate-skimage
(4)根据前一步返回的提示,我们使用下面的指令install这个包
$ conda install --channel https://conda.anaconda.org/DavidMertz accelerate-skimage
(5)选择y(yes),然后等待下载安装
(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行就可以
内容改成:
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
如上图,则服务就启动了
8.在浏览器输入服务器的IP+映射的端口号即可访问,完成(输入的密码为上面我们自己设置的)
http://192.168.1.127:8888就可以访问到网页,输入密码,就能进入了
四、主机和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的安装了,就可以开始跑你的例子了