1. Docker 基础知识
1.1 什么是 Docker?
- Docker 是一个开源的平台,用于开发、交付和运行应用程序。
- 它使用容器技术,将应用程序及其依赖打包在一个轻量级的可移植容器中。
1.2 Docker 的主要组件
- 镜像(Image): 只读的模板,包含运行应用程序所需的一切,包括代码、库、环境变量等。
- 容器(Container): 镜像的运行实例,可以看作是一个轻量级的虚拟机,但它共享主机的操作系统内核。
- Dockerfile: 定义镜像的文件,包含了一系列命令,Docker 可以根据这些命令构建镜像。
- Docker Hub: 官方的镜像仓库,可以从中下载现成的镜像,或上传自己的镜像。
2. 环境准备
2.1 安装 Docker
- 访问 Docker 官网,根据你的操作系统下载并安装 Docker。
- 安装完成后,可以通过命令行运行 docker --version 来验证 Docker 是否正确安装。
3. 第一个 Docker 容器
3.1 运行 Hello World
docker run hello-world
- 这个命令会从 Docker Hub 拉取 hello-world 镜像,并在容器中运行它。
- 你会看到一条包含 “Hello from Docker!” 的消息,这意味着你的 Docker 安装成功,并且可以正确运行容器。
3.2 理解 docker run 命令
- docker run:创建并启动一个新的容器。
- hello-world:要运行的镜像名称。
4. Dockerfile 与自定义镜像
4.1 创建 Dockerfile
# 使用官方的 Node.js 镜像
FROM node:14
# 创建并设置工作目录
WORKDIR /usr/src/app
# 复制项目文件到工作目录
COPY . .
# 安装项目依赖
RUN npm install
# 暴露端口
EXPOSE 3000
# 启动应用程序
CMD [ "npm", "start" ]
- WORKDIR /usr/src/app:将容器内的工作目录设置为 /usr/src/app。接下来所有的 COPY、RUN 等命令都会基于这个目录执行。
- COPY . .:将本地项目的所有文件复制到容器内的工作目录中。
- RUN npm install:在容器内安装项目的依赖项。
- CMD [“npm”, “start”]:设置容器启动时要执行的命令,这里是 npm start,它会启动 Node.js 应用。
4.2 构建镜像
docker build -t my-node-app .
- -t my-node-app:指定镜像的名称。
- .:指定 Dockerfile 所在的目录。
4.3 运行容器
docker run -p 3000:3000 my-node-app
- -p 3000:3000:将主机的 3000 端口映射到容器的 3000 端口。
- my-node-app:要运行的镜像名称。
4.4 访问应用
打开浏览器,访问 http://localhost:3000,应该可以看到页面显示 “Hello, Docker!”。
5. 完整实例
my-node-app/
│
├── Dockerfile
├── package.json
├── package-lock.json
└── index.js
index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Docker!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
package.json
{
"name": "my-node-app",
"version": "1.0.0",
"description": "A simple Node.js app to demonstrate Docker",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.17.1"
}
}