百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

开发者不可不知的 Docker 命令

bigegpt 2024-09-18 08:08 29 浏览


学习Docker,首先需要了解Docker基本概念,然后就开始“动手”了(也就是敲Docker命令)。Docker命令较多,这里笔者总结下常用的Docker命令,方便小伙伴们查阅。

Docker是基于go语言开发,底层技术(Linux下)主要基于cgroups、namespace以及联合文件技术实现的一种进程级别的轻量级虚拟化解决方案。由于Docker进程隔离独立于宿主机上其他进程,因此也称为容器,Docker在容器的基础上,进行了更进一步的封装,从文件系统、网络到进程隔离等,极大简化了容器的创建管理维护工作,降低了开发者使用门槛,因此才在近几年流行开来(毕竟Docker的底层技术在Docker出现之前就已经存在了)。

Docker命令有2大类,分别是服务端命令和客户端命令,前者是操作docker服务端(dockerd),后者也就是开发者常用的docker命令,更多Docker命令可以使用 docker help 查看。

  • 客户端命令:基本命令格式为docker [OPTIONS] COMMAND [arg…];
  • 服务端命令:基本命令格式为dockerd [OPTIONS]。

客户端命令

centos下安装docker可使用命令yum install docker,mac下需要安装docker-for-mac,使用命令 wget http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/Docker.dmg。安装完成之后可以使用如下命令使用Docker:

service?docker?start??启动docker服务
docker?version/info???查看docker版本/信息
docker?inspect??查看容器详细信息
docker?inspect?-f?{{.State.Pid}}?xxxx???查看容器对应的pid
docker?logs?查看对应容器日志

Docker有两个基本概念:镜像和容器,前者是打包后可执行的容器文件,后者是运行中的Docker实例,二者关系类似 可执行文件 和 进程 的概念。

镜像命令

镜像相关命令有搜索、查看、删除、存档和加载等,如下:

docker?images??查看所有本地镜像,或者使用命令?docker?image?ls
docker?search?xxx???搜索官方仓库中的镜像
docker?pull?xxx:tag????下载镜像,也可以使用docker?push?推送自己的镜像,docker?run?xxx命令会启动容器,当本地没有容器镜像是会从仓库中拉取
docker?rmi?imageName???删除本地一个或多个镜像,注意不要和docker?rm删除容器命令混淆
docker?rm?xxx?删除一个或多个容器
docker?history?ubuntu:18.04??查看Ubuntu镜像的创建过程(各个层内容)
docker?save?-o?ubuntu_18.04.tar?ubuntu:18.04???导出镜像到本地文件ubuntu_18.04.tar
docker?load?-i?ubuntu_18.04.tar??加载镜像,或者使用命令?docker?<?ubuntu_18.04.tar

容器命令

围绕容器,Docker提供了十分丰富的操作命令,允许用户高效地管理容器的整个生命周期。可以使用docker container help命令查看Docker支持的容器操作子命令:

docker?ps??列出所有运行中的容器
docker?ps?-a??列出所有容器,包括停止状态的
docker?ps?-a?-q???列出所有镜像的id
docker?rm?containerId???删除某一个镜像
docker?rm?$(docker?ps?-a?-q)??删除所有处于终止状态的容器,注意不能删除正在运行中的容器
docker?run?-it?--rm?ubuntu:14:04??bash???????-it?这是两个参数,-t是开一个终端(伪终端绑定到容器的标准输入上),-i是交互式命令让容器的标准输入保持打开。--rm是容器退出后删除,默认情况下容器退出不会自动删除,方便排查问题。ubuntu:14:04使用的启动镜像。bash放在镜像后面的命令。执行exit命令从容器中退出时,容器会自动退出。有时候需要让容器已后台守护态运行,此时需要增加-d参数,比如docker?urn?-d?ubuntu。
docker?run?ubuntu??echo?"hello?world"???在docker容器中运行命令输出hello?world
docker?start?containerId???启动处于created状态的容器
docker?resetart?containerId???重启处于运行状态的容器
docker?stop?containerId???停止容器运行
docker?logs?xxx?查看容器xxx输出信息
docker?pause??[container]??暂停容器,恢复使用命令docker?unpause?xxx
docker?inspect?[container]?查看容器的详细信息,创建时间、路径、状态配置等详细信息。
docker?top??[container]???查看容器内进程信息。
docker?stats???[container]???查看容器的CPU、内存、网络等统计信息,支持选项有:-a:输出所有统计信息,默认只输出运行中信息;-no-stream:不持续输出,默认会自动更新统计结果。
docker?cp?zzz.txt?26755872da4d:/tmp:将本地zzz.txt文件复制到容器26755872da4d的/tmp目录下,也可以使用命令将容器内文件复制到本地机器,docker?cp?26755872da4d:/tmp/zzz.txt?/tmp。
docker?container??diff?26755872da4d:container?diff命令查看容器内文件系统的变更。
docker?container??port?26755872da4d:查看容器端口映射。
docker?update?--cpus?4?26755872da4d:限定容器使用CPU个数为4

container update命令可以更新容器的一些运行时配置,主要是一些资源限制份额。命令格式为docker [container] update [OPTIONS] CONTAINER [CONTAINER…],支持的操作如下:

??-blkio-weight?uint16:更新块IO限制,10~1000,默认值为0,代表着无限制;
??-cpu-period?int:限制CPU调度器CFS(Completely?Fair?Scheduler)使用时间,单位为微秒,最小1000;
??-cpu-quota?int:限制CPU调度器CFS配额,单位为微秒,最小1000;
??-cpu-rt-period?int:限制CPU调度器的实时周期,单位为微秒;
??-cpu-rt-runtime?int:限制CPU调度器的实时运行时,单位为微秒;
??-c,?-cpu-shares?int:限制CPU使用份额;
??-cpus?decimal:限制CPU个数;
??-cpuset-cpus?string:允许使用的CPU核,如0-3,0,1;
??-cpuset-mems?string:允许使用的内存块,如0-3,0,1;
??-kernel-memory?bytes:限制使用的内核内存;
??-m,?-memory?bytes:限制使用的内存;
??-memory-reservation?bytes:内存软限制;
??-memory-swap?bytes:内存加上缓存区的限制,-1表示为对缓冲区无限制;
??-restart?string:容器退出后的重启策略。

docker run参数

docker run 启动容器,可以指定参数设置容器启动策略,如下:

-d??容器会在后台运行并不会把输出(STDOUT)打印到宿主机上
-t??让docker分配一个伪终端并绑定到容器的标准输入上
-i??让容器的标准输入保持打开
-p?映射本地端口和容器端口,格式为-p?ip:hostPort:containerPort或者-p?hostPort:containerPort。
-P?大写的P,使用?-P?标记时,Docker?会随机映射一个?49000~49900?的端口到内部容器开放的网络端口。
--rm???在容器执行完毕后将其删除,默认只能删除已停止的容器,如果想要删除正在运行中容器,可增加-f参数。
--name???xxx???执行容器的name

注意,容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。

操作容器

进入容器

容器运行过程中,常常需要进入容器中执行操作场景,可使用如下命令进入容器:

attach:使用命令docker?attach?containerId/names进入容器,但是使用?attach?命令有时候并不方便。当多个窗口同时?attach?到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。注意,进入容器后,如果使用exit退出容器,那么容器也会停止运行,可以使用命令Ctrl+P+Q来退出但不关闭容器。
nsenter:nsenter?启动一个新的shell进程(默认是/bin/bash),同时会把这个新进程切换到和目标(target)进程相同的命名空间,这样就相当于进入了容器内部。nsenter?要正常工作需要有?root?权限
exec:使用exec命令更加便捷,docker?exec?-it?775c7c9ee1e1?/bin/bash??,很方便的进入容器

导入/导出容器

docker?export?-o?test.tar?[container]???将某个容器导出到本地
docker?import?test.tar??导入某个容器导出文件(容器导出为镜像文件,这里相当于加载镜像文件)。
    实际上,既可以使用docker?load命令来导入镜像存储文件到本地镜像库,也可以使用docker[container]?import命令来导入一个容器快照到本地镜像库。这两者的区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

端口映射

在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P(大写的)标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口。

docker?run?-d?-p?500:5000?xxxwebapp?python?app.py:启动容器并运行python?app.py程序,映射本地500端口到容器5000端口。或者使用docker?run?-d?-p?127.0.0.1:500:5000?xxxwebapp?python?app.py指定特定地址。
docker?run?-it?--name?zzz?ubuntu?bash
docker?run?-it?--name?zzz2?--link?zzz:zzz?ubuntu?bash???zzz2容器和zzz容器建立互联关系。
????--link参数的格式为--link?name:alias,其中name是要链接的容器的名称,alias是别名。
????Docker相当于在两个互联的容器之间创建了一个虚机通道,而且不用映射它们的端口到宿主主机上。
????在启动db容器的时候并没有使用-p和-P标记,从而避免了暴露数据库服务端口到外部网络上。

数据管理

Docker的数据管理主要分为2种:

  • 数据卷:容器内数据直接映射到本地;
  • 数据卷容器:特定容器维护数据卷。

数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。如果直接挂载一个文件到容器,使用文件编辑工具,包括vi或者sed --in-place的时候,可能会造成文件inode的改变。从Docker 1.1.0起,这会导致报错误信息。所以推荐的方式是直接挂载文件所在的目录到容器内。

服务端命令

dockerd命令负责启动服务端主进程,支持的命令选项如下表所示:

Docker命令图谱

最后来一张Docker图谱作为结尾吧:


推荐阅读:

Netty 总结篇

深入理解Java反射和动态代理

Java nio 空轮询bug到底是什么

相关推荐

方差分析简介(方差分析通俗理解)

介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...

正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃

吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...

Python数据可视化:箱线图多种库画法

概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...

多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读

作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...

方差分析 in R语言 and Excel(方差分析r语言例题)

今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...

可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图

前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...

matplotlib 必知的 15 个图(matplotlib各种图)

施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...

R ggplot2常用图表绘制指南(ggplot2绘制折线图)

ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...

Python数据可视化:从Pandas基础到Seaborn高级应用

数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...

Python 数据可视化常用命令备忘录

本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...

统计图的种类(统计图的种类及特点图片)

统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...

实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)

大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...

通过AI提示词让Deepseek快速生成各种类型的图表制作

在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...

数据可视化:解析箱线图(box plot)

箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...

[seaborn] seaborn学习笔记1-箱形图Boxplot

1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...