Docker安装基于CentOS的双Python系统流程

引子

目前docker容器非常火爆,许多公司已经将docker作为开发和生产环境部署的重要环节,docker的学习不可避免。同时,由于家中和公司一共4台电脑+N台服务器,每一台都要配置环境,相当繁琐,docker的功能正好满足我们在不同环境可以轻松进行开发和测试的需求。因此,我将自己学习、安装、应用docker的过程分享出来,以供读者借鉴,少走弯路。
测试主要是在Windows10系统上进行,目的是在Docker上创建一个Centos系统,然后安装2.7和3.6两个版本的Python,以便日后的机器学习和深度学习的需求。
Docker本身的安装不再赘言,去下载一个docker toolbox目前看来是最快的。在我的windows系统上,不需要安装docker或VM VirtualBox,直接运行docker toolbox即可进入Docker环境。

CentOS环境搭建

1. 从docker-cn安装CentOS系统

为了更快速pull到image(镜像),一种是翻墙下,一种是通过国内的镜像下载,这里推荐直接使用docker-cn的镜像。

docker pull registry.docker-cn.com/library/centos

pull Centos镜像

2. 进入容器(Container)内部看一下,并退出

docker run -it registry.docker-cn.com/library/centos bash

进入container内部

ctrl-d

3. 创建image

这步可以晚点做,但为了使我们调用便捷,我们先创建一个image。377为container id的前三位,一般前三位即已足够。

docker commit 377 server-centos

创建image

4. 正式进入CentOS系统

docker run -it risk-ml/centos-python bash

5. 安装必要的包

为了进一步的安装,以及之后的步骤减少反复,这里讲大致需要的包先统一安装完。以后如果发现缺了,还需要yum install补充,有些还需要后续的编译和安装才能奏效。

yum install wget gcc make zlib-devel git
yum install readline-devel openssl-devel
yum install bzip2-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel

安装依赖包
选择y继续

6. 下载Python3源码

CentOS自带的是Python2.7,Python3以上的版本需要自己安装。
在线下载python3.6的压缩包,这个速度到是挺快的。

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

下载Python

7. 解包、解压缩

xz -d Python-3.6.1.tar.xz
tar -xvf Python-3.6.1.tar

解包解压

8. 配置

cd Python-3.6.1
./configure --prefix=/usr/local/python3.6 --enable-optimizations

配置

--prefix 是预期安装目录,--enable-optimizations 是优化选项(LTO,PGO 等)加上这个 flag 编译后,性能有 10% 左右的优化(如果没记错的话),但是这会明显的增加编译时间。

9. 编译、安装

make

make

make install

make-install

注意,有时候发现缺少了一些包,在重新yum了之后,需要重新进行configure和make install

10. 命令映射

这个步骤是为了以后操作更简便,我们将python3的命令映射到环境变量的path中,可以直接调用,省去了指定路径。同时避免了在同时有python2和python3的环境中的版本指定问题。

ln -s /usr/local/python3.6/bin/python3 /usr/bin/python3
ln -s /usr/local/python3.6/bin/pip3 /usr/bin/pip3

当我们需要通过python2运行脚本或安装包时,只需要执行:

python script.py
pip install pandas

当我们需要通过python3运行脚本或安装包时,只需要执行:

python3 script.py
pip3 install pandas

至此,Centos内部的环境基本搭建完毕,已经可以使用python了,我们可以通过python --version和python3 --version查看版本号以确认。


Python环境搭建

1. python2安装pip

因为原装的Python2.7没有pip,我们需要安装一下,具体不再赘述

yum install epel-release
yum install python-pip


2. python2安装matplotlib

这一步放在最前面,是因为碰到了些问题。注意,此处没有用pip安装,而是用yum安装,并且需要预装一些依赖包

yum install freetype freetype-devel python-freetype
yum install libpng libpng-devel python-pypng
yum install python-matplotlib

虽然matplotlib已经安装完毕,但还是有一些问题暂时没得到解决。我们import matplotlib没有问题,但是pyplot的调用会引发报错。
最简单的解决办法是在使用pyplot的脚本中加上use('Agg'),问题即可解决

import matplotlib
matplotlib.use('Agg')
from matplotlib.pyplot import *

matplotlib正常调用


3. 安装xgboost

在安装xgboost过程中,容易碰到各种问题,特别是安装0.60以上的版本。
各种尝试后,最有效的是通过git clone github上的xgboost进行安装。

# 提前安装一些依赖包
yum install gcc gcc-c++
yum install lapack lapack-devel blas blas-devel

# 下载xgboost源码,并编译
git clone --recursive https://github.com/dmlc/xgboost
cd xgboost
git submodule init
git submodule update
make -j4

# 到路径下直接进行安装,Python2和Python3都安装一下
cd python-package/
python setup.py install
python3 setup.py install


4. 安装tensorflow和keras

如果在深度学习方面有要求的话,可以顺便装一下keras和tensorflow。
整体都没什么问题,中间缺少的依赖包也可以提前装一下

pip install np-utils


其他Docker操作

既然要用Docker,一切实用且必要的操作我在这里也简单介绍一下

1. 文件映射

当我们在主机上已经有一些脚本或者文件,希望通过Centos中的Python环境去执行或读取。
此时,需要将本地的文件夹在远程端做一个同步的映射。

docker run -it -v /home/me/docker/project1:/usr/me/project2 server-centos bash

  • 在本地(或者是服务器)创建文件的存放目录: /home/me/docker/project1
  • 在docker的container中创建同步的目录:/usr/me/project2

通过上面的命令可以做文件夹的映射,执行上面的run命令之后,会运行镜像,并且在CentOS的/usr/me/project2路径下会自动包含所有本地/home/me/docker/project1中的文件。
当然,如果中间隔的中间服务器太多,我们还需要先将文件进行传输(复制),接下来会讲到。

2. 服务器之间的文件传输

经常地,我们要在Windows和Linux服务器之间或者两个linux服务器之间进行文件传输,我们分开介绍。

2.1. Windows与Linux服务器之间

推荐XFPT,可以直接进行界面化操作,这里不做详细展开。

2.2. Linux服务器之间(有密码)

scp -r /home/me/docker/project1 me@xxx.xx.xxx.xx:/usr/me/project2

会将整个project1文件夹拷贝到project2文件夹中,默认是需要输入登录密码的

2.3. Linux服务器之间(无密码)

如果希望无密码登录,需要通过ssh传输

server A

进入用户目录: cd /home/me
创建.ssh目录: mkdir .ssh
进入.ssh目录: cd .ssh
生成密钥对: ssh-keygen -b 1024 -t rsa

server B

进入用户目录: cd /usr/me
创建.ssh目录: mkdir .ssh
进入.ssh目录: cd .ssh
创建新文件: touch authorized_keys

server A

Key授权:scp -p .ssh/id_rsa.pub me@xxx.xx.xxx.xx:/usr/me/.ssh/authorized_keys/authorized_keys
将A生成的id_rsa.pub放到B上的授权key文件中

server A

无密码传输:scp -r /home/me/docker/project1 me@xxx.xx.xxx.xx:/usr/me/project2

需要注意,因为传输中没有指定key的位置,因此,最后执行scp操作时需要在包含.ssh文件夹的目录下

3. 镜像的保存与转移

当我们有一份完整的比较好的镜像,希望可以在别的服务器上使用,通常有两种方式:

  1. 上传镜像到仓库中(本地或公共仓库),但是另一台服务器很肯能只是与当前服务器局域网想通而没有公网的,所以如果使用仓库的方式,只能自己搭建私有仓库(private registry)
  2. 将镜像保存为文件上传到其他服务器再从文件中载入镜像

具体实现方式如下:

# 存储成压缩包

docker save server-centos > /home/me/server-centos.tar

# 使用ssh等方法传输文件之后,通过压缩包解压:

scp -r /home/me/server-centos.tar me@xxx.xx.xxx.xx:/usr/me
docker load < /usr/me/server-centos.tar
docker images



作者: 奥拉基爾
2018 年 01月 11日

参考目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342