Docker 常用操作命令备忘

Docker 一旦设置好了环境,日常就只要使用简单命令就可以运行和停止。
于是,我每次用的时候,都想不起来一些关键性的命令到底怎么用,特此记录。

一、镜像管理

从公有仓库拉取镜像
(对于使用苹果电脑 M1/M2/M3 芯片的 MBP 来说,注意后面的 --platform 参数:
docker pull redis:7.0.5-alpine3.16 --platform linux/amd64
查看本地的镜像
docker images
删除一个本地镜像
docker image rm <REPOSITORY>:<TAG>
二、容器管理




查看本地的所有容器
docker container ls --all
docker ps -a
给本地镜像打上一个 tag
docker tag redis:7.0.5-alpine3.16 registry.selfhost.com/redis:7.0.5-alpine3.16
将镜像推送到私有仓库
docker push registry.selfhost.com/redis:7.0.5-alpine3.16
连接一个正在运行的 container
docker exec -it <CONTAINER-ID> /bin/sh
⚠️ 注意:使用 Apple Silicon 的 MacBook Pro (M1/2) 时候,docker 命令,默认拉取的镜像,构建的镜像,都是 linux/arm64/v8 的,但是,服务器开发的运行环境往往是 linux/amd64 的,注意交叉编译的问题。
三、Dockerfile

ADD 指令和 COPY 指令有什么异同?
ADD 指令和 COPY 指令有一些重叠,都是将一个文件从源路径复制到目的路径。不过 ADD 指令会有更多的内涵。
如果源路径是一个网址的话,ADD 指令会下载文件,如果源路径是一个压缩包的话,ADD 指令会解压缩。
最佳实践里,建议尽量使用 COPY 指令而不是 ADD 指令,因为 COPY 指令有更明确的功能。
一般建议,在解压缩的场景使用 ADD 指令,其他场景都是用 COPY 指令。
ENTRYPOINT 和 CMD 有什么异同?
今天我在看 Docker Hub 的一个镜像的代码,发现 Dockerfile 里同时指定了 ENTRYPOINT 和 CMD 两个指令,我没有细细研读过 Docker 的手册,不过看代码,以及看字面意思,就觉得这两个仿佛重复了。
放狗一搜,才知道,这两个指令的用途真的是一样的。如果在 Dockerfile 两个都不指定,则 docker run 默认不能自动运行镜像,必须指定一个命令。两者只指定一个,docker run 就可以不指定命令自动运行。不过仍然有细微的差别。
首先,ENTRYPOINT 的执行在 CMD 执行的前面。第二,CMD 命令,更容易被“覆盖”,docker run 如果后面带上命令的话,会覆盖 CMD;不过 ENTRYPOINT 指令的内容也可以覆盖,却是用参数 --entrypoint 来进行覆盖。第三,如果两个命令都存在的话,容器启动后,会用将两个命令的内容拼成一个,再执行。
这种设计会给容器的启动带来一些灵活性。
在 Alpine 中,如何定位问题
Alpine 是一个极简的操作系统,各种 Linux 发行版常见的命令,里面都是缺乏的,我试过了,如果不特意去安装的话,里面 vi 倒是有,其他什么都没有,比如 curl,ss,ip 等等命令,几乎都没有。
apk add iputils 可以安装 ip 和 ss 命令,用于查看 ip 地址,侦听端口等,便于开发时候调试用。
三、docker-compose.yml
docker-compose 主要用于容器编排,我们在生产环境,主要使用 K8S 或者类似的实现来完成容器编排。不过在本地环境下,也就是我们自己的开发机上,如果想实现容器编排,使用 docker-compose 是比较简单的一种方式。
常见的使用场景
- 搭建开发环境
- 自动化搭建测试环境
- 单主机部署
command 指令
这个指令根据我理解,是可以覆盖 Dockerfile 中指定的 CMD 内容的,不过也只能出现一次。
四、常用镜像
PHP
最近,我在恢复练习我 PHP 的开发能力,这次我搭建环境采用 Docker 实现。
在本地启动一个 PHP 环境,最简单的办法是采用 PHP 官方提供的镜像,官方镜像制作精良,小巧精悍,强于自己胡乱构建一个。
官方镜像包含了一些特殊的命令:
- docker-php-source
- docker-php-ext-install
- docker-php-ext-enable
- docker-php-ext-configure
docker-php-source
创建 PHP 源代码目录,主要是为了一些必须编译扩展的场景,需要依赖 PHP 的源代码。
docker-php-source extract | delete
这个命令提供两个子指令,顾名思义,就是解压缩和删除。
docker-php-ext-install
安装一些官方注册过的扩展,比如我这次要调试一个 PHP 应用,默认的 php-apache 镜像中,竟然没有 pdo_mysql 扩展,这其实就是一个官方维护的扩展,在 PHP 的源码里面,通过编译参数开启的。
可以使用:
docker-php-ext-install mysql pdo_mysql
实现安装。
docker-php-ext-configure
需要编译安装的情况,这个指令用来完成编译配置。
下面是一个例子:
FROM php:7.1-fpm
RUN apt-get update \# 相关依赖必须手动安装&& apt-get install -y \libfreetype6-dev \libjpeg62-turbo-dev \libmcrypt-dev \libpng-dev \# 安装扩展&& docker-php-ext-install -j$(nproc) iconv mcrypt \# 如果安装的扩展需要自定义配置时&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \&& docker-php-ext-install -j$(nproc) gd
docker-php-ext-enable
如果有已经安装好的扩展,可以使用这个命令进行激活。
docker-php-ext-install
安装编译好的扩展。
参考
Dockerfile: ENTRYPOINT 和 CMD 的区别 英文版
Dockerfile 最佳实践 英文版
Docker PHP安装扩展步骤详解
The Ultimate Docker Cheat Sheet
相关文章:
Docker 常用操作命令备忘
Docker 一旦设置好了环境,日常就只要使用简单命令就可以运行和停止。 于是,我每次用的时候,都想不起来一些关键性的命令到底怎么用,特此记录。 一、镜像管理 从公有仓库拉取镜像 (对于使用苹果电脑 M1/M2/M3 芯片的 …...
BUU [CISCN2019 华东南赛区]Web4
BUU [CISCN2019 华东南赛区]Web4 题目描述:Click to launch instance. 开题: 点击链接,有点像SSRF 使用local_file://协议读到本地文件,无法使用file://协议读取,有过滤。 local_file://协议: local_file…...
【卷积神经网络中用1*1 卷积有什么作用或者好处呢?】
🚀 作者 :“码上有前” 🚀 文章简介 :深度学习 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 1*1 卷积有什么作用或者好处呢 作用降维和增加非线性特征组合和交互网络的宽度和深度调整全连接替代增强…...
分布式系统概念及其应用
分布式系统概念及其应用 随着互联网的飞速发展,数据量和计算需求不断增加,传统的集中式系统已经无法满足这些需求。因此,分布式系统应运而生,它通过将计算任务分散到多台计算机上,实现高效的计算和存储。本文将介绍分…...
数据报文转换
报文转换 🍓JSON🍒🍒JSON多字段映射成一个实体对象🍒🍒JSON反序列化为一个带有泛型的JAVA类型 🍓xml 🍓JSON 🍒🍒JSON多字段映射成一个实体对象 <dependency><…...
Python爬虫-付费代理推荐和使用
付费代理的使用 相对免费代理来说,付费代理的稳定性更高。本节将介绍爬虫付费代理的相关使用过程。 1. 付费代理分类 付费代理分为两类: 一类提供接口获取海量代理,按天或者按量收费,如讯代理。 一类搭建了代理隧道࿰…...
kubectl使用及源码阅读
目录 概述实践样例yaml 中的必须字段 kubectl 代码原理kubectl 命令行设置pprof 抓取火焰图kubectl 中的 cobra 七大分组命令kubectl createcreateCmd中的builder模式createCmd中的visitor访问者模式外层VisitorFunc分析 结束 概述 k8s 版本 v1.24.16 kubectl的职责 1.主要的…...
C++面试宝典第32题:零钱兑换
题目 给定不同面额的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,则返回-1。说明:你可以认为每种硬币的数量是无限的。 示例1: 输入:coins = [1, 2, 5], amount = 11 输出:3 解释:11 = …...
pyspark分布式部署随机森林算法
前言 分布式算法的文章我早就想写了,但是一直比较忙,没有写,最近一个项目又用到了,就记录一下运用Spark部署机器学习分类算法-随机森林的记录过程,写了一个demo。 基于pyspark的随机森林算法预测客户 本次实验采用的…...
【Python笔记-设计模式】中介者模式
一、说明 中介者模式是一种行为设计模式,减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。 (一) 解决问题 降低系统中对象之间的直接通信,将复杂的交互转化为通过中介者进行的间接交…...
大语言模型构建的主要四个阶段(各阶段使用的算法、数据、难点以及实践经验)
大语言模型构建通常包含以下四个主要阶段:预训练、有监督微调、奖励建模和强化学习,简要介绍各阶段使用的算法、数据、难点以及实践经验。 预训练 需要利用包含数千亿甚至数万亿 单词的训练数据,并借助由数千块高性能 GPU 和高速网络组成的…...
[云原生] 二进制安装K8S(中)部署网络插件和DNS
书接上文,我们继续部署剩余的插件 一、K8s的CNI网络插件模式 2.1 k8s的三种网络模式 K8S 中 Pod 网络通信: (1)Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享…...
云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全
往期回顾: 云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述 云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板 云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装 云端技术驾驭…...
掌握Docker:让你的应用轻松部署和管理
文章目录 一、引言(为什么要学习docker?)1.1 环境不一致1.2 隔离性1.3 弹性伸缩1.4 学习成本 二、Docker介绍2.1 Docker的由来2.2 什么是Docker2.3 为什么要用Docker2.3.1 虚拟机2.3.2 Linux容器 2.4 Docker与传统虚拟机的区别2.5 Docker的思…...
5G-A,未来已来
目前,全国首个5G-A规模组网示范完成。这项由北京联通携手华为共同打造的示范项目,实现了北京市中心金融街、历史建筑长话大楼、大型综合性体育场北京工人体育场三个重点场景的连片覆盖。 实际路测结果显示,5G-A用户下行峰值速率达到10Gbps&am…...
智慧公厕让社区生活更美好
随着科技的迅猛发展,城市管理、城市服务均使用科技化的手段进行升级改造,社区生活更美好赋予全新的智慧效能,其中智慧公厕也成为了城市环卫设施的新宠。智慧公厕以物联网、互联网、大数据、云计算、5G通信、自动化控制等技术为核心࿰…...
Apache软件基金会的孵化标准和毕业标准
Apache软件基金会的孵化标准和毕业标准是一个项目成功的重要衡量指标。这些标准关注项目的多个方面,包括开放性、合作性、共建性、透明性、技术可行性、社区建设以及用户基础等。在孵化阶段,Apache软件基金会主要关注项目的开放性和合作性。首先…...
什么是高可用架构
一、什么是高可用 在运维中,经常听到高可用,那么什么是高可用架构呢?通俗点讲,高可用就是在服务故障,节点宕机的情况下,业务能够保证不中断,服务正常运行。 举个例子,支付宝&#…...
【Vuforia+Unity】AR04-地面、桌面平面识别功能(Ground Plane Target)
不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒,但是要求也很不友好,只能支持部分移动设备,具体清单如下: 01.Vuforia的地面识别功能仅支持的设备清单: Recommended…...
【Git】解决‘每次初始化一个新仓库时,都需要执行git config --global --add safe.directory命令‘
问题 这个命令是用来将一个安全目录添加到全局的 Git 配置中。但每次克隆一个仓库或者新建一个仓库,并且对该仓库进行操作时,都需要执行该命令,十分麻烦! 这是因为,Git 近期进行了版本升级,添加了新的目录…...
Kandinsky-5.0-I2V-Lite-5s效果惊艳集:10组高质量生成视频的首帧与结果对比
Kandinsky-5.0-I2V-Lite-5s效果惊艳集:10组高质量生成视频的首帧与结果对比 1. 开篇:轻量级图生视频新体验 Kandinsky-5.0-I2V-Lite-5s带来了一种全新的视频创作方式。你只需要准备一张静态图片,再加上一句简单的运动描述,就能在…...
新建工程2
我们把stm32最小开发板和stlink链接好后,开始进入keil。 打开魔术棒按钮选择debug,这个调试器默认为ulink。所以我们改为stlink debug。 然后点击旁边的setting按钮,在flash Download里把reset and run这一项勾上。(勾上这项后&a…...
为什么ViTPose正在重新定义人体姿态估计的终极解决方案?
为什么ViTPose正在重新定义人体姿态估计的终极解决方案? 【免费下载链接】ViTPose The official repo for [NeurIPS22] "ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation" and [TPAMI23] "ViTPose: Vision Transformer for…...
如何用eBPF和可信通道保护高自治Agent通信
写在前面 博文内容为 AgenticOS 2026 论文 Grimlock: Guarding High\-Agency Systems with eBPF and Attested Channels 的学习笔记论文地址:https://os-for-agent.github.io/papers/AgenticOS_2026_paper_23.pdf这篇论文不是在讲 Prompt 或 Agent 编排,…...
金融问答合规不是选配——Dify企业版最新v0.12.3合规增强包(含GDPR+《金融数据安全分级指南》双模引擎)深度解析
第一章:金融问答合规不是选配——Dify企业版v0.12.3合规增强包全景概览金融行业对AI问答系统的监管要求日益严格,数据脱敏、回答溯源、内容审计与策略拦截已从“能力加分项”升级为“上线准入红线”。Dify企业版v0.12.3正式引入合规增强包(Co…...
计算机毕业设计:Python农产品电商数据挖掘与推荐系统 Flask框架 矩阵分解 数据分析 可视化 协同过滤推荐算法 深度学习(建议收藏)✅
1、项目介绍 技术栈 采用 Python 语言开发,基于 Flask 框架搭建后端服务,通过 requests 爬虫采集农产品数据,运用矩阵分解算法(带偏置的协同过滤推荐算法)结合随机梯度下降优化模型,前端使用 Echarts 实现…...
Leather Dress Collection效果展示:12款LoRA在肤色适配、光影反射、皮革光泽一致性表现
Leather Dress Collection效果展示:12款LoRA在肤色适配、光影反射、皮革光泽一致性表现 1. 项目概述 Leather Dress Collection 是一个基于Stable Diffusion 1.5的LoRA模型集合,专注于生成各种皮革服装风格的图像。这套模型由Stable Yogi开发ÿ…...
别再死记硬背了!用PyTorch亲手画一画CNN的特征图,秒懂它在‘看’什么
用PyTorch可视化CNN特征图:揭开神经网络的神秘面纱 当你第一次听说卷积神经网络(CNN)能识别猫狗时,是否也好奇过它究竟"看到"了什么?那些抽象的数字矩阵背后,隐藏着怎样的视觉逻辑?今…...
信号处理课设灵感:从Borwein积分到‘音乐喷泉’和‘膜拜大熊猫’的创意实现
从Borwein积分到创意电子项目:信号处理课设实战指南 当sinc函数的积分结果突然从π变成π-10⁻⁰时,数学系的学生可能会陷入证明困境,而电子工程专业的学生看到的却是LED灯带的控制灵感。这种理论到实践的思维跳跃,正是现代工程教…...
GeoAI 的4大核心技术如何重塑行业应用
1. 图像分类:从像素到决策的智能之眼 我第一次接触GeoAI图像分类技术是在一个农业监测项目中。当时需要从无人机拍摄的农田图像中自动识别作物类型,传统方法需要人工标注每张图片,效率极低。而当我用上基于卷积神经网络(CNN&#…...
