Docker 镜像构建保姆级入门实战指南
原创一、什么是Docker镜像?
Docker镜像是一种轻量级的、可执行的软件包,它包含运行应用程序所需的所有组件,如代码、运行时、库、环境变量和配置文件等。Docker镜像是基于文件系统的,可以看作是一个虚拟机的镜像,但是它比虚拟机更轻量级,由于它不包含操作系统。
二、Docker镜像的构建流程
构建Docker镜像首要包括以下几个步骤:
1. 编写Dockerfile:Dockerfile是一个包含指令和参数的文本文件,用于构建Docker镜像。
2. 运行Docker构建命令:使用Docker的构建命令,采取Dockerfile中的指令构建镜像。
3. 镜像推送(可选):将构建好的镜像推送到Docker仓库。
三、Dockerfile的基本语法
Dockerfile由一系列指令组成,每个指令都对应一个操作。以下是Dockerfile的基本语法:
- FROM:指定基础镜像,如`FROM ubuntu:18.04`。
- RUN:在容器中执行命令,如`RUN apt-get update && apt-get install -y nginx`。
- COPY:将文件或目录复制到镜像中,如`COPY . /app`。
- ADD:类似于COPY,但可以自动解压缩tar文件,如`ADD package.tar.gz /app/`。
- WORKDIR:设置工作目录,如`WORKDIR /app`。
- CMD:设置容器启动时运行的命令,如`CMD ["nginx", "-g", "daemon off;"]`。
- EXPOSE:暴露容器端口,如`EXPOSE 80`。
- ENV:设置环境变量,如`ENV NAME World`。
- USER:设置运行用户,如`USER daemon`。
四、实战:构建一个易懂的Nginx镜像
下面我们将通过一个易懂的例子来构建一个Nginx镜像。
1. 创建一个名为`Dockerfile`的文件,并添加以下内容:
bash
FROM nginx:latest
COPY . /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2. 进入当前目录,运行以下命令构建镜像:
bash
docker build -t nginx-test .
3. 查看镜像列表:
bash
docker images
4. 运行镜像:
bash
docker run -d -p 8080:80 nginx-test
5. 访问`http://localhost:8080`,你应该能看到Nginx的默认页面。
五、实战:构建一个包含Node.js应用的镜像
下面我们将通过一个例子来构建一个包含Node.js应用的镜像。
1. 创建一个名为`Dockerfile`的文件,并添加以下内容:
bash
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
2. 在当前目录下创建一个名为`package.json`的文件,并添加以下内容:
json
{
"name": "node-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
}
}
3. 创建一个名为`app.js`的文件,并添加以下内容:
javascript
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, Docker! ');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
4. 运行以下命令构建镜像:
bash
docker build -t node-app .
5. 运行镜像:
bash
docker run -d -p 3000:3000 node-app
6. 访问`http://localhost:3000`,你应该能看到“Hello, Docker!”的提示。
六、总结
通过本文的学习,你现在已经掌握了Docker镜像的基本概念和构建方法。你可以采取自己的需求,构建适合自己项目的Docker镜像。在实际应用中,Docker镜像的构建会更加繁复,但基本的原理和步骤是相似的。
期望本文能帮助你迅速入门Docker镜像的构建,祝你学习愉快!