举个很简单的例子,我有一个Centos7的服务器,但是由于系统限制,我无法安装nodejs18…
但是!我在Docker里就可以!
Dockerfile是Docker的心脏,一个文本文件,包含了一系列的指令,用来构建一个Docker镜像。每条指令都会在镜像中创建一个层。现在,让我带来一探究竟!
Dockerfile的基础命令
FROM
:基础镜像指令。所有Dockerfile都以一个FROM
指令开始,它指定了一个已存在的镜像作为构建的基础。RUN
:执行命令。在当前镜像层上执行命令,并提交结果,用于创建新的镜像层。CMD
:容器启动命令。提供容器启动时的默认执行命令。LABEL
:标签。用于为镜像添加元数据。EXPOSE
:暴露端口。它告诉Docker容器在运行时监听的端口。ENV
:环境变量。设置容器内的环境变量。ADD
和COPY
:添加文件。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的使用!