介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
核心概念
Image(镜像)
镜像基于分层文件系统构建(Layered Filesystem),由多个只读层叠加组成,用于描述应用的运行时环境。
Container(容器)
容器是镜像的可运行实例,是一种轻量化、可移植、隔离的进程运行环境。
Registry(镜像仓库)
用于分发镜像,如 Docker Hub、阿里云 ACR、Harbor 等。
Volume(持久化卷)
用于持久存储容器外部化数据,避免容器删除导致数据丢失。
Ubuntu安装
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
Centos安装
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
验证安装:
docker version
docker info
国内镜像加速
为避免访问 Docker Hub 受限,可在 daemon.json 中加入加速器:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://dockerproxy.net",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
EOF
加速配置:
sudo systemctl daemon-reload
sudo systemctl restart docker
常用命令
镜像管理
docker pull nginx # 拉取镜像
docker images # 列出镜像
docker rmi nginx # 删除镜像
docker build -t myapp:latest . # 构建镜像
容器生命周期管理
docker run -d -p 80:80 nginx # 以守护模式运行容器
docker ps # 查看运行中的容器
docker stop <container> # 停止容器
docker rm <container> # 删除容器
docker exec -it <container> bash # 进入容器 Shell
docker logs -f <container> # 实时日志
docker restart <container> # 重启容器
数据卷与持久化
docker volume create data-volume
docker volume ls
docker volume inspect data-volume
docker volume rm data-volume
网络管理
docker network ls
docker network create my-net
docker network inspect my-net
docker network rm my-net
Docker Compose
Docker Compose 是基于 YAML 的容器编排工具,通过单个 docker-compose.yml 进行服务定义、网络拓扑、依赖关系管理、持久化配置等。
其主要优势:
- 声明式 Infrastructure-as-Code
- 服务依赖自动处理(depends_on)
- 网络自动创建(Overlay 网络可用于 Swarm)
- 多服务可一键启动、更新、停止
- 非生产环境下比 Kubernetes 更轻量
Compose安装验证
docker compose version
如已显示版本号,则 Compose V2 已启用(现代 Docker 默认包含)。
Compose 多服务应用案例
Nginx + PHP-FPM + MySQL
目录结构:
/srv/demo/
├─ docker-compose.yml
├─ web/
└─ nginx.conf
docker-compose.yml 内容:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: demo-nginx
ports:
- "8080:80"
volumes:
- ./web:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- php
networks:
- demo-net
php:
image: php:8.2-fpm
container_name: demo-php
volumes:
- ./web:/var/www/html
networks:
- demo-net
mysql:
image: mysql:8.0
container_name: demo-mysql
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: demo
volumes:
- db-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- demo-net
volumes:
db-data:
networks:
demo-net:
Compose常用命令
docker compose up -d # 后台启动所有服务
docker compose down # 停止并清理容器
docker compose logs -f # 查看所有服务日志
docker compose ps # 查看状态
docker compose restart nginx # 重启某服务
docker compose up --build -d # 重新构建镜像并启动
案例:Docker部署nginx
docker run -d \
--name my-nginx \
-p 8080:80 \
-v /home/nginx/html:/usr/share/nginx/html \
-v /home/nginx/conf:/etc/nginx \
nginx
浏览器访问:
http://服务器IP:8080
修改 /home/nginx/html/index.html 即可实时生效。
Linux Docker多容器管理部署
qngypisdgsiturvdqmtyzwmyujjoyu