Docker 核心概念
容器化技术
- Docker 使用容器化技术为应用程序封装独立的运行环境
- 每个运行环境就是一个容器
- 运行容器的计算机被称为宿主机
Docker vs 虚拟机
- Docker 容器:共用同一个系统内核
- 虚拟机:每个虚拟机都包含操作系统的完整内核
- 优势:Docker 容器更轻更小,启动速度更快
镜像与容器关系
- 镜像:容器的母版,类比软件安装包
- 容器:安装出来的软件
- 比喻:镜像就像模具,容器就像用模具制作出的糕点
Docker 仓库
- Docker Hub 是官方仓库,存储共享的镜像
- 用户可以上传自己的镜像到仓库,其他人可以下载使用
Docker 安装指南
Linux 系统安装
- 访问
get.docker.com获取安装步骤 - 执行第一步和第四步的命令
- 非 root 用户需要在 Docker 命令前加
sudo
- docker-ce:Docker Engine 守护进程
- docker-ce-cli:docker 命令行
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)卸载遗留环境(bash shell下)
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin- 确认存活
sudo systemctl status docker sudo systemctl start docker手动启动dockersudo docker run hello-world
卸载
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.sources
sudo rm /etc/apt/keyrings/docker.asc
Windows 系统安装
-
启用 Windows 功能:
- WSL 2
- 虚拟机平台
-
重启电脑后安装 WSL:
wsl --set-default-version 2 wsl --update -
下载 Docker Desktop 安装包(AMD64 架构)
-
安装后保持 Docker Desktop 运行
macOS 系统安装
- 根据芯片类型下载对应的安装包
- 直接安装即可
镜像站配置 解决网络问题:
- Linux:修改配置文件
/etc/docker/daemon.json - Windows/macOS:在 Docker Desktop 设置中添加镜像站
Docker 镜像管理
镜像命名结构
docker.io/library/nginx:latest
docker.io:Registry(仓库地址)library:Namespace(命名空间)nginx:镜像名称latest:Tag(标签/版本号)
简化形式:docker pull nginx
-
官方仓库:Docker Hub
-
镜像站:提供相同功能
-
docker images:列出所有下载的镜像 -
docker rmi:删除镜像 -
docker pull --platform:拉取特定 CPU 架构的镜像 -
默认自动选择最适合当前宿主机架构的镜像
-
树莓派使用 ARM64 架构
-
Mac 电脑使用 QEMU 模拟 x86_64 架构
Docker 容器操作
-
docker run:创建并运行容器 -
docker ps:查看运行中的容器 -
docker stop:停止容器 -
docker start:启动已停止的容器 -
Container ID:唯一标识符
-
Image:基于哪个镜像创建
-
Names:容器名称(自动分配或自定义)
后台运行
docker run -d nginx-d:分离模式,容器在后台运行
端口映射
docker run -p 80:80 nginx-p:端口映射(宿主机端口:容器端口)- 顺序:先外后内
目录挂载
docker run -v /host/path:/container/path nginx-v:目录绑定挂载- 作用:数据持久化存储
挂载类型:
- 绑定挂载:直接指定宿主机目录
- 命名卷挂载:Docker 自动创建存储空间
环境变量
docker run -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=password mongo-e:传递环境变量到容器
容器命名
docker run --name my-container nginx--name:自定义容器名称(必须唯一)
交互式容器
docker run -it --rm ubuntu bash-it:交互式终端--rm:容器停止时自动删除
重启策略
docker run --restart=always nginx--restart=always:容器停止时立即重启--restart=unless-stopped:手动停止的容器不重启
容器调试
docker exec:在容器内执行命令docker exec -it container_id bash:进入容器交互环境docker logs:查看容器日志docker logs -f:滚动查看日志
容器信息查看
docker inspect:查看容器详细信息- 可查看端口映射、挂载卷等配置
Docker 网络配置
给docker daemon配置代理
sudo mkdir -p /etc/systemd/system/docker.service.d
cat <<'EOF' | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf >/
dev/null
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="ALL_PROXY=socks5://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker
sudo docker pull hello-world每次修改后重启daemon和docker
sudo systemctl daemon-reload
sudo systemctl restart docker网络模式
Bridge 模式(默认)
- 所有容器默认连接到 bridge 网络
- 容器分配内部 IP 地址(172.17.x.x)
- 容器网络与宿主机网络隔离
创建子网
docker network create network1优势:
- 同一子网的容器可以互相通信
- 可以使用容器名称互相访问(DNS 机制)
- 跨子网不可通信
Host 模式
docker run --network=host nginx- 容器直接共享宿主机网络
- 使用宿主机 IP 地址
- 无需端口映射
None 模式
- 容器不连接网络
网络管理命令
docker network ls:列出所有网络docker network rm:删除网络
Dockerfile 与镜像构建
Dockerfile 基础
- Dockerfile 是制作镜像的”图纸”
- 详细列出镜像的制作步骤
Dockerfile 示例
FROM python:3.13-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "main.py"]指令说明
FROM:基础镜像WORKDIR:设置工作目录COPY:复制文件到镜像RUN:执行命令EXPOSE:声明服务端口CMD:容器启动命令ENTRYPOINT:入口点(优先级更高)
镜像构建与推送
# 构建镜像
docker build -t username/imagename:tag .
# 登录 Docker Hub
docker login
# 推送镜像
docker push username/imagename:tagDocker Compose 编排
多容器应用
最佳实践:每个模块打包成独立容器
- 避免单点故障
- 便于精准扩容
Docker Compose 文件
services:
mongodb:
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
networks:
- app-network
mongo-express:
image: mongo-express
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongodb
ports:
- "8081:8081"
networks:
- app-network
depends_on:
- mongodb
networks:
app-network:
driver: bridgeCompose 命令
docker compose up:启动所有服务docker compose up -d:后台启动docker compose down:停止并删除容器docker compose stop:只停止不删除docker compose start:启动已停止的服务
文件命名
- 标准文件名:
docker-compose.yml - 非标准文件:
docker compose -f filename.yml up