1.Docker安装和基本命令
Docker安装和基本命令,请看链接中的文章。
2. 能解决的问题
- 解决了由于python版本升级导致yum及相关命令无效问题
- 解决了docker中的linux镜像默认不支持中文的问题
- 修改时区为东八区
- 安装基本的组件,比如定时任务等
- 解决了在纯净linux镜像下安装python3提示的各种组件缺失而无法安装的问题
3. 编写DockerFile
##############################################
# 基于centos7构建python3运行环境
# 构建命令: 在Dockerfile文件目录下执行 docker build -t python-centos:3.5 .
# 容器启动命令: docker run -itd --name python --restart always --privileged=true -v /root/dockers/python:/root/python -v /root/dockers/python/cron:/var/spool/cron python-centos:3.5 /usr/sbin/init
# 进入容器:docker exec -it python /bin/bash
##############################################
FROM centos:7.6.1810
MAINTAINER TheBigBlue # 指定作者信息
RUN set -ex \
# 预安装所需组件
&& yum install -y wget tar libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make initscripts \
&& wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz \
&& tar -zxvf Python-3.5.0.tgz \
&& cd Python-3.5.0 \
&& ./configure prefix=/usr/local/python3 \
&& make \
&& make install \
&& make clean \
&& rm -rf /Python-3.5.0* \
&& yum install -y epel-release \
&& yum install -y python-pip
# 设置默认为python3
RUN set -ex \
# 备份旧版本python
&& mv /usr/bin/python /usr/bin/python27 \
&& mv /usr/bin/pip /usr/bin/pip-python27 \
# 配置默认为python3
&& ln -s /usr/local/python3/bin/python3.5 /usr/bin/python \
&& ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
# 修复因修改python版本导致yum失效问题
RUN set -ex \
&& sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/bin/yum \
&& sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/libexec/urlgrabber-ext-down \
&& yum install -y deltarpm
# 基础环境配置
RUN set -ex \
# 修改系统时区为东八区
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& yum install -y vim \
# 安装定时任务组件
&& yum -y install cronie
# 支持中文
RUN yum install kde-l10n-Chinese -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 更新pip版本
RUN pip install --upgrade pip
ENV LC_ALL zh_CN.UTF-8
4. 使用方法
- dockerfile构建命令: 这个dockerfile文件必须叫做Dockerfile,然后在目录下执行 docker build -t centos7-python3.5 . (最后这个点是从当前目录寻找Dockerfile文件,-t 是镜像名称)
- 容器启动命令: docker run -itd --name python --restart always --privileged=true -v /root/dockers/python:/root/python -v /root/dockers/python/cron:/var/spool/cron python-centos:3.5 /usr/sbin/init
- 进入容器命令为docker exec -it python /bin/bash
- 大家可以复制dockerfile的代码直接使用
5. 问题
-
构建时报错:unable to evaluate symlinks in Dockerfile path: lstat /root/docker/Dockerfile: no such file or directory,这是因为dockerfile文件必须叫做Dockerfile,不叫做这个就会报这个错,解决方式是改为Dockerfile,第二种是加 -f 参数指定dockerfile,docker build -t centos7-python3.5 -f /root/docker/centos-python-3.5
-
如果上面的wget非常慢,可以手动先下载下来tar包(自己下肯定很快),然后修改命令,将tar包添加到镜像中,就可以免去上面配置的wget了。这样会非常非常快,修改如下,其实就增加了一个ADD,然后把wget和解压去掉了,因为ADD命令会自动解压tar包:
FROM centos:7.6.1810
MAINTAINER TheBigBlue # 指定作者信息
#添加文件到镜像
ADD Python-3.6.1.tgz /root/
#安装
RUN set -ex \
# 预安装所需组件
&& yum install -y wget tar libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make initscripts \
&& cd /root/Python-3.6.1 \
&& ./configure prefix=/usr/local/python3 \
&& make \
&& make install \
&& make clean \
&& rm -rf /root/Python-3.6.1* \
&& yum install -y epel-release \
&& yum install -y python-pip
# 设置默认为python3
RUN set -ex \
# 备份旧版本python
&& mv /usr/bin/python /usr/bin/python27 \
&& mv /usr/bin/pip /usr/bin/pip-python27 \
# 配置默认为python3
&& ln -s /usr/local/python3/bin/python3.6 /usr/bin/python \
&& ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
# 修复因修改python版本导致yum失效问题
RUN set -ex \
&& sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/bin/yum \
&& sed -i "s#/usr/bin/python#/usr/bin/python27#" /usr/libexec/urlgrabber-ext-down \
&& yum install -y deltarpm
# 基础环境配置
RUN set -ex \
# 修改系统时区为东八区
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& yum install -y vim \
# 安装定时任务组件
&& yum -y install cronie
# 支持中文
RUN yum install kde-l10n-Chinese -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 更新pip版本
RUN pip install --upgrade pip
ENV LC_ALL zh_CN.UTF-8
6. 手动安装
- 如果想手动安装,则pull拉取一个纯净的centos7,启动容器,进入容器
- 在容器中开始按照上面dockerFile中的指令安装。参考:Python – Linux下安装Python3环境