Docker 入门与实战
什么是 Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
安装 Docker
Windows 安装
- 下载 Docker Desktop for Windows
- 安装并启动 Docker Desktop
- 验证安装:
bash
docker --versionmacOS 安装
- 下载 Docker Desktop for Mac
- 安装并启动 Docker Desktop
- 验证安装:
bash
docker --versionLinux (Ubuntu) 安装
bash
# 更新包索引
sudo apt-get update
# 安装必要的包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable dockerDocker 基本命令
镜像操作
bash
# 搜索镜像
docker search [镜像名称]
# 拉取镜像
docker pull [镜像名称]:[标签]
# 查看本地镜像
docker images
# 删除镜像
docker rmi [镜像ID]容器操作
bash
# 运行容器
docker run [选项] [镜像名称] [命令]
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop [容器ID]
# 启动容器
docker start [容器ID]
# 删除容器
docker rm [容器ID]
# 进入容器
docker exec -it [容器ID] /bin/bashDockerfile 基础
Dockerfile 是一个文本文件,包含了构建 Docker 镜像所需的所有指令。
基本指令
dockerfile
# 基础镜像
FROM node:16-alpine
# 设置工作目录
WORKDIR /app
# 复制文件到工作目录
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 运行命令
CMD ["npm", "start"]Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。
示例 docker-compose.yml
yaml
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
volumes:
mongo_data:常用命令
bash
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看日志
docker-compose logs
# 重新构建并启动
docker-compose up --build最佳实践
- 使用官方基础镜像:优先选择官方维护的基础镜像
- 最小化镜像大小:使用 alpine 版本,减少不必要的包
- 多阶段构建:使用多阶段构建减少最终镜像大小
- 安全考虑:避免在镜像中存储敏感信息
- 适当设置健康检查:确保容器状态可监控
常见问题
端口冲突
bash
# 查看端口占用
netstat -tulpn | grep [端口号]
# 使用不同端口映射
docker run -p 8081:80 [镜像名称]数据持久化
bash
# 使用卷挂载
docker run -v /本地路径:/容器路径 [镜像名称]
# 使用命名卷
docker volume create [卷名]
docker run -v [卷名]:/容器路径 [镜像名称]