ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Docker Cheat Sheet:覆盖镜像、容器、网络、卷与 Compose 的日常高频命令速查指南

Docker Cheat Sheet:覆盖镜像、容器、网络、卷与 Compose 的日常高频命令速查指南 Docker Cheat Sheet覆盖镜像、容器、网络、卷与 Compose 的日常高频命令速查指南【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refineDocker 已成为开发者日常构建、打包与部署应用的标配工具而精通常用的 CLI 命令是高效驾驭容器化工作流的前提。本文以 Refine 开源仓库一个用于构建内部工具、后台面板与 B2B 应用的 React 框架中收录的 Docker 速查文档为主体系统梳理镜像管理、容器生命周期、网络配置、数据卷管理、Compose 编排与系统清理等高频命令并结合仓库内真实的多阶段构建 Dockerfile 与 Helm 部署配置给出可直接复制运行的命令与输出示例。读完本文你将掌握绝大多数日常开发中高频使用的 Docker 命令并能对照真实项目理解镜像构建与镜像引用的落地方式。安装与配置 Docker按操作系统安装Docker 的安装命令因操作系统而异Ubuntu/Debiansudo apt-get install docker-ceCentOS/RHELsudo yum install dockerWindows/macOS安装 Docker Desktop 即可获得包含 CLI、守护进程与图形界面的完整环境专家提示执行 Docker 命令需要相应权限。如果当前用户不属于docker组则必须使用sudo前缀或者将用户加入docker组后重新登录以避免每次命令都附加sudo。校验安装与版本安装完成后可用docker --version验证安装是否成功并查看版本号$ docker --version Docker version 20.10.5, build 55c4c88版本号中的build字段可用于精确追溯你正在使用的引擎构建版本便于排查引擎自身的行为差异。镜像Images管理镜像是容器的只读模板下面是与镜像相关的四个高频命令。搜索镜像在 Docker Hub 上搜索镜像使用docker search image-name。例如搜索 Ubuntu 相关镜像$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 11486 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 438 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 246 [OK] consol/ubuntu-xfce-vnc Ubuntu container with headless VNC session… 240 [OK]输出中的STARS表示镜像热度OFFICIAL标记官方镜像AUTOMATED表示该镜像由自动化构建流程维护。一般优先选择官方镜像OFFICIAL列为[OK]。拉取镜像从 Docker Hub 下载镜像使用docker pull image-name未指定 tag 时默认拉取latest$ docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu Digest: sha256:adf73ca014822ad8237623d388cedf4d5346aa72c270c5acc01431cc93e18e2ba Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latestDigest是镜像内容的加密摘要可作为不可变引用在 CI/CD 与生产部署中固定使用 digest 而非浮动 tag 可显著提升可复现性与供应链安全性。列出本地镜像查看本机已下载的全部镜像使用docker images$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 4e5021d210f6 2 weeks ago 64.2MB输出包含仓库名REPOSITORY、标签TAG、镜像 ID、创建时间与大小方便评估磁盘占用。删除本地镜像删除本地镜像使用docker rmi image-name$ docker rmi ubuntu Untagged: ubuntu:latest Untagged: ubuntusha256:adf73ca014822ad8237623d388cedf4d5346aa72c270c5acc01431cc93e18e2ba Deleted: sha256:4e5021d210f6a5119055cfb8e6c5e34be10e23a3db291c6a695f2c9cc40a8a66 Deleted: sha256:0b1edfbffd27c935a66664f7a4e3b25c2fc8a5739fa5e640b1768b129a2f60a9注意Untagged表示解除标签引用而Deleted才是真正回收镜像层。如果镜像仍被运行中的容器引用需要先停止并删除容器。容器Containers生命周期管理容器是镜像的运行实例以下命令覆盖容器的启动、查看、停止与删除。运行容器docker run options image-name从镜像启动新容器。经典示例$ docker run -d -p 80:80 nginx Unable to find image nginx:latest locally latest: Pulling from library/nginx Digest: sha256:23b4dcdf0d34d4a129755fc6f52e1c6e23bb34ea011b315d87e193033bcd1b68 Status: Downloaded newer image for nginx:latest d9a23308c7d2e5c0aadd7813de3c5b7a3c3a7a2b2b1bbe1a3ab3e6f6e0a2e020参数含义-ddetached让容器在后台运行-p 80:80将容器内 80 端口映射到宿主机的 80 端口格式为宿主机端口:容器端口。若本地没有该镜像Docker 会自动执行拉取。列出运行中的容器docker ps列出当前正在运行的容器$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d9a23308c7d2 nginx /docker-entrypoint.… 36 seconds ago Up 35 seconds 0.0.0.0:80-80/tcp, :::80-80/tcp serene_leavitt列出全部容器含已停止docker ps -a额外包含已退出的容器方便找回历史容器$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d9a23308c7d2 nginx /docker-entrypoint.… 36 seconds ago Up 35 seconds 80/tcp serene_leavitt 45a1529327b2 ubuntu /bin/bash 2 days ago Exited (0) 2 days ago nostalgic_morseSTATUS列中的Exited (0)表示容器以退出码 0 正常结束非 0 退出码则通常意味着运行出错。停止容器docker stop container-id优雅停止容器先发 SIGTERM超时后再发 SIGKILL$ docker stop d9a23308c7d2 d9a23308c7d2删除容器docker rm container-id删除已停止的容器运行中的容器会报错需先 stop$ docker rm d9a23308c7d2 d9a23308c7d2Docker 网络Docker 自带bridge、host、none三种内置网络驱动可满足大多数容器间通信需求。列出网络docker network ls展示所有网络及其驱动$ docker network ls NETWORK ID NAME DRIVER SCOPE 7fca4eb8c647 bridge bridge local 9f904ee27bf5 host host local cf03ee007fb4 none null localbridge默认网络容器通过虚拟网桥互相通信host容器直接共享宿主机网络栈不进行端口映射none容器无网络接口。检查网络详情docker network inspect network-name以 JSON 格式输出网络的详细配置$ docker network inspect bridge [ { Name: bridge, Id: 7fca4eb8c647e57e9d46c32714271e0c3fa6ed54945f675632e65b2ff97d4e6a, Created: 2021-02-18T20:46:38.3253083Z, Scope: local, Driver: bridge, EnableIPv6: false, IPAM: { Driver: default, Options: null, Config: [ { Subnet: 172.17.0.0/16, Gateway: 172.17.0.1 } ] }, Internal: false, Attachable: false, Ingress: false, ConfigFrom: { Network: }, ConfigOnly: false, Containers: {}, Options: { com.docker.network.bridge.default_bridge: true, com.docker.network.bridge.enable_icc: true, com.docker.network.bridge.enable_ip_masquerade: true, com.docker.network.bridge.host_binding_ipv4: 0.0.0.0, com.docker.network.bridge.name: docker0, com.docker.network.driver.mtu: 1500 }, Labels: {} } ]该输出可用来排查容器 IP 分配IPAM子网、网桥设备名com.docker.network.bridge.name默认docker0、MTU 以及Containers字段中当前挂接的容器列表。创建自定义网络docker network create network-name创建新网络返回其 ID$ docker network create my_network 82b1d35f5d92f3a63f9062c2bea2afea2200b627b1c72c8ed835e4c8d80f0a6e自定义网络默认使用bridge驱动支持基于容器名的 DNS 解析多容器应用例如前端容器与后端容器在同一自定义网络中可通过服务名互相访问无需依赖固定 IP。卷Volumes与数据管理容器销毁后其可写层中的数据随之丢失卷volume是 Docker 推荐的持久化方案。创建卷docker volume create my-volume执行后输出卷名即表示创建成功my-volume列出卷docker volume ls列出系统当前注册的全部卷docker volume ls输出中每一行代表一个卷包含驱动DRIVER与卷名VOLUME NAMEDRIVER VOLUME NAME local my-volume检查卷详情docker volume inspect volume-name以 JSON 输出卷的宿主机挂载点、标签与选项docker volume inspect my-volume[ { CreatedAt: 2024-02-08T09:29:00Z, Driver: local, Labels: {}, Mountpoint: /var/lib/docker/volumes/my-volume/_data, Name: my-volume, Options: {}, Scope: local } ]其中Mountpoint是卷数据在宿主机上的实际存放路径默认驱动local下通常位于/var/lib/docker/volumes/卷名/_data可用于备份与数据迁移。运行容器时可通过-v my-volume:/data将卷挂载到容器内目录。Docker Compose 与 DockerfileCompose 用于以声明式 YAML 编排多容器应用Dockerfile 则用于定义镜像的构建步骤。启动 Compose 服务在包含docker-compose.yml的目录中执行docker-compose up将按配置启动全部服务docker-compose up输出为各容器的启动日志Starting db ... done Starting web ... done版本提示自 Docker Compose 1.28.0 起带连字符的docker-compose命令逐渐被不带连字符的docker compose取代作为 Docker 功能整合的一部分。新项目建议直接使用docker compose up。如需后台运行可加-d参数docker compose up -d需要重建镜像时追加--build。停止并移除 Compose 服务docker-compose down停止全部服务并移除对应容器默认同时删除由 compose 创建的网络-v参数可进一步删除卷docker-compose downStopping web ... done Stopping db ... done Removing web ... done Removing db ... done从 Dockerfile 构建镜像docker build -t tag context基于当前目录的 Dockerfile 构建镜像-t指定镜像名与标签docker build -t my-image .输出展示构建各步骤的执行状态Sending build context to Docker daemon 2.048kB Step 1/3 : FROM alpine:latest --- e7d92cdc71fe Step 2/3 : RUN apk add --no-cache python3 py3-pip --- Using cache --- 3cf235f6a938 Successfully built 3cf235f6a938 Successfully tagged my-image:latest--no-cache可强制跳过层缓存全量重建Step 1/3表明 Dockerfile 共有 3 个指令每一层都会生成一个中间镜像 ID。仓库实战多阶段构建示例本仓库自身就是 Docker 多阶段构建的典型实践可对照理解docker build的工程化用法。examples/store/Dockerfile 展示了 Refine 电商示例Next.js 应用的三阶段构建FROM refinedev/node:18 AS base ENV PNPM_HOME/pnpm ENV PATH$PNPM_HOME:$PATH RUN corepack enable ENV CI true FROM base AS deps COPY package.json pnpm-lock.yaml .npmrc ./ RUN --mounttypecache,idpnpm,target/pnpm/store pnpm install --frozen-lockfile --ignore-scripts FROM base AS builder COPY --fromdeps /app/refine/node_modules ./node_modules COPY . . RUN --mounttypecache,idpnpm,target/pnpm/store pnpm install --frozen-lockfile --ignore-scripts RUN pnpm run build --scope store --skipNxCache FROM base AS runner ENV NODE_ENV production COPY --frombuilder /app/refine/examples/store/public ./public COPY --frombuilder --chownrefine:nodejs /app/refine/examples/store/.next/standalone ./ COPY --frombuilder --chownrefine:nodejs /app/refine/examples/store/.next/static ./examples/store/.next/static USER refine EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME 0.0.0.0 CMD [node, ./examples/store/server.js]该文件清晰地体现了三个构建要点多阶段构建AS base/AS deps/AS builder/AS runner依赖安装、应用构建、运行阶段分离最终runner阶段仅拷贝构建产物镜像体积大幅缩减COPY --fromdeps跨阶段拷贝将依赖阶段安装好的node_modules复制到构建阶段避免重复安装EXPOSE 3000与CMD声明容器监听端口与默认启动命令运行时可配合-p 3000:3000进行端口映射。examples/with-material-ui-vite/Dockerfile 则展示了 Vite 静态站点的构建方式同样采用多阶段构建builder阶段执行npm run build产出静态资源runner阶段通过npm install -g serve安装 serve 静态文件服务器该文件注释中还提到了对应的 nginx 版 Dockerfile 获取方式最终以CMD [serve]启动。这种构建产物 轻量 Web 服务器的模式适合所有静态化部署的前端应用。系统清理长时间运行 Docker 会积累大量无用对象占用磁盘空间。清理未使用的 Docker 对象docker system prune一键清理未使用的容器、网络、镜像悬空镜像与构建缓存docker system prune输出会汇总本次释放的磁盘空间Total reclaimed space: 1.24GB如需更彻底的清理连同未使用的卷一起删除可使用docker system prune -a --volumes。注意该命令会删除所有未被容器引用的卷执行前务必确认卷中的数据已有备份。仓库实战容器化镜像在生产环境中的引用方式本仓库的文档站点本身也是以容器化方式部署的其 Helm Chart 配置位于 documentation/k8s/refine-documentation/values.yaml其中image字段展示了生产环境镜像引用的标准写法image: repository: ghcr.io/refinedev/refine/refine-documentation pullPolicy: IfNotPresentrepository指向容器镜像仓库中的镜像名这里是 GHCR 上的refine-documentation镜像pullPolicy: IfNotPresent表示本地已存在镜像时不再重复拉取与docker pull的默认行为一致镜像在 Kubernetes 中的拉取与运行流程本质上就是docker pull、docker run这些命令在集群环境下的托管化实现。结合该 Helm 配置中的serviceClusterIP、端口 80、ingress与 HPA 等字段可以直观理解镜像构建完成docker build并推送docker push到镜像仓库后集群通过声明式配置拉取镜像并调度容器——这正是 Docker 命令在真实生产链路中的最终去向。结论镜像、容器、网络、卷、Compose 与系统清理是 Docker 日常操作中最高频的几类命令。本文不仅覆盖了每个命令的语法、参数与典型输出还结合 Refine 仓库内真实的多阶段 Dockerfileexamples/store/Dockerfile、examples/with-material-ui-vite/Dockerfile与生产 Helm 配置documentation/k8s/refine-documentation/values.yaml展示了这些命令在真实项目中的落地形态。将本文作为速查手册收藏日常操作时随查随用即可显著提升容器化应用的开发与运维效率。【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表