Docker查看运行容器
Docker查看运行容器
引言
部署多个服务后,先要看清哪些容器在跑、状态如何、映射了哪些端口、跑了多久。docker ps系列命令是日常运维入口,配合格式化和过滤快速定位目标容器。
只看运行中容器
docker ps
输出容器ID、镜像、命令、创建时间、状态、端口映射、名称,默认只列正在运行的。
查看全部容器(含已停止)
docker ps -a
把Exited状态的容器也列出来,排查退出残留时用。
只看容器ID
docker ps -q
输出纯ID,配合批量停止删除。
自定义输出列
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"
只保留关心的列,脚本采集更清晰。
按镜像过滤
docker ps --filter ancestor=nginx:latest
列出指定镜像启动的容器。
查看容器资源占用
docker stats
实时看每个容器CPU、内存、网络IO,Ctrl+C退出。
注意事项
- ps默认不含已停止容器,找退出容器用-a;
- STATUS显示Up时长或Exited码,退出码非0要查日志;
- PORTS列看清宿主端口到容器端口的映射;
- 容器名重复会冲突,--name要唯一;
- 配合docker inspect看单个容器完整配置;
- 批量操作前先用-q列出ID确认范围。
总结
docker ps看运行中容器,-a含已停止,-q取ID批量处理,--format自定义列,--filter按镜像过滤,docker stats看实时资源。运维先列清单确认状态和端口,再决定停止、重启或排查,避免凭印象操作容器。
Docker查看本地镜像
Docker查看本地镜像
引言
用Docker跑服务前先确认本地有哪些镜像、大小多少、标签是什么,避免重复拉取或用错版本。docker images系列命令能列出镜像仓库名、标签、ID、大小和创建时间。
列出全部本地镜像
docker images
# 等价
docker image ls
输出REPOSITORY、TAG、IMAGE ID、CREATED、SIZE五列。
只看镜像ID
docker images -q
只输出短ID,配合批量删除使用。
按名称过滤
docker images nginx
docker images | grep php
列出指定仓库名或关键词的镜像。
查看镜像详细信息
docker inspect nginx:latest
JSON输出架构、环境变量、挂载点、默认启动命令等。
查看镜像历史层
docker history nginx:latest
看每层做了什么改动、每层大小,理解镜像分层结构。
过滤和格式化
docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}"
自定义输出列,脚本里取数更方便。
注意事项
- 同一个镜像不同TAG可能共用层,SIZE不重复累加;
- 悬空镜像
是旧版本残留,用prune清理; - 镜像大小是解压后占用,下载压缩包更小;
- 看磁盘占用用docker system df;
- 未被任何容器引用的镜像可安全删除;
- 拉取前先docker images判断是否已存在。
总结
docker images列出本地镜像,-q取ID、按仓库名过滤、inspect看详情、history看分层、--format自定义输出。日常先列镜像确认版本和大小,再决定拉取或删除,配合system df掌握磁盘占用。
Docker多阶段镜像构建
Docker多阶段镜像构建
引言
直接打包项目代码、编译工具到镜像,镜像体积巨大,部署传输慢。Docker多阶段构建可以在第一阶段编译代码,第二阶段只复制编译后的成品,剔除编译器、源码,大幅度减小镜像大小。
原理
一个Dockerfile可以写多个FROM,每一个FROM代表一个阶段。阶段之间可以复制文件,最终镜像只保留最后一个阶段内容,前面阶段的编译环境不会打包进最终镜像。
示例Dockerfile(PHP项目)
#阶段1:构建
FROM php:8.2-cli AS builder
WORKDIR /app
COPY . .
RUN composer install --no-dev
#阶段2:运行环境
FROM php:8.2-cli-alpine
WORKDIR /app
COPY --from=builder /app .
CMD ["php","index.php"]
最终镜像只有php运行环境加业务代码,没有composer、源码缓存文件。
优势
- 镜像体积大幅缩小,传输更快;
- 减少攻击面,镜像内没有编译工具,安全性更高;
- 只维护单个Dockerfile,构建流程简单。
注意事项
- 多阶段命名便于阅读;
- 不要复制不需要的文件,
.dockerignore忽略日志、缓存; - 区分开发镜像与生产镜像,生产镜像精简。
总结
多阶段构建是容器化部署最佳实践,适合PHP、Go、前端打包等场景,生产环境镜像尽量使用多阶段构建,减小体积提升部署效率。
Docker常用命令大全,新手必看
前言
Docker现在用得越来越多,但很多新手记不住命令。本文整理了最常用的Docker命令,收藏起来随用随查。
一、镜像相关命令
拉取镜像
docker pull nginx:latest
查看本地镜像
docker images
删除镜像
docker rmi 镜像ID
强制删除镜像
docker rmi -f 镜像ID
搜索镜像
docker search nginx
二、容器相关命令
查看运行中的容器
docker ps
查看所有容器(包括停止的)
docker ps -a
启动容器
docker start 容器名/容器ID
停止容器
docker stop 容器名/容器ID
重启容器
docker restart 容器名/容器ID
删除容器
docker rm 容器名/容器ID
强制删除运行中的容器
docker rm -f 容器名/容器ID
进入容器
docker exec -it 容器名/容器ID /bin/bash
查看容器日志
docker logs 容器名/容器ID
实时查看日志
docker logs -f 容器名/容器ID
查看容器详细信息
docker inspect 容器名/容器ID
查看容器IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名
查看容器资源占用
docker stats
三、运行容器
后台运行
docker run -d --name mynginx -p 80:80 nginx
参数解释:
- -d:后台运行
- --name:容器名
- -p:端口映射(宿主端口:容器端口)
运行并进入容器
docker run -it ubuntu /bin/bash
挂载目录
docker run -d -v /host/path:/container/path nginx
环境变量
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql
自动重启
docker run --restart=always -d nginx
四、清理命令
停止所有容器
docker stop $(docker ps -q)
删除所有停止的容器
docker container prune
删除所有未使用的镜像
docker image prune -a
一键清理
docker system prune -a
五、Docker Compose命令
启动
docker-compose up -d
停止
docker-compose down
查看状态
docker-compose ps
查看日志
docker-compose logs -f
重启
docker-compose restart
六、常用场景
运行MySQL
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql:/var/lib/mysql \
mysql:5.7
运行Nginx
docker run -d \
--name nginx \
-p 80:80 \
-v /www:/usr/share/nginx/html \
nginx
运行Redis
docker run -d \
--name redis \
-p 6379:6379 \
redis:alpine
七、常见坑
坑1:容器启动后马上退出
原因: 容器没有前台进程。
解决: 加-it或者tail -f /dev/null。
坑2:端口映射不对
问题: 容器里跑的是80端口,映射成了8080:80。
解决: 确认容器内端口和宿主机端口。
坑3:数据丢失
问题: 容器删了数据就没了。
解决: 一定要挂载数据卷-v。
坑4:镜像太大
解决: 用alpine版本,比如redis:alpine。
八、命令速查表
| 功能 | 命令 |
|---|---|
| 查看运行中容器 | docker ps |
| 查看所有容器 | docker ps -a |
| 查看镜像 | docker images |
| 拉取镜像 | docker pull 镜像名 |
| 运行容器 | docker run -d --name 名字 -p 端口:端口 镜像 |
| 进入容器 | docker exec -it 名字 /bin/bash |
| 查看日志 | docker logs -f 名字 |
| 停止容器 | docker stop 名字 |
| 删除容器 | docker rm 名字 |
| 删除镜像 | docker rmi 镜像ID |
| 清理 | docker system prune -a |
总结
记住:
docker ps看容器docker images看镜像docker run启动容器docker exec -it进入容器docker logs -f看日志docker system prune清理
最常用:
docker ps
docker images
docker exec -it 容器名 /bin/bash
docker logs -f 容器名
遇到问题加QQ23979811 协助处理
Docker 常用命令大全
Docker 常用命令大全
Docker 现在开发必备,常用命令一定要熟练。
1. 镜像命令
查看本地镜像:
docker images
搜索镜像:
docker search nginx
拉取镜像:
docker pull nginx:latest
删除镜像:
docker rmi nginx:latest
删除所有镜像:
docker rmi $(docker images -q)
构建镜像:
# 在Dockerfile目录下
docker build -t myapp:1.0 .
2. 容器命令
查看运行中的容器:
docker ps
查看所有容器(包括停止的):
docker ps -a
启动容器:
docker run -d --name mynginx -p 80:80 nginx
参数说明:
- -d:后台运行
- --name:容器名
- -p:端口映射(主机:容器)
- -v:目录挂载
停止容器:
docker stop mynginx
启动已停止的容器:
docker start mynginx
重启容器:
docker restart mynginx
删除容器:
docker rm mynginx
强制删除运行中的容器:
docker rm -f mynginx
删除所有停止的容器:
docker container prune
3. 进入容器
进入容器命令行:
docker exec -it mynginx /bin/bash
退出容器:
exit
4. 日志查看
查看容器日志:
docker logs mynginx
实时查看日志:
docker logs -f mynginx
查看最近100行日志:
docker logs --tail 100 mynginx
5. 文件操作
从主机复制到容器:
docker cp index.html mynginx:/usr/share/nginx/html/
从容器复制到主机:
docker cp mynginx:/etc/nginx/nginx.conf ./
6. 容器信息
查看容器详情:
docker inspect mynginx
查看容器端口映射:
docker port mynginx
查看容器资源使用:
docker stats
7. 数据卷
创建数据卷:
docker volume create mydata
查看数据卷:
docker volume ls
使用数据卷:
docker run -d -v mydata:/data nginx
8. 网络
查看网络:
docker network ls
创建网络:
docker network create mynet
容器加入网络:
docker network connect mynet mynginx
9. 其他常用
查看Docker版本:
docker version
查看Docker信息:
docker info
清理无用资源:
docker system prune
10. 常用组合
启动一个PHP环境:
docker run -d --name php \
-p 8080:80 \
-v /www:/var/www/html \
php:apache
启动MySQL:
docker run -d --name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql:/var/lib/mysql \
mysql:5.7
启动Redis:
docker run -d --name redis \
-p 6379:6379 \
redis:latest
总结
Docker 常用命令要点:
- docker images 看镜像
- docker ps 看容器
- docker run 启动容器
- docker exec 进入容器
- docker logs 看日志
- docker cp 复制文件
- docker stats 看资源
- -d 后台运行
- -p 端口映射
- -v 目录挂载
Docker 命令熟练了,开发部署效率提升很多。
Docker 查看容器日志
Docker 查看容器日志
容器出问题怎么排查?先看日志,这些命令要会。
1. 查看容器日志
基本命令
# 查看全部日志
docker logs 容器名
# 查看容器ID
docker logs 容器ID
2. 常用参数
看最后几行
# 最后10行
docker logs --tail 10 容器名
# 最后20行
docker logs --tail 20 容器名
实时跟踪日志(最常用)
docker logs -f 容器名
带时间戳
docker logs -t 容器名
组合使用
# 实时跟踪 + 时间戳 + 最后10行
docker logs -f -t --tail 10 容器名
3. 按时间查看
# 最近10分钟的日志
docker logs --since 10m 容器名
# 最近1小时的日志
docker logs --since 1h 容器名
# 指定时间开始
docker logs --since "2024-01-01T00:00:00" 容器名
4. 多容器日志
docker-compose 查看日志
# 查看所有服务日志
docker-compose logs
# 实时跟踪
docker-compose logs -f
# 查看指定服务
docker-compose logs nginx
# 看最后50行
docker-compose logs --tail 50 nginx
5. 日志持久化
json-file 日志驱动(默认)
- 日志存在 /var/lib/docker/containers/
- 单个容器日志文件
配置日志大小限制
# docker-compose.yml
services:
app:
image: nginx
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
6. 常见排查场景
1)容器启动失败
docker logs 容器名
看最后几行报错信息。
2)接口报错
docker logs -f --tail 100 容器名
实时看请求日志。
3)查某个时间点的错误
docker logs --since "2024-01-01T10:00:00" 容器名 | grep "error"
7. 日志清理
清理单个容器日志
# 找到日志文件
sudo find /var/lib/docker/containers/ -name "*.log"
# 清空日志
sudo sh -c "echo > /var/lib/docker/containers/容器ID/容器ID-json.log"
重启容器自动清理
docker restart 容器名
总结
Docker 查看容器日志要点:
- docker logs 查看日志
- -f 实时跟踪最常用
- --tail 看最后几行
- -t 带时间戳
- --since 按时间查
- docker-compose logs 多容器
- 配置日志大小防止占满磁盘
- 排查问题先看日志
容器运维,看日志是第一步。
Dockerfile编写教程,构建自己的镜像
前言
想用Docker跑自己的项目,不能每次都手动装环境吧?写个Dockerfile,一键构建镜像。本文讲怎么写Dockerfile。
一、什么是Dockerfile
Dockerfile就是一个文本文件,里面写了怎么构建镜像的步骤。
就像写脚本一样,告诉Docker:
- 基于哪个基础镜像
- 装什么软件
- 复制什么文件
- 启动什么命令
二、基本结构
# 基于哪个镜像
FROM nginx:alpine
# 维护者信息
MAINTAINER yourname <email@xx.com>
# 工作目录
WORKDIR /usr/share/nginx/html
# 复制文件
COPY index.html .
# 暴露端口
EXPOSE 80
# 启动命令
CMD ["nginx", "-g", "daemon off;"]
三、常用指令
FROM:基础镜像
FROM nginx:alpine
FROM php:7.4-fpm
FROM mysql:5.7
WORKDIR:工作目录
WORKDIR /app
后面的命令都在这个目录里执行。
COPY:复制文件
COPY index.html /usr/share/nginx/html/
COPY ./src /app
RUN:构建时执行命令
RUN apt-get update && apt-get install -y vim
构建镜像的时候执行。
CMD:容器启动时执行
CMD ["nginx", "-g", "daemon off;"]
容器启动后跑的命令。
EXPOSE:暴露端口
EXPOSE 80
EXPOSE 443
只是声明,实际用的时候还要用-p映射。
ENV:设置环境变量
ENV MYSQL_ROOT_PASSWORD=123456
ENV APP_ENV=production
VOLUME:数据卷
VOLUME ["/var/lib/mysql"]
四、实战例子
例子1:部署静态网站
FROM nginx:alpine
WORKDIR /usr/share/nginx/html
COPY index.html .
COPY about.html .
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
例子2:部署PHP项目
FROM php:7.4-fpm
WORKDIR /var/www/html
COPY . .
RUN docker-php-ext-install mysqli pdo pdo_mysql
EXPOSE 9000
CMD ["php-fpm"]
例子3:Python应用
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
五、构建镜像
构建命令
docker build -t mynginx:v1 .
-t给镜像起名字和标签.当前目录找Dockerfile
查看构建过程
docker build --progress=plain -t mynginx:v1 .
指定Dockerfile路径
docker build -f docker/Dockerfile -t mynginx:v1 .
六、常用优化技巧
1. 用小镜像
用alpine版本,小很多:
FROM nginx:alpine
2. 合并RUN命令
RUN apt-get update && \
apt-get install -y vim wget && \
rm -rf /var/lib/apt/lists/*
不要写多个RUN,合并成一个,减少层数。
3. .dockerignore文件
不想复制的文件写在.dockerignore里:
.git
node_modules
*.log
4. 多层缓存
把不变的放前面,变的放后面。
# 先复制requirements.txt,装依赖(这个不常变)
COPY requirements.txt .
RUN pip install -r requirements.txt
# 再复制代码(这个常变)
COPY . .
七、常见坑
坑1:Dockerfile文件名不对
必须叫 Dockerfile,首字母大写,没有后缀。
坑2:构建时找不到文件
docker build -t mynginx:v1 .
最后那个点不能少,是构建上下文。
坑3:COPY路径不对
COPY index.html .
这个路径是相对于构建上下文的,不是Dockerfile所在目录。
坑4:CMD和RUN搞混
RUN是构建镜像的时候跑CMD是容器启动的时候跑
坑5:镜像太大
用alpine版本,或者多阶段构建。
八、多阶段构建
# 构建阶段
FROM node:16 AS build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
# 生产阶段
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
这样最终镜像很小,只有编译后的文件。
总结
记住:
FROM基础镜像WORKDIR工作目录COPY复制文件RUN构建时执行CMD启动时执行docker build -t 名字 .构建镜像
最常用:
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
遇到问题加QQ23979811 协助处理
Docker 常用命令汇总
Docker 常用命令汇总
Docker 现在是开发必备工具,整理一份常用命令清单,记不住随时翻。
1. 镜像管理
# 查看本地镜像
docker images
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 删除镜像
docker rmi nginx:latest
# 导出镜像
docker save -o nginx.tar nginx:latest
# 导入镜像
docker load -i nginx.tar
2. 容器管理
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 启动容器
docker start nginx
# 停止容器
docker stop nginx
# 重启容器
docker restart nginx
# 删除容器
docker rm nginx
# 强制删除运行中的容器
docker rm -f nginx
3. 运行容器
# 后台运行 nginx
docker run -d --name mynginx -p 80:80 nginx
# 参数说明:
# -d:后台运行
# --name:容器名
# -p:端口映射(主机:容器)
# -v:目录挂载(主机:容器)
# 进入容器内部
docker exec -it mynginx bash
# 查看容器日志
docker logs mynginx
# 实时查看日志
docker logs -f mynginx
4. 查看容器信息
# 查看容器详细信息
docker inspect mynginx
# 查看容器占用资源
docker stats
# 查看容器端口映射
docker port mynginx
5. 数据卷
# 创建数据卷
docker volume create mydata
# 查看所有数据卷
docker volume ls
# 挂载数据卷运行容器
docker run -d -v mydata:/data nginx
# 删除数据卷
docker volume rm mydata
6. Docker Compose
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
docker-compose.yml 示例:
version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
7. 清理命令
# 删除所有停止的容器
docker container prune
# 删除所有无用镜像
docker image prune -a
# 删除所有无用数据卷
docker volume prune
# 一键清理所有无用资源
docker system prune -a
总结
Docker 常用命令就这几类:
- 镜像: pull / images / rmi
- 容器: run / ps / stop / rm / exec
- 日志: logs / stats
- Compose: up / down
日常开发把这些命令用熟就够了,不用背,多敲几次自然记住。
Docker 常用命令大全
Docker 常用命令大全
Docker 命令不多,但记不住还是很麻烦。整理一份常用命令清单,收藏备用。
1. 镜像命令
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
# 搜索镜像
docker search nginx
# 导出镜像
docker save -o nginx.tar nginx:latest
# 导入镜像
docker load -i nginx.tar
2. 容器命令
# 启动容器(后台运行)
docker run -d --name mynginx -p 80:80 nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop mynginx
# 启动已停止的容器
docker start mynginx
# 重启容器
docker restart mynginx
# 删除容器
docker rm mynginx
# 强制删除运行中的容器
docker rm -f mynginx
3. 进入容器
# 进入容器(bash)
docker exec -it mynginx bash
# 进入容器(sh)
docker exec -it mynginx sh
# 查看容器日志
docker logs mynginx
# 实时查看日志
docker logs -f mynginx
# 查看容器详情
docker inspect mynginx
4. 文件操作
# 从容器复制文件到宿主机
docker cp mynginx:/etc/nginx/nginx.conf ./
# 从宿主机复制文件到容器
docker cp ./index.html mynginx:/usr/share/nginx/html/
5. 端口和网络
# 查看容器端口映射
docker port mynginx
# 查看容器 IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx
6. 清理命令
# 停止所有容器
docker stop $(docker ps -q)
# 删除所有停止的容器
docker container prune
# 删除所有未使用的镜像
docker image prune
# 删除所有未使用的资源(危险操作)
docker system prune -a
7. Docker Compose 常用命令
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose down
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重启某个服务
docker-compose restart nginx
总结
Docker 常用命令核心:
- 镜像:pull / images / rmi
- 容器:run / ps / stop / start / rm
- 进入:exec -it
- 日志:logs -f
- 清理:prune
记住这些,日常 Docker 操作基本够用了。
Docker 网络模式详解
Docker 四种网络模式详解
Docker 网络是容器通信的基础,搞懂四种网络模式,容器网络就不会乱。
1. bridge 模式(默认)
这是 Docker 默认的网络模式。容器在一个虚拟的 bridge 网络里,每个容器有自己的虚拟 IP,通过 NAT 访问外部网络。
# 启动容器,默认就是 bridge
docker run -d nginx
# 查看容器 IP
docker inspect 容器ID | grep IPAddress
特点:
- 容器之间可以通过 IP 互相访问
- 外部访问需要端口映射
- 适合大多数场景
2. host 模式
容器直接用宿主机的网络,没有独立的网络栈。
docker run -d --net=host nginx
特点:
- 网络性能最好,没有 NAT 开销
- 端口直接用宿主机的,不用映射
- 多个容器不能用同一个端口
适合对性能要求高的场景。
3. none 模式
容器没有网络,完全隔离。
docker run -d --net=none nginx
特点:
- 没有任何网络
- 安全级别最高
- 适合不需要网络的离线计算任务
4. container 模式
新创建的容器和一个已存在的容器共享网络。
docker run -d --net=container:nginx容器ID redis
特点:
- 两个容器共享网络栈
- 可以用 localhost 互相访问
- 适合紧密配合的服务
5. 自定义网络
生产环境推荐用自定义网络,不用默认的 bridge:
# 创建自定义网络
docker network create mynet
# 容器加入自定义网络
docker run -d --net=mynet --name web nginx
docker run -d --net=mynet --name app php
同一个自定义网络里的容器,可以直接用容器名互相访问,不用记 IP。
总结
四种网络模式各有适用场景:
- 日常开发用默认 bridge
- 性能要求高用 host
- 安全要求高用 none
- 容器间通信密集用自定义网络
搞懂这四种模式,Docker 网络基本就够用了。
Docker Compose 实战
Docker Compose 一键部署多容器
Docker Compose 可以用一个 YAML 文件定义和运行多个 Docker 容器,开发环境部署特别方便。
1. 基本结构
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
2. 常用命令
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止并删除容器
docker-compose down
# 重启某个服务
docker-compose restart web
3. PHP 开发环境示例
version: '3'
services:
php:
build: .
ports:
- "8000:80"
volumes:
- ./:/var/www/html
depends_on:
- mysql
- redis
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
mysql_data:
4. 数据卷
数据卷用来持久化数据,容器删了数据还在:
volumes:
- ./data:/var/lib/mysql
5. 网络
默认同一 Compose 里的服务在同一个网络,可以直接用服务名互相访问。比如 PHP 容器里连数据库用 mysql:3306,不用写 IP。
总结
Docker Compose 适合本地开发和测试环境。生产环境部署建议用 K8s 或者更专业的编排工具。
Docker 入门:从容器到 Compose 的实战教程
前言
Docker 现在已经是后端开发的标配工具了。很多人听说过 Docker,但不知道它到底是什么、怎么用。本文用最通俗的方式,带你从零开始掌握 Docker 的核心用法。
一、Docker 是什么
简单来说,Docker 就是把你的应用和它依赖的所有东西(代码、运行时、系统库、配置文件)打包到一个"集装箱"里,然后这个集装箱可以在任何机器上运行。
和虚拟机的区别:虚拟机是模拟一整套操作系统,Docker 容器是共享宿主机的内核,所以更轻量、启动更快。
二、核心概念
- 镜像(Image):相当于模板,只读的,用来创建容器
- 容器(Container):镜像运行起来的实例,可以创建、启动、停止、删除
- Dockerfile:用来构建镜像的脚本文件
- 仓库(Registry):存放镜像的地方,比如 Docker Hub
三、常用命令
1. 镜像操作
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
2. 容器操作
# 运行容器
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 查看容器日志
docker logs my-nginx
# 进入容器内部
docker exec -it my-nginx /bin/bash
关键参数说明:
-d:后台运行-p 80:80:端口映射,宿主机端口:容器端口--name:给容器起个名字
四、Dockerfile 实战
写一个简单的 PHP 应用镜像:
# 基于 PHP 官方镜像
FROM php:7.4-fpm
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件
COPY . .
# 安装依赖
RUN docker-php-ext-install pdo_mysql
# 暴露端口
EXPOSE 9000
# 启动命令
CMD ["php-fpm"]
构建镜像:
docker build -t my-php-app .
运行容器:
docker run -d -p 9000:9000 my-php-app
五、Docker Compose 实战
当你需要同时运行多个容器(比如 PHP + MySQL + Nginx),手动一个个启动太麻烦了。Docker Compose 就是用来编排多个容器的。
创建 docker-compose.yml 文件:
version: '3'
services:
# PHP 应用
app:
build: .
container_name: php-app
volumes:
- ./:/var/www/html
networks:
- app-network
# MySQL 数据库
db:
image: mysql:5.7
container_name: mysql-db
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
- dbdata:/var/lib/mysql
networks:
- app-network
# Nginx 反向代理
nginx:
image: nginx:alpine
container_name: nginx-web
ports:
- "80:80"
volumes:
- ./:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- app-network
volumes:
dbdata:
networks:
app-network:
driver: bridge
启动所有服务:
docker-compose up -d
停止所有服务:
docker-compose down
六、常见问题
1. 容器启动后立刻退出
通常是因为启动命令有问题。用 docker logs 查看日志:
docker logs container_name
2. 数据持久化
容器删除后数据就没了,需要用 volumes 来持久化:
docker run -v /host/path:/container/path mysql
3. 进入容器排查问题
docker exec -it container_name /bin/bash
总结
Docker 的核心思路:
- 镜像:打包应用和依赖
- 容器:镜像的运行实例
- Dockerfile:构建镜像的脚本
- Docker Compose:多容器编排
掌握这些,你就可以用 Docker 来部署你的 Web 应用了。Docker 最大的好处就是"一次构建,到处运行",再也不会出现"我电脑上是好的"这种问题了。