Docker 是一个开源的应用容器引擎,可以帮助用户将应用程序及其依赖项打包在一个虚拟容器中,从而让应用程序在各种环境中获得更好的可移植性。在构建 Docker 镜像时,有时候用户需要手动构建新镜像。本文将为你详细讲解手动构建 Docker 新镜像的方法。
准备工作
在执行手动构建 Docker 新镜像的操作之前,需要先准备好以下两个文件:
- Dockerfile:是用于指导 Docker 构建镜像的重要文件。在 Dockerfile 中,用户可以指定 Docker 镜像中需要运行的环境、安装的软件、从外部拷贝文件等等,是 Docker 构建过程中的核心。
- 应用程序打包文件:为了构建 Docker 镜像,需要将打包好的应用程序文件上传到 Docker 构建环境中,从而让 Docker 在构建过程中把这些文件打包到镜像中。一般情况下应用程序文件打包成的是 tar 包或 zip 包。
手动构建 Docker 新镜像的过程
- 准备好 Dockerfile 文件和应用程序打包文件,然后在命令行中进入到 Dockerfile 所在的目录。
- 执行以下命令开始构建 Docker 新镜像:
docker build -t <image_name>:<tag> .
其中,<image_name>
为 Docker 镜像的名称,<tag>
为 Docker 镜像的版本号。.
表示当前目录下的 Dockerfile 文件是构建 Docker 镜像的蓝本。例如:
docker build -t myapp:v1.0 .
表示构建一个名为 myapp
,版本为 v1.0
的 Docker 镜像。
- 稍等片刻,Docker 便会自动从 Dockerfile 中读取指令,逐步生成新的镜像。构建完成后,可以使用以下命令查看 Docker 镜像列表:
docker images
例如:
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp v1.0 65dab982eef2 4 minutes ago 251MB
表示成功构建了名为 myapp
,版本为 v1.0
的 Docker 镜像。
示例
下面,将通过两个示例来演示手动构建 Docker 新镜像的具体操作过程。
示例一:构建 nginx 镜像
- 准备 Dockerfile 文件,内容如下:
# Use an official nginx runtime as a parent image
FROM nginx:latest
# Set the working directory to /usr/share/nginx/html
WORKDIR /usr/share/nginx/html
# Copy the current directory contents into the container at /usr/share/nginx/html
COPY . /usr/share/nginx/html
其中,该 Dockerfile 以官方 nginx 镜像为基础,将当前目录下的所有文件复制到 nginx 的 html 目录中。
- 将 nginx 静态页面文件打包成 tar 包,命名为
mywebsite.tar
。 - 在命令行中进入到 Dockerfile 所在的目录,执行以下命令:
docker build -t mynginx:v1.0 .
。稍等片刻,Docker 便会自动从 Dockerfile 中读取指令,逐步生成新的镜像。 - 然后,可以通过以下命令启动该 nginx 容器:
docker run --name mynginx -d -p 80:80 mynginx:v1.0
其中,
--name mynginx
表示给容器取名字为mynginx
。-d
表示以“后台模式”运行容器。-p 80:80
表示将主机的 80 端口映射到容器的 80 端口上。-
mynginx:v1.0
表示使用刚才构建的mynginx:v1.0
镜像来启动容器。 -
打开浏览器,输入
http://localhost
查看 nginx 网站是否正常访问。
示例二:构建 python 镜像
- 准备 Dockerfile 文件,内容如下:
# Use an official Python runtime as a parent image
FROM python:3.7-slim-buster
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app/
# Install the necessary packages
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
其中,该 Dockerfile 以官方 Python 3.7 镜像为基础,将当前目录下的所有文件复制到容器的 /app 目录下。然后通过 pip
安装了 requirements.txt
文件中列出的 Python 模块。最后将容器的 80 端口暴露给外部,定义了一个名为 NAME
的环境变量,并运行了 app.py
应用程序。
- 然后,执行以下命令生成新的镜像:
docker build -t mypython:v1.0 .
。 - 等待 Docker 生成完成后,可以通过以下命令启动该 Python 容器:
docker run -it --name mypython -p 8000:80 mypython:v1.0
其中,
-it
表示交互式运行容器。--name mypython
表示给容器取名字为mypython
。-p 8000:80
表示将主机的8000
端口映射到容器的80
端口上。-
mypython:v1.0
表示使用刚才构建的mypython:v1.0
镜像来启动容器。 -
打开浏览器,输入
http://localhost:8000
查看 Python 应用程序是否正常运行。
到此为止,以两个示例为例,我们就详细地讲解了手动构建 Docker 新镜像的具体操作过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker 手动构建新镜像的方法 - Python技术站