头图

举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18.....

但是!我在Docker里就可以!

Dockerfile是Docker的心脏,一个文本文件,包含了一系列的指令,用来构建一个Docker镜像。每条指令都会在镜像中创建一个层。现在,让我带来一探究竟!

Dockerfile的基础命令

  • FROM:基础镜像指令。所有Dockerfile都以一个FROM指令开始,它指定了一个已存在的镜像作为构建的基础。
  • RUN:执行命令。在当前镜像层上执行命令,并提交结果,用于创建新的镜像层。
  • CMD:容器启动命令。提供容器启动时的默认执行命令。
  • LABEL:标签。用于为镜像添加元数据。
  • EXPOSE:暴露端口。它告诉Docker容器在运行时监听的端口。
  • ENV:环境变量。设置容器内的环境变量。
  • ADDCOPY:添加文件。ADD可以解压缩和远程URL,而COPY则更适用于本地文件复制操作。
  • ENTRYPOINT:入口点。配置容器启动时运行的命令。
  • VOLUME:定义匿名卷。用于在容器和宿主机之间共享数据。
  • USER:设置用户。指定运行容器的用户名或UID。
  • WORKDIR:工作目录。设置在容器内的命令执行的当前工作目录。
  • ARG:构建参数。用于定义构建时传递给Dockerfile的变量。
  • ONBUILD:构建触发器。当一个镜像被用作另一个构建的基础时,触发指令执行。

创建一个简单的Dockerfile

让我们通过一个实际的例子:部署Node.js项目来学习Dockerfile的使用

首先,这里假设你已经有了一个package.json和一个主文件比如app.js

# 使用官方Node.js的最新LTS版本作为基础镜像
FROM node:lts

# 设置容器内部的工作目录
WORKDIR /usr/src/app

# 将package.json和package-lock.json复制到工作目录
COPY package*.json ./

# 安装项目依赖
RUN npm install

# 将本地代码复制到工作目录
COPY . .

# 告诉Docker在运行时监听3000端口
EXPOSE 3000

# 定义环境变量
ENV NODE_ENV=production

# 运行你的app.js当容器启动
CMD ["node", "app.js"]

构建与运行

现在有了一个Dockerfile,那么如何使用它呢?

你只需要构建它!

docker build -t your-username/nodejs-app .

这个命令将构建Docker镜像,并标记它为your-username/nodejs-app

接下来,运行你的容器!

docker run -p 3000:3000 -d your-username/nodejs-app

-p参数映射了容器的端口到宿主机的端口。-d参数代表“detached”,意味着容器会在后台运行。

over!

结语

Dockerfile的魔力在于它的简单性和强大功能。

通过一系列简洁的指令,你可以创建一个可复制、可靠的环境,让应用的部署变得前所未有的轻松。

举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18.....


但是!我在Docker里就可以!

Emmm.....最近在学Docker、Github Action的自动化部署,下一期将会进一步讲述 Dockerfile的使用!


青玉白露
74 声望9 粉丝