进阶实战:Docker 核心操作
在理解了容器底层原理后,我们需要通过 Docker 这个“管理大师”来实际操控它们。本章节将带你完成从环境搭建到应用部署的完整闭环。
1. 安装与免 Sudo 配置
sudo apt install docker.iosudo pacman -S docker默认执行 docker 命令需要 root。将当前用户加入 docker 组即可:
sudo usermod -aG docker $USER
# 重启系统或重新登录生效2. 镜像 (Image) 的一生:Dockerfile 实战
Dockerfile 是构建镜像的脚本。
▶ 创建一个简单的 Node.js 应用镜像
# 1. 基础镜像
FROM node:18-alpine
# 2. 设置工作目录
WORKDIR /app
# 3. 复制依赖并安装
COPY package*.json ./
RUN npm install
# 4. 复制代码
COPY . .
# 5. 暴露端口并运行
EXPOSE 3000
CMD ["npm", "start"]构建指令: docker build -t my-app:v1 .
3. 容器 (Container) 的生命周期管理
| 操作 | 命令 | 说明 |
|---|---|---|
| 创建并运行 | docker run -d -p 80:80 nginx | -d 后台运行,-p 映射端口 |
| 查看运行中 | docker ps | 添加 -a 查看所有(含停止的) |
| 进入容器 | docker exec -it <id> sh | -it 交互式终端 |
| 查看日志 | docker logs -f <id> | -f 实时追踪 |
| 删除资源 | docker rm -f <id> | 强杀并删除容器 |
4. 持久化与网络:容器的大动脉
4.1 数据卷 (Volumes)
容器销毁后,内部数据会丢失。使用数据卷将宿主机目录挂载进去:
docker run -v /opt/data:/var/lib/mysql mysql4.2 网络 (Networks)
默认容器使用 bridge 模式。如果你想让两个容器互相通信,建议创建自定义网络:
docker network create my-net
docker run --network my-net --name web nginx