华为OpenEuler体验系列(30)--Python应用docker镜像制作

14 篇文章 0 订阅
3 篇文章 0 订阅

一、下载openEuler的基础Docker镜像:

官网地址

二、导入镜像到docker中:

docker load -i openEuler-docker.x86_64.tar.xz
docker tag openeuler-22.03-lts-sp3:latest openeuler:22.03.lts.sp3

三、制作Python开发和运行Docker镜像

  1. 介绍:Python采用的是Python3.12.1,不需要libressl,直接安装openssl-devel即可
  2. dockerfile文件如下:
# open_euler_python3121.dockerfile
# Version 1.0.0
# build cmd: docker build --target dev_image -t open-euler-py-dev:22.03.3121 -f dockerfiles/open_euler_python3121.dockerfile .
# build cmd: docker build -t open-euler-py:22.03.3121 -f dockerfiles/open_euler_python3121.dockerfile .

ARG openEulerVer=22.03.lts.sp3
FROM openeuler:${openEulerVer} as dev_image
LABEL MAINTAINER="zhongmb@139.com"

ARG openEulerVer=22.03.lts.sp3
ARG pyVer=3.12.1

# COPY ./Python-${pyVer}.tgz ./

RUN yum -y groupinstall "Development tools" && \
    yum -y install zlib zlib-devel bzip2-devel     && \
    yum -y install ncurses-devel sqlite-devel readline-devel   && \
    yum -y install tk-devel gdbm-devel wget  xz-devel && \
    yum -y install gcc kernel-devel make bzip2 libffi libffi-devel  && \
    yum -y install expat-devel e2fsprogs-devel libuuid-devel tcl && \
    yum -y install gdbm-devel tcl-devel tk-devel uuid-devel && \
    yum -y install libnsl2-devel openssl-devel
        
RUN export py_ver=${pyVer} && \
    wget https://mirrors.huaweicloud.com/python/${py_ver}/Python-${py_ver}.tgz && \
    tar xzvf Python-$py_ver.tgz && \
    rm -f Python-$py_ver.tgz && \
    cd Python-$py_ver && \
    ./configure --prefix=/usr/local/python$py_ver --enable-optimizations CFLAGS=-fPIC  --enable-shared && \
    make -j4 && \
    make install && \
    ln -s /usr/local/python$py_ver/bin/python${py_ver%.*} /usr/bin/python$py_ver && \
    ln -s /usr/local/python$py_ver/bin/python${py_ver%.*} /usr/bin/python${py_ver//.} && \
    ln -s /usr/local/python$py_ver/bin/pip${py_ver%.*} /usr/bin/pip$py_ver && \
    ln -s /usr/local/python$py_ver/bin/pip${py_ver%.*} /usr/bin/pip${py_ver//.} && \
    ln -s /usr/local/python$py_ver/bin/python${py_ver%.*} /usr/local/bin/python3 && \
    ln -s /usr/local/python$py_ver/bin/pip${py_ver%.*} /usr/local/bin/pip3 && \
    echo /usr/local/python$py_ver/lib > /etc/ld.so.conf.d/python-$py_ver.conf  && \
    ldconfig -v && \
    cd .. && rm -fr Python-$py_ver
    
RUN export py_ver=${pyVer} && \
    /usr/bin/python$py_ver -m pip install --upgrade --index-url=https://mirrors.huaweicloud.com/repository/pypi/simple --trusted-host=mirrors.huaweicloud.com pip && \
    /usr/bin/pip$py_ver install --upgrade --index-url=https://mirrors.huaweicloud.com/repository/pypi/simple --trusted-host=mirrors.huaweicloud.com setuptools
    
RUN yum clean all && rm -fr /tmp/* && rm -fr /var/tmp/* && rm -fr /var/cache/*


ARG openEulerVer=22.03.lts.sp3
FROM openeuler:${openEulerVer} as runtime_image
LABEL MAINTAINER="zhongmb@139.com"

ARG openEulerVer=22.03.lts.sp3
ARG pyVer=3.12.1

ENV py_ver=${pyVer}
COPY --from=dev_image /usr/local/python$py_ver /usr/local/python$py_ver

RUN mkdir -p /root/.pip && \
    echo '[global]' >> /root/.pip/pip.conf && \
    echo 'index-url = https://mirrors.huaweicloud.com/repository/pypi/simple' >> /root/.pip/pip.conf && \
    echo 'trusted-host = mirrors.huaweicloud.com' >> /root/.pip/pip.conf && \
    echo 'timeout = 120' >> /root/.pip/pip.conf

RUN export py_ver=${pyVer} && \
    ln -s /usr/local/python$py_ver/bin/python${py_ver%.*} /usr/bin/python$py_ver && \
    ln -s /usr/local/python$py_ver/bin/python${py_ver%.*} /usr/bin/python${py_ver//.} && \
    ln -s /usr/local/python$py_ver/bin/pip${py_ver%.*} /usr/bin/pip$py_ver && \
    ln -s /usr/local/python$py_ver/bin/pip${py_ver%.*} /usr/bin/pip${py_ver//.} && \
    echo /usr/local/python$py_ver/lib > /etc/ld.so.conf.d/python-$py_ver.conf  && \
    ldconfig -v
  1. 运行命令:
docker build --target dev_image -t open-euler-py-dev:22.03.3121 -f dockerfiles/open_euler_python3121.dockerfile .
docker build -t open-euler-py:22.03.3121 -f dockerfiles/open_euler_python3121.dockerfile .

四、制作支持ssh功能的Python运行Docker镜像

  1. dockerfile文件如下:
# open_euler_python_sshd.dockerfile
# Version 1.0.0
# export py_ver=3.12.1
# wget https://www.python.org/ftp/python/${py_ver}/Python-${py_ver}.tgz
# set 
# build cmd: docker build --target build_image -t open-euler-py-sshd-build:22.03.3121 -f dockerfiles/open_euler_python_sshd.dockerfile .
# build cmd: docker build --target runtime_image -t open-euler-py-sshd:22.03.3121 -f dockerfiles/open_euler_python_sshd.dockerfile .
# build cmd: docker build -t open-euler-py-sshd-my:22.03.3121 -f dockerfiles/open_euler_python_sshd.dockerfile .
# docker run --privileged -dit --name py-sshd -p 24222:22 open-euler-py-sshd-my:22.03.3121


ARG baseImageVer=22.03.3121
FROM open-euler-py:${baseImageVer} as build_image
LABEL MAINTAINER="zhongmb@139.com"

ARG baseImageVer=22.03.3121
ARG openEulerVer=22.03.lts.sp3
ARG pyVer=3.12.1

RUN yum -y install sudo && \
    yum -y install passwd  && \
    yum -y install util-linux && \
    yum -y install net-tools && \
    yum -y install openssh-clients openssh-server
    
RUN mkdir -p ~/.ssh && \
    mkdir -p ~/shells
    
COPY ./ssh_host_dsa_key.pub /etc/ssh/ssh_host_dsa_key.pub
COPY ./ssh_host_dsa_key /etc/ssh/ssh_host_dsa_key
COPY ./ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub
COPY ./ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key
COPY ./shells /root/shells

# ssh-keygen -t dsa -b 1024 -f /etc/ssh/ssh_host_dsa_key -N ''
# ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N ''
RUN chmod 600 /etc/ssh/ssh_host_rsa_key &&\
    chmod 644 /etc/ssh/ssh_host_rsa_key.pub &&\
    chmod 600 /etc/ssh/ssh_host_dsa_key &&\
    chmod 644 /etc/ssh/ssh_host_dsa_key.pub &&\
    ssh-keygen -A && \
    cat /etc/ssh/ssh_host_rsa_key.pub >> ~/.ssh/authorized_keys && \
    echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config && \
    mkdir /var/run/sshd

RUN yum clean all && rm -fr /tmp/* && rm -fr /var/tmp/* && rm -fr /var/cache/*
    
# 创建my用户
RUN groupadd  -g 1099 developers && \ 
    useradd -s /bin/bash -u 1098 -g 1099 -d /home/my my  && \
    echo root | passwd --stdin root && \
    echo "my:my"| chpasswd && \
    echo "my        ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers 

COPY ./shells /home/my/shells

RUN mkdir -p /home/my/.ssh && \
    cat /etc/ssh/ssh_host_rsa_key.pub >> /home/my/.ssh/authorized_keys
    
RUN mkdir -p /home/my/.pip && \
    cp /root/.pip/pip.conf /home/my/.pip/ && \
    chown -R my:developers /home/my


ARG baseImageVer=22.03.3121
FROM scratch as runtime_image
LABEL MAINTAINER="zhongmb@139.com"

ARG baseImageVer=22.03.3121
ARG pyVer=3.12.1

ENV py_ver=${pyVer}
COPY --from=build_image / /

ARG baseImageVer=22.03.3121
FROM scratch as my_runtime_image
LABEL MAINTAINER="zhongmb@139.com"

ARG baseImageVer=22.03.3121
ARG pyVer=3.12.1

ENV py_ver=${pyVer}
COPY --from=build_image / /

USER my
expose 22
CMD ["/bin/sh", "/home/my/shells/my_sshd.sh"]
  1. 运行命令:
docker build --target build_image -t open-euler-py-sshd-build:22.03.3121 -f dockerfiles/open_euler_python_sshd.dockerfile .
docker build --target runtime_image -t open-euler-py-sshd:22.03.3121 -f dockerfiles/open_euler_python_sshd.dockerfile .
docker build -t open-euler-py-sshd-my:22.03.3121 -f dockerfiles/open_euler_python_sshd.dockerfile .
docker run --privileged -dit --name py-sshd -p 24222:22 open-euler-py-sshd-my:22.03.3121
  1. my_sshd.sh内容如下:
# my_sshd.sh
/usr/bin/sudo /usr/sbin/sshd
while [ "1" = "1" ]; do echo `date +"%Y-%m-%d %H:%M:%S"`; sleep 120 ;done;
  1. my_wait.sh内容如下:
while [ "1" = "1" ]; do echo `date +"%Y-%m-%d %H:%M:%S"`; sleep 120 ;done;

五、制作Python应用的运行Docker镜像

  1. dockerfile内容如下:
# open_euler_python_sshd_flask.dockerfile

# build cmd: docker build -t myapp-flask01:22.03.3121.01 -f dockerfile/open_euler_python_sshd_flask.dockerfile .
# docker run --privileged -dit --name myapp -v D:\flask_app:/flask_app -p 111234:1234 -p 10022:22 myapp-flask01:22.03.3121.01
# docker run -it myapp-flask01:22.03.3121.01 /bin/bash

ARG baseImageVer=22.03.3121
FROM open-euler-py-dev:${baseImageVer} as dev_image
LABEL MAINTAINER="zhongmb@139.com"

ARG pyVer=3.12.1
ENV py_ver=${pyVer}

COPY ./requirements.txt /root/shells/requirements.txt
RUN /usr/bin/pip$pyVer install  -r /root/shells/requirements.txt


# 生成python
ARG baseImageVer=22.03.3121
FROM open-euler-py-sshd:${baseImageVer} as build_image
LABEL MAINTAINER="zhongmb@139.com"

ARG pyVer=3.12.1
ENV py_ver=${pyVer}
COPY --from=dev_image /usr/local/python$py_ver /usr/local/python$py_ver

RUN export ssl_ver=${sslVer}  && \
    echo /usr/local/ssl/lib > /etc/ld.so.conf.d/libressl-$ssl_ver.conf  && \
    ldconfig -v && \
    export py_ver=${pyVer} && \
    echo /usr/local/python$py_ver/lib > /etc/ld.so.conf.d/python-$py_ver.conf  && \
    ldconfig -v

# 添加应用模板
ENV py_ver=${pyVer}
RUN mkdir -p /flask_app/src  && \
    echo "import time" > /flask_app/src/main_run.py && \ 
    echo "while True:" >> /flask_app/src/main_run.py && \ 
    echo '    print(time.strftime("%Y-%m-%d %H:%M:%S"))' >> /flask_app/src/main_run.py && \ 
    echo '    time.sleep(120)' >> /flask_app/src/main_run.py
RUN echo "cd /flask_app/src" > /flask_app/run_app.sh && \ 
    echo "export py_ver=${pyVer}" >> /flask_app/run_app.sh && \ 
    echo "export PYTHONPATH=$(pwd):$PYTHONPATH" >> /flask_app/run_app.sh && \ 
    echo "/usr/bin/python${py_ver} ./main_run.py --host=0.0.0.0 --port=5000" >> /flask_app/run_app.sh
    

FROM scratch as runtime_image
LABEL MAINTAINER="zhongmb@139.com"

ARG pyVer=3.12.1

ENV py_ver=${pyVer}
COPY --from=build_image / /

expose 5000
expose 22
CMD ["/usr/bin/bash", "/flask_app/run_app.sh"]
  1. 运行命令:
docker build -t myapp-flask01:22.03.3121.01 -f dockerfile/open_euler_python_sshd_flask.dockerfile .
docker run --privileged -dit --name myapp -v D:\flask_app:/flask_app -p 111234:1234 -p 10022:22 myapp-flask01:22.03.3121.01
docker run -it myapp-flask01:22.03.3121.01 /bin/bash
  1. run_app.sh内容如下:
#!/bin/bash
cd /flask_app/src
export PYTHONPATH=$(pwd):$PYTHONPATH
/usr/bin/python3.12.1 ./main_run.py --host=0.0.0.0 --port=1234
  1. main_run.py内容如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from myflask import main_run


if __name__ == "__main__":
    main_run()

六: 整体docker镜像:

REPOSITORY                 TAG              CREATED        SIZE
myapp-flask01              22.03.3121.01    15 hours ago   767MB
open-euler-py-sshd-my      22.03.3121       15 hours ago   591MB
open-euler-py-sshd         22.03.3121       15 hours ago   591MB
open-euler-py-sshd-build   22.03.3121       15 hours ago   679MB
open-euler-py              22.03.3121       15 hours ago   536MB
open-euler-py-dev          22.03.3121       15 hours ago   1.55GB
openeuler                  22.03.lts.sp3    4 weeks ago    189MB
openeuler-22.03-lts-sp3    latest           4 weeks ago    189MB
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengyoufengyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值