利用 Dockerfile 创建镜像

参考:

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

解决办法: 链接(https://blog.csdn.net/qq_43616898/article/details/104174923?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

镜像下载慢问题:
  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
 


版权声明:本文为qq_29543997原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。