博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
制作Python3的docker镜像
阅读量:4190 次
发布时间:2019-05-26

本文共 4063 字,大约阅读时间需要 13 分钟。

目录


这是一篇制作docker镜像的blog。镜像里安装Python3和pip工具。下面分步介绍制作方法,仅供参考。如果有出错的地方欢迎留言讨论。

 

选择基础镜像

选择一个合适的镜像去安装python3等工具至关重要。在这里我选择了CentOS7镜像作为基础镜像。喜欢Ubuntu或者其他镜像的小伙伴可以自己下载尝试。下面的命令将CentOS7镜像下载到本地:

docker pull centos:7.4.1708

📚提示:如果下载centos镜像速度过慢,可以尝试更换镜像源。更换镜像源的方法这里不再介绍,需要的小伙伴可以自己搜索。

下载完毕,我们使用docker images可以看到刚刚下载的镜像:

$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos              7.4.1708            9f266d35e02c        21 months ago       197MB

 

在容器内安装Python3

进入容器内部

为了在容器内部安装Python3,我们首先需要运行容器:

$ docker run -itd centos:7.4.17085fec2f8eaf3b1d000548c5ddb8c259e21fe03ac9e086fcf7f9b1e1945f2bbcf0$ docker exec -it 5fec2f8eaf3b1d000548c5d /bin/bash[root@5fec2f8eaf3b /]#

📚提示:

docker run -itd centos:7.4.1708 命令将启动一个容器。这条命令会回显出启动容器的id(即上面的5fec2f8eaf3b1d000548c5ddb8c259e21fe03ac9e086fcf7f9b1e1945f2bbcf0)。

docker exec -it 5fec2f8eaf3b1d000548c5d /bin/bash 命令会进入到容器内部。容器id只需要从开头写出一部分即可,不需要全部写全。

看到 命令提示符变为[root@28bfc117484b /]# 后,我们就进入到了容器内部中。可以使用hostname命令测试验证一下是不是在容器内部:

[root@5fec2f8eaf3b /]# hostname5fec2f8eaf3b

主机名变成了容器id开头的部分子字符串。说明我们已经处于容器中了。接下来的流程就好比在一台CentOS7服务器上安装Python3一样简单。

 

安装必要的工具

我们下载的镜像是一个纯净的CentOS,很多基础的工具需要我们手动安装。

首先需要更新下yum:

yum update -y

接下来安装我们需要的工具:

yum install -y zlib-devel
yum install -y bzip2-devel
yum install -y openssl-devel
yum install -y ncurses-devel
yum install -y sqlite-devel
yum install -y readline-devel
yum install -y tk-devel
yum install -y libffi-devel
yum install -y wget
yum install -y gcc
yum install -y make

 

安装Python

我在这里演示使用的是python3.9.0,大家根据自己的需求安装对应的版本。

首先创建安装路径:

mkdir -p /usr/local/python/python3

进入到/usr/local目录中,下载python源码。

cd /usr/localwget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz

下载成功后解压:

tar -zxvf Python-3.9.0.tgz

进入到解压后的目录,编译安装环境,安装Python。

cd Python-3.9.0/./configure --prefix=/usr/local/python/python3make && make install

创建软链接

ln -s /usr/local/python/python3/bin/python3.9 /usr/bin/python3ln -s /usr/local/python/python3/bin/pip3 /usr/bin/pip3

升级pip3

pip3 install --upgrade pip

 

验证

[root@5fec2f8eaf3b bin]# pip3 --versionpip 20.3.1 from /usr/local/python/python3/lib/python3.9/site-packages/pip (python 3.9)[root@5fec2f8eaf3b bin]# python3 --versionPython 3.9.0

 

制作镜像

安装好Python以及所需的工具包后,我们可以把当前的容器制作成自己的镜像。我们在容器外部执行docker commit来制作镜像。我们将新的镜像命名为python3,标签定为3.9.0,表示该镜像安装的python版本是3.9.0。

$ docker commit 5fec2f8eaf3b python3:3.9.0sha256:fffdd8a20d2be7bb4c06130b41c000bdd1fc3cffb3f757c2ebd329d982bc2f95

📚提示:docker commit <container_id> <image_name>:<tag> 用来将正在运行的容器制作成镜像。镜像名字和标签可以按照自己的需求定义。

通过docker images命令,可以看到刚刚制作的镜像:

$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEpython3             3.9.0               fffdd8a20d2b        4 minutes ago       1.02GBcentos              7.4.1708            9f266d35e02c        21 months ago       197MB

至此,镜像的制作就基本完成了。

 

常见问题

1. 为什么不将python3命令配置成python

在CentOS服务器上,我们可以在 ~/.bash_profile中配置别名的方式将python3命令简化成python。但是通过配置别名的方式无法在容器内部良好的实现。因为服务器或安装CentOS镜像的虚拟机(注意虚拟机镜像不是Docker镜像)带有完整的操作系统,在操作系统启动的过程中,会执行 boot 的所有初始化操作。但 Docker 则不是, Docker 只运行我们设置需要启动运行的脚本,否则不会自己运行。因此每次使用/bin/bash进程进入container内部,不会自动的加载环境变量文件,也就无法使别名生效。除非docker容器自动后,手动source ~/.bash_profile,但这样无疑增加了使用复杂度,没有意义。

但并非无法使用python命令直接调用python3。我们可以在/usr/bin目录下将python3重命名为python即可。但是这个操作并不推荐大家使用,首先会覆盖原有的python文件(原有的python文件是python2版本)。不过这个问题倒容易解决,我们只需要在重命名前备份即可。其次,系统中的一些工具代码依赖python2,如果我们强行将python3重命名为python,会导致一些工具无法使用(比如yum)。以yum为例,解决这个问题需要在/usr/bin/yum文件中把第一行注释修改为 #!/usr/bin/python2 就可以规避。

2. 将镜像打包

镜像制作完成后,可以使用docker save命令将镜像打包为tar文件。

$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEpython3             3.9.0               fffdd8a20d2b        28 minutes ago      1.02GBcentos              7.4.1708            9f266d35e02c        21 months ago       197MB$ docker save -o python3.9.0_image.tar python3:3.9.0$ lltotal 1026592drwxr-xr-x 3 root root       4096 Dec 10 06:33 ./drwxr-xr-x 9 root root       4096 Dec 10 05:46 ../-rw------- 1 root root 1049639424 Dec 10 06:33 python3.9.0_image.tar

上面的操作将我们制作的python3:3.9.0镜像打包为python3.9.0_image.tar文件。

转载地址:http://mcsoi.baihongyu.com/

你可能感兴趣的文章
Visual Studio2005下配置及运行NUnit
查看>>
.Net Remoting配置文件的用法
查看>>
Tomcat性能调整优化
查看>>
利用SQL Server 2005减轻生产服务器优化负荷
查看>>
优化MYSQL服务器
查看>>
Exchange磁盘性能优化
查看>>
Apusic应用服务器的性能调节_JVM优化
查看>>
Apache重负荷服务器应如何优化?
查看>>
Windows NT/2000服务器优化
查看>>
Windows 2003系统优化技巧
查看>>
Linux NFS服务器性能优化
查看>>
FREEBSD升级及优化全攻略
查看>>
RISC架构服务器开源运动将促使市场需求提升
查看>>
IT治理的成功要诀
查看>>
中化CIO彭劲松:IT治理让我明明白白做事
查看>>
中国惠普公司企业计算及专业服务集团卫东:IT治理最重要就是保证技术与业务有效结合
查看>>
【MVP】 Wenzhong Huang 北大硕士,微软MVP,微软嵌入式讲师,MCSE
查看>>
解析ERP部署的三角模型
查看>>
百感交集:一个IT人应该如何面对失业?
查看>>
服装经营中关于直销、加盟、代理和联营的区别
查看>>