Docker 入门与部署指南
Docker 入门与部署指南
什么是 Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 操作系统上。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 的核心概念
- 镜像(Image):Docker 镜像是一个只读的模板,用来创建 Docker 容器。
- 容器(Container):容器是镜像的运行实例,可以被启动、开始、停止、删除。
- 仓库(Repository):仓库是集中存放镜像文件的场所,分为公有和私有两种。
安装 Docker
Windows 系统安装
Windows 用户可以通过以下步骤安装 Docker Desktop:
- 访问 Docker 官网 下载 Docker Desktop
- 运行下载的安装程序并按照提示完成安装
- 启动 Docker Desktop 应用
Linux 系统安装(以 Ubuntu 为例)
# 更新 apt 包索引
sudo apt-get update
# 安装必要的软件包
sudo apt-get install \
ca-certificates \
curl \
gnupg \
l**-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置 repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(l**_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新 apt 包索引
sudo apt-get update
# 安装 Docker Engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker 基本命令
镜像操作
# 查看本地镜像
docker images
# 拉取镜像
docker pull nginx
# 删除镜像
docker rmi nginx
容器操作
# 运行容器
docker run -d -p 8080:80 --name mynginx nginx
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 停止容器
docker stop mynginx
# 启动已停止的容器
docker start mynginx
# 删除容器
docker rm mynginx
编写 Dockerfile
Dockerfile 是一个文本文件,其中包含了一系列命令,用户可以调用 docker build 命令创建镜像。
示例 Dockerfile
# 使用官方 Node.js 运行时作为基础镜像
FROM node:16
# 设置工作目录
WORKDIR /usr/src/app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用程序代码
COPY . .
# 暴露端口
EXPOSE 3000
# 定义运行时环境变量
ENV NODE_ENV=production
# 启动应用
CMD ["node", "server.js"]
构建镜像
# 构建镜像
docker build -t my-node-app .
# 运行构建好的镜像
docker run -d -p 3000:3000 --name my-running-app my-node-app
Docker Compose 简介
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用程序的服务。
docker-compose.yml 示例
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- redis
environment:
REDIS_URL: redis://redis:6379
redis:
image: "redis:alpine"
Docker Compose 命令
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看运行中的服务
docker-compose ps
# 查看服务日志
docker-compose logs web
实际部署示例
下面我们以部署一个简单的 Web 应用为例,演示如何使用 Docker 进行部署。
1. 准备应用代码
首先我们有一个简单的 Node.js 应用:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`App running on http://localhost:${port}`);
});
2. 创建 Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
3. 构建并运行容器
# 构建镜像
docker build -t my-web-app .
# 运行容器
docker run -d -p 8080:3000 --name my-web-container my-web-app
现在可以在浏览器中访问 http://localhost:8080 来查看应用。
4. 使用 Docker Compose 部署
如果我们的应用还需要数据库等其他服务,可以使用 Docker Compose:
version: '3.8'
services:
web:
build: .
ports:
- "8080:3000"
depends_on:
- db
environment:
DB_HOST: db
DB_USER: user
DB_PASS: password
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
运行以下命令启动整个应用:
docker-compose up -d
Docker 最佳实践
-
使用 .dockerignore 文件:类似于
.gitignore,可以排除不需要添加到镜像中的文件。 -
合理利用镜像分层缓存:
# 先复制依赖文件,充分利用缓存 COPY package*.json ./ RUN npm install # 再复制源代码 COPY . . -
使用多阶段构建减小镜像体积:
# 构建阶段 FROM node:16 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 生产阶段 FROM node:16-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/package*.json ./ RUN npm install --production CMD ["node", "dist/server.js"] -
设置健康检查:
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3000/health || exit 1
总结
Docker 已经成为现代应用开发和部署的重要工具。它提供了轻量级、可移植、自包含的容器,使应用程序可以在几乎任何地方一致地运行。通过本文的学习,你应该掌握了:
- Docker 的基本概念和架构
- 如何安装和使用 Docker
- 如何编写 Dockerfile 并构建镜像
- 如何使用 Docker Compose 管理多容器应用
- Docker 的最佳实践
在实际项目中,你可以根据具体需求选择合适的部署方式,从简单的单容器应用到复杂的微服务架构都可以通过 Docker 来实现。





