Dockerfile是一个用来构建镜像的文本文件,这个文件中包含了一条条构建镜像所需的指令和说明。通常我们是在服务器中使用docker pull下来镜像之后直接run启动容器,但这种启动方式不利于容器维护,之后其它的人需要删除容器重新启动或者要新启一个镜像时就会带来很多麻烦。这时维护好Dockerfile的作用就体现出来了。本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
Dockerfile文件维护好后,我们只需要一个命令就可以用来复制镜像,如下我们使用Dockerfile来构建fastapi服务端的镜像。如下是我们编写的一个Dockerfile文件以及requirements.txt的内容。本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
root@test: /test/ cat Dockerfile FROM tiangolo/uvicorn-gunicorn-fastapi:latest RUN /usr/local/bin/python -m pip install --upgrade pip RUN echo '构建镜像' COPY requirements.txt requirements.txt RUN pip install -r requirements.txt RUN echo '---finished----' root@test: /test/ cat requirements.txt requests==2.24.0 uvicorn==0.13.4 fastapi==0.63.0 wincertstore==0.2 DBUtils==1.3 aiofiles==0.6.0 certifi==2020.12.5 click==7.1.2 python-multipart==0.0.5 pytz==2021.1 colorama==0.4.4 h11==0.12.0 loguru==0.5.3 numpy==1.20.1 pandas==1.2.3 pydantic==1.8.1 PyMySQL==1.0.2 python-dateutil==2.8.1 python-dotenv==0.15.0 six==1.15.0 starlette==0.13.6 typing-extensions==3.7.4.3 urllib3=1.21.1 root@mail:/opt/files# docker build -t server:V1.0 . Step 1/5 : FROM tiangolo/uvicorn-gunicorn-fastapi:latest ---> 112a52d17c47 Step 2/5 : RUN echo '构建镜像' ---> Running in aca6950ecdbf ...... Successfully built 3e93ea7ba128 Successfully tagged server:V1.0本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
Dockerfile中的FROM 和 RUN 指令
FROM:定制的镜像都是基于FROM的镜像,这里的tiangolo/uvicorn-gunicorn-fastapi就是定制需要的基础镜像。后续的操作都是基于此镜像。
RUN:用于执行后面跟着的命令行命令。可以使用shell 格式:RUN <命令行命令>,也可以使用exec 格式:RUN ["可执行文件", "参数1", "参数2"]
FROM就相当于执行了docker pull命令拉取镜像,RUN就相当于启动了镜像然后在里面执行shell命令。本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
其基础镜像的pip版本较低,在Dockerfile中可直接update,另外如果没有COPY requirements.txt requirements.txt这个步骤,执行镜像build时就会报错:ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'如下:本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
---> 05cb36494ed3 Step 3/7 : RUN pip install -r requirements.txt ---> Running in 808d69540f72 ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt' WARNING: You are using pip version 20.0.2; however, version 21.1.1 is available. You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command. The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
COPY文件的默认目标路径是容器中默认工作目录:即/app/目录,可以通过WORKDIR指定。最后Dockerfile的指令每执行一次都会在 docker 上新建一层。如果太多过多无意义的层,会造成镜像里垃圾过多,镜像文件过大,建议将命令合在一起,比如上面的python模块的安装就使用的requirements.txt一次性全部安装,而不是使用pip install一次安装一个。对于其它的shell。建议使用&&将命令相连,使用一个RUN运行完成。镜像创建好后即可通过run命令完成。
docker run --name server-test server:V1.0本文地址:http://www.04007.cn/article/997.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/997.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |