Docker 入门指南
什么是 Docker?
Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个轻量级的容器中。这样,应用就可以在任何支持 Docker 的环境中一致地运行,解决了”在我电脑上可以跑”的问题。Docker 容器就像是一个微型的、标准化的虚拟环境,确保了应用在不同系统间的可移植性和一致性。Docker 的概念类似于 Java 虚拟机(JVM):就像 JVM 为 Java 应用提供了一个统一的运行环境,Docker 为各种应用提供了一个标准化的运行环境。
为什么使用 Docker?
- 环境一致性:容器可以在不同的操作系统和云平台上保持一致的运行环境。
- 资源高效:相比传统虚拟机,Docker 容器更加轻量,启动速度更快。
- 便于管理:Docker 提供了易于使用的命令行工具,可以快速部署、更新和删除应用。
安装 Docker
在开始使用 Docker 之前,需要先安装 Docker。可以通过访问 Docker 官方网站 根据你的操作系统进行安装。
测试 Docker 是否安装成功
docker --version
docker run hello-world
创建第一个 Docker 容器
1. 拉取镜像
Docker Hub 是一个公共的镜像库,我们可以从中拉取各种预先构建好的镜像。打开终端,运行以下命令来拉取一个简单的 Nginx 镜像:
docker pull nginx
2. 运行容器
镜像下载完成后,可以使用以下命令启动一个新的 Nginx 容器:
docker run -d -p 8080:80 nginx
-d
:表示后台运行容器。-p 8080:80
:将宿主机的 8080 端口映射到容器的 80 端口。
3. 访问应用
在浏览器中输入 http://localhost:8080
,你应该能看到 Nginx 的欢迎页面。
管理 Docker 容器
查看正在运行的容器
使用以下命令查看当前正在运行的容器:
docker ps
停止和删除容器
如果需要停止容器,可以使用 docker stop
命令。假设容器 ID 为 abc123
,可以运行:
docker stop abc123
要删除容器,可以使用:
docker rm abc123
创建自己的 Dockerfile
除了使用现成的镜像,你还可以创建自己的镜像。以下是一个简单的 Dockerfile 示例,用于创建一个 Node.js 应用:
- 比如我们有一个简单的 Node.js 应用,我们希望将它打包成一个 Docker 镜像。
// app.js
const express = require('express');
const app = express();
app
.get('/', (req, res) => {
res.send('Hello, Docker!');
})
.get('/users', (req, res) => {
res.send('List of users');
})
.get('/users/:id', (req, res) => {
res.send(`User ${req.params.id}`);
})
.listen(3000, () => {
console.log('Server is running on port 3000');
});
- 创建一个名为
Dockerfile
的文件,内容如下:
FROM node:20
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
- 在与 Dockerfile 同一目录下,构建镜像:
docker build -t my-node-app .
- 运行容器:
docker run -d -p 3000:3000 my-node-app
multi-stage builds 示例
Multi-stage builds 是 Docker 的一个强大特性,它允许你在一个 Dockerfile 中使用多个阶段来构建你的应用。这种方法可以显著减小最终镜像的大小,因为你可以只保留运行应用所需的文件,而丢弃构建过程中的中间文件。
例如一个纯前端应用的 multi-stage build Dockerfile 示例:
pnpm create vite
# Stage 1: Build the Vue application
FROM node:20 as build-stage
WORKDIR /app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy project files and build
COPY . .
RUN npm run build
# Stage 2: Serve the app using Nginx
FROM nginx:stable-alpine as production-stage
# Copy built assets from build-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
# Expose port 80
EXPOSE 80
# Start Nginx server
CMD ["nginx", "-g", "daemon off;"]
docker build -t my-static-app .
docker run -d -p 3000:80 my-static-app
总结
Docker 是一个强大的工具,可以极大地简化应用的部署和管理。通过本文的简单示例,你已经能够创建并管理 Docker 容器。
接下来可以深入学习 Docker Compose 和 Kamal 等工具,进一步提升你的容器化技能。