奇妙数据

使用Docker构建基于centos7镜像的python3.5环境
2019.3.11修复容器内定时任务crontab组件无法运行的情况将容器的启动命令由/bin/bash改为/us...
扫描右侧二维码阅读全文
11
2019/03

使用Docker构建基于centos7镜像的python3.5环境

2019.3.11修复容器内定时任务crontab组件无法运行的情况

  1. 将容器的启动命令由/bin/bash改为/usr/sbin/init,可解决crontab任务无法运行问题,以及Failed to get D-Bus connection: Operation not permitted报错问题
  2. 新增默认安装service组件,单独安装命令yum install initscripts -y
  3. 进入容器命令为docker exec -it python /bin/bash

使用Docker构建基于centos7镜像的python3.5环境

dockerpython1.jpg

应用场景

  • 由于centos7目前自带的python版本一般为python2.7,直接在linux主机升级到python3又可能产生其他影响,比如yum命令失效
  • 为了不影响linux宿主机环境,所以选择在docker中使用python3环境

Dockerfile构建python3.5环境

经过自己多次尝试,编写了基于centos7镜像搭建python3.5环境的dockerfile文件,解决了如下问题

  1. 解决了由于python版本升级导致yum及相关命令无效问题
  2. 解决了docker中的linux镜像默认不支持中文的问题
  3. 修改时区为东八区
  4. 安装基本的组件,比如定时任务等
  5. 解决了在纯净linux镜像下安装python3提示的各种组件缺失而无法安装的问题

Dcokerfile配置信息(2019.3.11更新)

##############################################
# 基于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 mioshu # 指定作者信息
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-python2.7 \
    # 配置默认为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/python2.7#" /usr/bin/yum \
    && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /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

使用方法

  • dockerfile构建命令: 在Dockerfile文件目录下执行 docker build -t python-centos:3.5 .

docker构建.png

  • 容器启动命令: 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运行.png

  • 进入容器命令为docker exec -it python /bin/bash

docker测试.png

大家可以复制dockerfile的代码直接使用,或者下载下面的dockerfile文件,使用docker生成镜像的命令进行构建

附件下载

Dockerfile搭建基于centos7镜像的python3.5环境.zip

参考资料

最后修改:2019 年 12 月 02 日 11 : 47 PM
如果觉得我的文章对你有用,请随意赞赏

6 条评论

  1. 司徒

    大佬大佬,你这个镜像能分享吗?我今天一整天来来回回按照教程做了3遍,都是最后在docker run的时候出问题了

    docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.

    在群晖里面run的,查了下说docker-machine.exe能解决的,群晖上没这个命令

    1. ash
      @司徒

      群晖docker报错可以参见这个: https://github.com/microsoft/WSL/issues/4189

      1. 奇妙数据
        @ash

        厉害哦,给你点赞

    2. 奇妙数据
      @司徒

      你好,docker镜像的Dockerfile文件在centos 7版本中测试通过,我更新了两张图(见文章),刚刚构建测试的,没有复现你的问题。考虑是否和群晖自带的docker版本有关。

      1. 司徒
        @奇妙数据

        repo到dockerhub好不好呀

        1. 奇妙数据
          @司徒

          没帐号。这可能需要你自己操作上传了。先在其他设备构建成功后上传即可

发表评论