Dockerfile 创建 Docker

在现代的软件开发中,Docker 已经成为了一个非常流行的容器化技术。它可以帮助开发人员将应用程序与其依赖项打包在一个独立的容器中,从而实现跨平台的部署。要创建一个 Docker 容器,首先需要编写一个 Dockerfile 文件,其中包含了构建该容器所需的所有步骤和指令。

什么是 Dockerfile?

Dockerfile 是一个纯文本文件,其中包含了一系列的指令,用来告诉 Docker 如何构建一个容器镜像。通过 Dockerfile,可以定义容器镜像的基础操作系统、安装软件包、设置环境变量等操作。当 Docker 运行时,它会按照 Dockerfile 中定义的指令逐步构建容器镜像。

Dockerfile 指令

一个基本的 Dockerfile 文件通常包含以下几个部分:

  • FROM:指定基础镜像。
  • RUN:在镜像中执行命令。
  • COPY:将文件从主机复制到容器中。
  • WORKDIR:设置工作目录。
  • EXPOSE:指定容器在运行时监听的端口。
  • CMD:指定容器启动时执行的命令。

下面是一个简单的示例 Dockerfile:

# 使用官方的 Python 3 镜像作为基础镜像
FROM python:3

# 在容器中创建一个新目录
RUN mkdir /app

# 将当前目录中的文件复制到容器中的 /app 目录
COPY . /app

# 指定工作目录
WORKDIR /app

# 安装依赖包
RUN pip install -r requirements.txt

# 暴露端口
EXPOSE 5000

# 指定启动命令
CMD ["python", "app.py"]

在这个示例中,我们使用了官方的 Python 3 镜像作为基础镜像,创建了一个新的目录 /app,并将当前目录中的文件复制到 /app 目录中。然后安装了 requirements.txt 中列出的依赖包,将容器的 5000 端口暴露出来,并指定了启动命令为 python app.py

Dockerfile 构建容器镜像

要构建一个容器镜像,可以使用 docker build 命令,并指定 Dockerfile 文件所在的路径。例如,假设上面的 Dockerfile 文件位于当前目录下,可以使用以下命令构建镜像:

docker build -t myapp .

其中,-t myapp 指定了镜像的名称为 myapp。构建完成后,可以使用 docker images 命令查看已构建的镜像:

docker images

Dockerfile 实例

接下来,我们通过一个实际的例子来演示如何使用 Dockerfile 创建一个 Node.js 应用程序的容器镜像。假设我们有一个简单的 Node.js 应用程序,包含两个文件 app.jspackage.json,内容如下:

app.js:

const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

package.json:

{
  "name": "docker-node",
  "version": "1.0.0",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "http": "^0.0.1"
  }
}

为了将该 Node.js 应用程序打包成一个 Docker 容器,我们需要编写一个 Dockerfile:

# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14

# 在容器中创建一个新目录
RUN mkdir /app

# 将当前目录中的文件复制