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 >> ~/.bashrcvim ~/.bashrc RUN echo source /etc/profile >> ~/.bashrcvim ~/.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>.2FROM 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>.2FROM 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}
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