Docker 核心概念
Docker 是什么?
- 轻量级容器化平台,允许打包应用及其依赖环境为一个可移植的容器。
- 与虚拟机的区别:容器共享主机内核,无需完整操作系统,启动更快、资源占用更少。
核心组件
- 镜像(Image):只读模板,包含应用代码、运行环境和配置(如 nginx:latest)。
- 容器(Container):镜像的运行实例,具有独立文件系统和网络。
- 仓库(Registry):存储镜像的平台(如 Docker Hub、私有仓库)。
安装与配置
安装docker
支持系统:Linux/Windows/macOS
去安装命令示例(Ubuntu):
sudo apt-get update && sudo apt-get install docker-ce
配置镜像加速器
修改 /etc/docker/daemon.json,添加国内镜像源(如阿里云)。
{
"registry-mirrors": ["https://reg-mirror.qiniu.com"],
}
基础操作命令
命令 | 作用 | 示例 |
---|---|---|
docker pull <镜像名> | 下载镜像 | docker pull ubuntu:20.04 |
docker run <选项> <镜像> | 创建并启动容器 | docker run -d --name 容器名称 -p 80:80 nginx |
docker ps | 查看运行中的容器 | docker ps -a(显示所有容器) |
docker exec -it <容器ID> bash | 进入容器终端 | docker exec -it myapp bin/bash |
docker stop <容器ID> | 停止容器 | docker stop 1a2b3c4d |
docker rm <容器ID> | 删除容器 | docker rm 1a2b3c4d |
docker rmi <镜像名> | 删除镜像 | docker rmi nginx:latest |
镜像与容器管理
镜像操作
- 构建镜像:通过 Dockerfile 创建自定义镜像。
docker build -t myapp:1.0 .
- 导出/导入镜像:
docker save myapp:1.0 > myapp.tar
docker load < myapp.tar
容器生命周期
- 创建 → 启动 → 停止 → 删除。
- 数据持久化:使用卷(Volume)或绑定挂载(Bind Mount)。
docker run -v /data:/app/data myapp
docker run -d --name streamlit -v 本地文件路径:/var/www/html -p 8502:8501 streamlit-app
Dockerfile 最佳实践
关键指令
FROM ubuntu:20.04 # 基础镜像
WORKDIR /var/www/html # 设置工作目录
COPY . . # 复制文件
RUN apt-get update && \ # 执行命令(安装依赖)
apt-get install -y python3
EXPOSE 80 # 声明端口(可以执行时声明)
CMD ["python3", "app.py"] # 启动命令(可以不定义)
优化技巧
- 合并多层 RUN 命令减少镜像层数。(因方便而定)
- 使用 .dockerignore 忽略无用文件。
数据与网络管理
数据卷(Volume)
- 持久化存储容器数据,独立于容器生命周期。
docker volume create my_volume
docker run -v my_volume:/data mysql
网络模式
- bridge(默认):容器通过虚拟网桥通信。
- host:容器直接使用主机网络。
- 自定义网络:
docker network create my_network
docker run --network=my_network myapp
Docker Compose 多容器编排
编写 docker-compose.yml
version: '3'
services:
web:
image: nginx
working_dir: /var/www/html/
volumes:
- ./:/var/www/html/
ports:
- 8082:80
tty: true
networks:
- backend
networks:
backend:
driver: bridge
frontend:
driver: bridge
常用命令
docker-compose up -d # 启动服务
docker-compose down # 停止并删除容器
知识点总览图
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。