一、下载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镜像
- 介绍:Python采用的是Python3.12.1,不需要libressl,直接安装openssl-devel即可
- 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
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
- 运行命令:
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镜像
- dockerfile文件如下:
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
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/*
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"]
- 运行命令:
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
- my_sshd.sh内容如下:
/usr/bin/sudo /usr/sbin/sshd
while [ "1" = "1" ]; do echo `date +"%Y-%m-%d %H:%M:%S"`; sleep 120 ;done;
- my_wait.sh内容如下:
while [ "1" = "1" ]; do echo `date +"%Y-%m-%d %H:%M:%S"`; sleep 120 ;done;
五、制作Python应用的运行Docker镜像
- dockerfile内容如下:
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
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"]
- 运行命令:
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
- 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
- main_run.py内容如下:
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