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看实时资源。运维先列清单确认状态和端口,再决定停止、重启或排查,避免凭印象操作容器。


emer 发布于  2026-10-19 07:36 

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掌握磁盘占用。


emer 发布于  2026-10-19 07:30 

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、前端打包等场景,生产环境镜像尽量使用多阶段构建,减小体积提升部署效率。


emer 发布于  2026-10-18 07:16 

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

总结

记住:

  1. docker ps看容器
  2. docker images看镜像
  3. docker run启动容器
  4. docker exec -it进入容器
  5. docker logs -f看日志
  6. docker system prune清理

最常用:

docker ps
docker images
docker exec -it 容器名 /bin/bash
docker logs -f 容器名

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:53 

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 命令熟练了,开发部署效率提升很多。


emer 发布于  2026-10-9 07:33 

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 多容器
  • 配置日志大小防止占满磁盘
  • 排查问题先看日志

容器运维,看日志是第一步。


emer 发布于  2026-10-9 07:18 

Dockerfile编写教程,构建自己的镜像

前言

想用Docker跑自己的项目,不能每次都手动装环境吧?写个Dockerfile,一键构建镜像。本文讲怎么写Dockerfile。

一、什么是Dockerfile

Dockerfile就是一个文本文件,里面写了怎么构建镜像的步骤。

就像写脚本一样,告诉Docker:

  1. 基于哪个基础镜像
  2. 装什么软件
  3. 复制什么文件
  4. 启动什么命令

二、基本结构

# 基于哪个镜像
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

这样最终镜像很小,只有编译后的文件。

总结

记住:

  1. FROM 基础镜像
  2. WORKDIR 工作目录
  3. COPY 复制文件
  4. RUN 构建时执行
  5. CMD 启动时执行
  6. docker build -t 名字 . 构建镜像

最常用:

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:23 

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

日常开发把这些命令用熟就够了,不用背,多敲几次自然记住。


emer 发布于  2026-10-7 07:12 

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 操作基本够用了。


emer 发布于  2026-10-4 11:07 

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 网络基本就够用了。


emer 发布于  2026-10-4 10:44 

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 或者更专业的编排工具。


emer 发布于  2026-10-4 10:32 

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 的核心思路:

  1. 镜像:打包应用和依赖
  2. 容器:镜像的运行实例
  3. Dockerfile:构建镜像的脚本
  4. Docker Compose:多容器编排

掌握这些,你就可以用 Docker 来部署你的 Web 应用了。Docker 最大的好处就是"一次构建,到处运行",再也不会出现"我电脑上是好的"这种问题了。


emer 发布于  2026-10-4 10:02 
'); })();