好物优选点击查看详情 京东购买

暂无内容

Dockerfile制作ubuntu:20.04镜像并配置python3.9的环境以及基于python镜像构建环境

Dockerfile 拉取ubuntu:20.04镜像并配置python3.9的环境

1.构建镜像
requirements.txt里是Python要安装的包,文件和Dockerfile放在同一个目录。
代码结构
在这里插入图片描述

2.一次性构建

FROM ubuntu:20.04 ENV <span class="token assign-left variable">DEBIAN_FRONTEND</span><span class="token operator">=</span>noninteractive ENV <span class="token environment constant">LANG</span> C.UTF-8 RUN <span class="token function">sed</span> -i <span class="token string">'s@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g'</span> /etc/apt/sources.list RUN <span class="token function">apt-get</span> update -qq RUN <span class="token function">mkdir</span> -p /gemdale WORKDIR /gemdale COPY TBQA/requirements.txt requirements.txt ADD TBQA /gemdale RUN <span class="token function">cp</span> /gemdale/app.py /gemdale/scripts RUN <span class="token function">apt-get</span> clean <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> update <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y libmysqlclient-dev tzdata <span class="token punctuation">\</span> python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3<span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> clean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> autoclean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/pip3 /usr/bin/pip <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/python3 /usr/bin/python <span class="token punctuation">\</span> <span class="token operator">&&</span> pip <span class="token function">install</span> -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple RUN <span class="token function">apt-get</span> update -q <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y <span class="token function">wget</span> <span class="token function">curl</span> <span class="token function">vim</span> CMD <span class="token function">bash</span> -c <span class="token string">'sh /gemdale/scripts/build.sh;sh /gemdale/scripts/run_sync.sh'</span>
FROM ubuntu:20.04 ENV <span class="token assign-left variable">DEBIAN_FRONTEND</span><span class="token operator">=</span>noninteractive ENV <span class="token environment constant">LANG</span> C.UTF-8 RUN <span class="token function">sed</span> -i <span class="token string">'s@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g'</span> /etc/apt/sources.list RUN <span class="token function">apt-get</span> update -qq RUN <span class="token function">mkdir</span> -p /gemdale WORKDIR /gemdale COPY TBQA/requirements.txt requirements.txt ADD TBQA /gemdale RUN <span class="token function">cp</span> /gemdale/app.py /gemdale/scripts RUN <span class="token function">apt-get</span> clean <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> update <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y libmysqlclient-dev tzdata <span class="token punctuation">\</span> python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3<span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> clean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> autoclean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/pip3 /usr/bin/pip <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/python3 /usr/bin/python <span class="token punctuation">\</span> <span class="token operator">&&</span> pip <span class="token function">install</span> -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple RUN <span class="token function">apt-get</span> update -q <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y <span class="token function">wget</span> <span class="token function">curl</span> <span class="token function">vim</span> CMD <span class="token function">bash</span> -c <span class="token string">'sh /gemdale/scripts/build.sh;sh /gemdale/scripts/run_sync.sh'</span> 
FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive ENV LANG C.UTF-8 RUN sed -i 's@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g' /etc/apt/sources.list RUN apt-get update -qq RUN mkdir -p /gemdale WORKDIR /gemdale COPY TBQA/requirements.txt requirements.txt ADD TBQA /gemdale RUN cp /gemdale/app.py /gemdale/scripts RUN apt-get clean && \ apt-get update && \ apt-get install -y libmysqlclient-dev tzdata \ python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3\ && apt-get clean \ && apt-get autoclean \ && ln -sf /usr/bin/pip3 /usr/bin/pip && ln -sf /usr/bin/python3 /usr/bin/python \ && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple RUN apt-get update -q \ && apt-get install -y wget curl vim CMD bash -c 'sh /gemdale/scripts/build.sh;sh /gemdale/scripts/run_sync.sh'

3.分开构建,先做个基础镜像,这样不用每次全部构建,很耽误时间

FROM ubuntu:20.04 ENV <span class="token assign-left variable">DEBIAN_FRONTEND</span><span class="token operator">=</span>noninteractive ENV <span class="token environment constant">LANG</span> C.UTF-8 RUN <span class="token function">sed</span> -i <span class="token string">'s@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g'</span> /etc/apt/sources.list RUN <span class="token function">apt-get</span> update -qq COPY TBQA/requirements.txt requirements.txt RUN <span class="token function">apt-get</span> clean <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> update <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y libmysqlclient-dev tzdata <span class="token punctuation">\</span> python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3<span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> clean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> autoclean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/pip3 /usr/bin/pip <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/python3 /usr/bin/python <span class="token punctuation">\</span> <span class="token operator">&&</span> pip <span class="token function">install</span> -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple RUN <span class="token function">apt-get</span> update -q <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y <span class="token function">wget</span> <span class="token function">curl</span> <span class="token function">vim</span>
FROM ubuntu:20.04 ENV <span class="token assign-left variable">DEBIAN_FRONTEND</span><span class="token operator">=</span>noninteractive ENV <span class="token environment constant">LANG</span> C.UTF-8 RUN <span class="token function">sed</span> -i <span class="token string">'s@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g'</span> /etc/apt/sources.list RUN <span class="token function">apt-get</span> update -qq COPY TBQA/requirements.txt requirements.txt RUN <span class="token function">apt-get</span> clean <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> update <span class="token operator">&&</span> <span class="token punctuation">\</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y libmysqlclient-dev tzdata <span class="token punctuation">\</span> python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3<span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> clean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> autoclean <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/pip3 /usr/bin/pip <span class="token operator">&&</span> <span class="token function">ln</span> -sf /usr/bin/python3 /usr/bin/python <span class="token punctuation">\</span> <span class="token operator">&&</span> pip <span class="token function">install</span> -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple RUN <span class="token function">apt-get</span> update -q <span class="token punctuation">\</span> <span class="token operator">&&</span> <span class="token function">apt-get</span> <span class="token function">install</span> -y <span class="token function">wget</span> <span class="token function">curl</span> <span class="token function">vim</span> 
FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive ENV LANG C.UTF-8 RUN sed -i 's@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g' /etc/apt/sources.list RUN apt-get update -qq COPY TBQA/requirements.txt requirements.txt RUN apt-get clean && \ apt-get update && \ apt-get install -y libmysqlclient-dev tzdata \ python3 python3-dev python3-pip libpcre3 libpcre3-dev uwsgi-plugin-python3\ && apt-get clean \ && apt-get autoclean \ && ln -sf /usr/bin/pip3 /usr/bin/pip && ln -sf /usr/bin/python3 /usr/bin/python \ && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple RUN apt-get update -q \ && apt-get install -y wget curl vim

4.流水线里面运用基础镜像增量构建

FROM gem-acr-p-a01-registry.cn-shenzhen.cr.aliyuncs.com/devops/ubuntu20-python3.9:v0.1 ENV <span class="token assign-left variable">DEBIAN_FRONTEND</span><span class="token operator">=</span>noninteractive ENV <span class="token environment constant">LANG</span> C.UTF-8 RUN <span class="token function">ln</span> -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN <span class="token builtin class-name">echo</span> <span class="token string">'Asia/Shanghai'</span> <span class="token operator">></span>/etc/timezone RUN <span class="token function">mkdir</span> -p /gemdale WORKDIR /gemdale COPY TBQA/requirements.txt requirements.txt ADD TBQA /gemdale RUN <span class="token function">cp</span> /gemdale/app.py /gemdale/scripts RUN pip <span class="token function">install</span> -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple CMD <span class="token function">bash</span> -c <span class="token string">'sh /gemdale/scripts/build.sh;sh /gemdale/scripts/run_sync.sh'</span>
FROM gem-acr-p-a01-registry.cn-shenzhen.cr.aliyuncs.com/devops/ubuntu20-python3.9:v0.1 ENV <span class="token assign-left variable">DEBIAN_FRONTEND</span><span class="token operator">=</span>noninteractive ENV <span class="token environment constant">LANG</span> C.UTF-8   RUN <span class="token function">ln</span> -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN <span class="token builtin class-name">echo</span> <span class="token string">'Asia/Shanghai'</span> <span class="token operator">></span>/etc/timezone RUN <span class="token function">mkdir</span> -p /gemdale WORKDIR /gemdale COPY TBQA/requirements.txt requirements.txt ADD TBQA /gemdale RUN <span class="token function">cp</span> /gemdale/app.py /gemdale/scripts RUN pip <span class="token function">install</span> -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple CMD <span class="token function">bash</span> -c <span class="token string">'sh /gemdale/scripts/build.sh;sh /gemdale/scripts/run_sync.sh'</span> 
FROM gem-acr-p-a01-registry.cn-shenzhen.cr.aliyuncs.com/devops/ubuntu20-python3.9:v0.1 ENV DEBIAN_FRONTEND=noninteractive ENV LANG C.UTF-8 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone RUN mkdir -p /gemdale WORKDIR /gemdale COPY TBQA/requirements.txt requirements.txt ADD TBQA /gemdale RUN cp /gemdale/app.py /gemdale/scripts RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple CMD bash -c 'sh /gemdale/scripts/build.sh;sh /gemdale/scripts/run_sync.sh'

5.云效流水线发布
在这里插入图片描述
在这里插入图片描述
docker 镜像启动环境变量生效
将 source /etc/profile 命令写入 ~/.bashrc中

vim ~/.bashrc RUN echo source /etc/profile >> ~/.bashrc
 vim ~/.bashrc RUN echo source /etc/profile >> ~/.bashrc 
vim ~/.bashrc RUN echo source /etc/profile >> ~/.bashrc

这样自己制作比较麻烦,还有更简单的就是去到docker官网获取python3.9版本的基础镜像构建
Dockerfile

FROM python:3.9.10-buster ENV <span class="token assign-left variable"><span class="token environment constant">LANG</span></span><span class="token operator">=</span>C.UTF-8 RUN <span class="token function">ln</span> -snf /usr/share/zoneinfo/PRC /etc/localtime RUN <span class="token function">mkdir</span> /root/.pip/ COPY pip.conf /root/.pip/ RUN <span class="token function">chmod</span> 0644 /root/.pip/pip.conf RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">Flask</span><span class="token operator">==</span><span class="token number">1.1</span>.2 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">joblib</span><span class="token operator">==</span><span class="token number">1.1</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">onnxruntime</span><span class="token operator">==</span><span class="token number">1.10</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">psutil</span><span class="token operator">==</span><span class="token number">5.8</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">requests</span><span class="token operator">==</span><span class="token number">2.26</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">torch</span><span class="token operator">==</span><span class="token number">1.10</span>.1 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">transformers</span><span class="token operator">==</span><span class="token number">4.15</span>.0 RUN pip3 <span class="token function">install</span> scikit-learn<span class="token operator">==</span><span class="token number">0.24</span>.2
        FROM python:3.9.10-buster  ENV <span class="token assign-left variable"><span class="token environment constant">LANG</span></span><span class="token operator">=</span>C.UTF-8  RUN <span class="token function">ln</span> -snf /usr/share/zoneinfo/PRC /etc/localtime  RUN <span class="token function">mkdir</span> /root/.pip/ COPY pip.conf /root/.pip/ RUN <span class="token function">chmod</span> 0644 /root/.pip/pip.conf  RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">Flask</span><span class="token operator">==</span><span class="token number">1.1</span>.2 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">joblib</span><span class="token operator">==</span><span class="token number">1.1</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">onnxruntime</span><span class="token operator">==</span><span class="token number">1.10</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">psutil</span><span class="token operator">==</span><span class="token number">5.8</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">requests</span><span class="token operator">==</span><span class="token number">2.26</span>.0 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">torch</span><span class="token operator">==</span><span class="token number">1.10</span>.1 RUN pip3 <span class="token function">install</span> <span class="token assign-left variable">transformers</span><span class="token operator">==</span><span class="token number">4.15</span>.0 RUN pip3 <span class="token function">install</span> scikit-learn<span class="token operator">==</span><span class="token number">0.24</span>.2 
FROM python:3.9.10-buster ENV LANG=C.UTF-8 RUN ln -snf /usr/share/zoneinfo/PRC /etc/localtime RUN mkdir /root/.pip/ COPY pip.conf /root/.pip/ RUN chmod 0644 /root/.pip/pip.conf RUN pip3 install Flask==1.1.2 RUN pip3 install joblib==1.1.0 RUN pip3 install onnxruntime==1.10.0 RUN pip3 install psutil==5.8.0 RUN pip3 install requests==2.26.0 RUN pip3 install torch==1.10.1 RUN pip3 install transformers==4.15.0 RUN pip3 install scikit-learn==0.24.2

pip.conf

<span class="token punctuation">[</span>global<span class="token punctuation">]</span> index-url <span class="token operator">=</span> https://mirrors.aliyun.com/pypi/simple/ <span class="token punctuation">[</span>install<span class="token punctuation">]</span> trusted-host<span class="token operator">=</span>mirrors.aliyun.com
<span class="token punctuation">[</span>global<span class="token punctuation">]</span> index-url <span class="token operator">=</span> https://mirrors.aliyun.com/pypi/simple/ <span class="token punctuation">[</span>install<span class="token punctuation">]</span> trusted-host<span class="token operator">=</span>mirrors.aliyun.com 
[global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com

7.云效发布docker容器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部署脚本

<span class="token shebang important">#!/bin/bash</span> <span class="token keyword">if</span> <span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token variable"><span class="token variable">`</span><span class="token function">docker</span> inspect -f <span class="token string">'{<!-- -->{ .Name }}'</span> $<span class="token punctuation">{<!-- --></span>appname<span class="token punctuation">}</span><span class="token variable">`</span></span> <span class="token operator">==</span> <span class="token string">"/<span class="token variable">${appname}</span>"</span> <span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token builtin class-name">echo</span> <span class="token string">"停止<span class="token variable">${appname}</span>"</span> <span class="token function">docker</span> stop <span class="token variable">${appname}</span> <span class="token operator">&&</span> <span class="token function">docker</span> <span class="token function">rm</span> <span class="token variable">${appname}</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">${appname}</span>服务未启动"</span> <span class="token keyword">fi</span> <span class="token function">docker</span> run -d --name<span class="token operator">=</span><span class="token variable">${appname}</span> --restart<span class="token operator">=</span>always --network<span class="token operator">=</span>host -p <span class="token variable">${hostport}</span><span class="token builtin class-name">:</span><span class="token variable">${containerport}</span> -v /gemdale/logs:/gemdale/logs <span class="token variable">${IMAGE}</span>
<span class="token shebang important">#!/bin/bash</span> <span class="token keyword">if</span> <span class="token punctuation">[</span><span class="token punctuation">[</span> <span class="token variable"><span class="token variable">`</span><span class="token function">docker</span> inspect -f <span class="token string">'{<!-- -->{ .Name }}'</span> $<span class="token punctuation">{<!-- --></span>appname<span class="token punctuation">}</span><span class="token variable">`</span></span> <span class="token operator">==</span> <span class="token string">"/<span class="token variable">${appname}</span>"</span> <span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token builtin class-name">echo</span> <span class="token string">"停止<span class="token variable">${appname}</span>"</span> <span class="token function">docker</span> stop <span class="token variable">${appname}</span> <span class="token operator">&&</span> <span class="token function">docker</span> <span class="token function">rm</span> <span class="token variable">${appname}</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">${appname}</span>服务未启动"</span> <span class="token keyword">fi</span> <span class="token function">docker</span> run -d --name<span class="token operator">=</span><span class="token variable">${appname}</span> --restart<span class="token operator">=</span>always --network<span class="token operator">=</span>host -p <span class="token variable">${hostport}</span><span class="token builtin class-name">:</span><span class="token variable">${containerport}</span> -v /gemdale/logs:/gemdale/logs <span class="token variable">${IMAGE}</span> 
#!/bin/bash if [[ `docker inspect -f '{{ .Name }}' ${appname}` == "/${appname}" ]]; then echo "停止${appname}" docker stop ${appname} && docker rm ${appname}; else echo "${appname}服务未启动" fi docker run -d --name=${appname} --restart=always --network=host -p ${hostport}:${containerport} -v /gemdale/logs:/gemdale/logs ${IMAGE}

IMAGE
gem-acr-p-a01-registry.cn-shenzhen.cr.aliyuncs.com/osale/osale-prediction-service:prod-2023-03-31-17-43-27

这个是镜像地址由自己定义的osale(空间)osale-prediction-service(仓库)prod-2023-03-31-17-43-27(标签)构成,如果定义了,这些变量缺一不可
M A V E N P R O F I L E − {MAVEN_PROFILE}- MAVENPROFILE{DATETIME}等于prod-2023-03-31-17-43-27

docker启动容器之后马上又自动关闭解决办法
问题描述:
centos 启动一个容器添加了-d 参数,但是docker ps 或者docker ps -a查看却已经退出了
退出原因
1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出
2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
3、这个是 docker 的机制问题
解决代码
CMD bash -c ‘pm2 start ecosystem.config.js –env test;tail -f /dev/null’

原文链接:https://blog.csdn.net/jialiu111111/article/details/129797638

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享