参考:
https://www.jb51.net/article/151958.htm
https://blog.51cto.com/10316297/2160524
1、创建空目录
cd /home/ldx/
mkdir ldx
cd app/
2、创建Dockerfile文件
touch Dockerfile
3、编写Dockerfile文件命令
## 添加一个基础镜像
FROM python:3.6.4
##维护人的信息
MAINTAINER ldx <XXXXXXX@qq.com>
## 设置工作目录
WORKDIR /app
##将需要的文件(为Dockerfile所在目录的相对路径、文件或目录)复制到容器的指定目录下(/app)
COPY ldx /app
##安装必要的依赖包(此处之坑:安装opencv-python 时必须指定版本号,不然安装会报错)
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install gunicorn -ihttps://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install opencv-python==4.3.0.36 -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& chmod 777 /app/app.py
## 开放端口,供容器外访问(可选写与不写,根据需求)
EXPOSE 80
EXPOSE 3088
EXPOSE 8080
EXPOSE 8066
(## 定义环境变量
ENV LANG C.UTF-8)
## 当启动容器时执行脚本文件运行命令
CMD ["python","app.py"]
4、 编译成镜像
docker build -t ldx .
(启动docker 命令)service docker start
5、利用编译的镜像启动容器
docker run -dit --env LANG=C.UTF-8 --restart always --privileged=True -p 8085:8090 --name=ldx_ceshi 2166eb06f3be
6、利用步骤5中启动的容器,如果是项目服务部署的话,服务会一直启动着,想要修改容器中的代码,并重新
启动服务,进行以下操作
(将restart 参数修改成no)
(1)docker update --restart=no ldx
(2)进入容器修改代码
(3)docker stop ldx
(4) docker restart ldx
(5) docker update --restart=always ldx
7、查看docker 容器的日志
docker logs -f -t --tail 10 ldx (10:日志的后10行内容)
在build镜像时出现一下错误:
error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/3d/3d51361ee1185ee2e0419afd46efade5f4bb187752945df43527786759919e4f/data?verify=1597374010-nSzC0HE84JeXrTgpL1g%2BjHAmzmk%3D: dial tcp 104.18.122.25:443: i/o timeout镜像下载慢问题:
vi /etc/docker/daemon.json
添加以下内容:
{ "registry-mirrors": ["https://hccwwfjl.mirror.aliyuncs.com"] }
重新启动Docker
systemctl restart docker
注释:复制文件夹或者文件到指定目录下,还有另一种方式:ADD 命令
ADD ldx /app
ADD与COPY命令的区别:
也可以是一个URL,还可以是一个tar文件(如果tar文件,全自动解压到路径下)。可以是镜像内的绝
版路径,或者相对于工作目录(WORKDIR)的相对路径)
在Dockerfile文件中安装库的另一种方式:
RUN pipinstall -r softwares.txt
其中的softwares.txt文件中
Flask
Redis
opencv-python
pillow
fastapi
查看版本号:
cuda 版本
cat /usr/local/cuda/version.txt
cudnn 版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
清华镜像:
清华镜像:
https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["/usr/local/bin/gunicorn","-c","gunicorn_conf.py","server:app"]
gunicorn_conf.py
#gunicorn.conf
import multiprocessing
command = '/usr/local/bin/gunicorn'
pythonpath = '/app/'
# 监听内网端口
bind = '0.0.0.0:8090'
# 工作进程数(推荐数量为当前的CPU个数*2 + 1)
#print(multiprocessing.cpu_count())
workers = 2
# 每个工作的线程数
threads = 2
# 超时
timeout = 120
#预加载服务
preload = True
#守护进程
daemon = False
#工作方式
worker_class = 'uvicorn.workers.UvicornWorker'
#代码变更重启服务(开发时使用)
reload = False