Docker 命令教程(附中文解释)
Docker命令教程
Docker自从诞生以来就一直备受追捧,学习Docker是一件很炫酷、很有意思的事情。我希望通过这篇文章能够让大家快速地入门Docker,并有一些学习成果来激发自己的学习兴趣。我也只是一个在Docker这条巨鲸上玩耍的小孩,全文如有不明确、不正确的地方,还请斧正。
#docker--help Usage:docker[OPTIONS]COMMAND[arg...] dockerdaemon[--help|...] docker[-h|--help|-v|--version] Aself-sufficientruntimeforcontainers. Options: --config=~/.dockerLocationofclientconfigfiles -D,--debug=falseEnabledebugmode -H,--host=[]Daemonsocket(s)toconnectto -h,--help=falsePrintusage -l,--log-level=infoSetthelogginglevel --tls=falseUseTLS;impliedby--tlsverify --tlscacert=~/.docker/ca.pemTrustcertssignedonlybythisCA --tlscert=~/.docker/cert.pemPathtoTLScertificatefile --tlskey=~/.docker/key.pemPathtoTLSkeyfile --tlsverify=falseUseTLSandverifytheremote -v,--version=falsePrintversioninformationandquit Commands: attachAttachtoarunningcontainer --将终端依附到容器上 1>运行一个交互型容器 [root@localhost~]#dockerrun-i-tcentos/bin/bash [root@f0a02b473067/]# 2>在另一个窗口上查看该容器的状态 [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES d4a75f165ce6centos"/bin/bash"5secondsagoUp5secondscranky_mahavira 3>退出第一步中运行的容器 [root@d4a75f165ce6/]#exit exit 4>查看该容器的状态 [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES d4a75f165ce6centos"/bin/bash"2minutesagoExited(0)23secondsagocranky_mahavira 可见此时容器的状态是Exited,那么,如何再次运行这个容器呢?可以使用dockerstart命令 5>再次运行该容器 [root@localhost~]#dockerstartcranky_mahavira cranky_mahavira 6>再次查看该容器的状态 [root@localhost~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES d4a75f165ce6centos"/bin/bash"6minutesagoUp29secondscranky_mahavira 因为该容器是交互型的,但此刻我们发现没有具体的终端可以与之交互,这时可使用attach命令。 7>通过attach命令进行交互 [root@localhost~]#dockerattachcranky_mahavira [root@d4a75f165ce6/]# buildBuildanimagefromaDockerfile --通过Dockerfile创建镜像 commitCreateanewimagefromacontainer'schanges --通过容器创建本地镜像 注意:如果是要push到dockerhub中,注意生成镜像的命名 [root@localhost~]#dockercommitcentos_v1centos:v1 68ad49c999496cff25fdda58f0521530a143d3884e61bce7ada09bdc22337638 [root@localhost~]#dockerpushcentos:v1 Youcannotpusha"root"repository.Pleaserenameyourrepositoryto<user>/<repo>(ex:<user>/centos) 用centos:v1就不行,因为它push到dockerhub中时,是推送到相应用户下,必须指定用户名。譬如我的用户名是ivictor,则新生成的本地镜像命名为: dockerpushvictor/centos:v1,其中v1是tag,可不写,默认是latest cpCopyfiles/foldersfromacontainertoaHOSTDIRortoSTDOUT --在宿主机和容器之间相互COPY文件 cp的用法如下: Usage:dockercp[OPTIONS]CONTAINER:PATHLOCALPATH|- dockercp[OPTIONS]LOCALPATH|-CONTAINER:PATH 需要注意的是-的用法,我在容器新建了两个文本文件,其中一个为test.txt,内容如下: root@839866a338db:/#cattest.txt 456 另一个文件为test1,txt,内容为: root@839866a338db:/#cattest1.txt helloworld 用法一的结果如下: [root@localhost~]#dockercpmysqldb:/test.tar- test.tar01006440000000000000000000024000125735231530107360ustar0000000000000000test.txt00006440000000000000000000000014125735231110112670ustarrootroot123 789 test1.txt00006440000000000000000000000013125735231240113530ustarrootroothelloworld 用法二的结果如下: [root@localhost~]#cattest.tar|dockercp-mysqldb:/ [root@localhost~]#dockerexec-itmysqldb/bin/bash root@839866a338db:/#ls bindeventrypoint.shhomelib64mntprocrunselinuxsystest.txttmpvar bootdocker-entrypoint-initdb.detclibmediaoptrootsbinsrvtest.tartest1.txtusr --容器内新增了两个文件,test.txt和test1.txt,而这正是test.tar里打包的文件 createCreateanewcontainer --创建一个新的容器,注意,此时,容器的status只是Created diffInspectchangesonacontainer'sfilesystem --查看容器内发生改变的文件,以我的mysql容器为例 [root@localhost~]#dockerdiffmysqldb C/root A/root/.bash_history A/test1.txt A/test.tar A/test.txt C/run C/run/mysqld A/run/mysqld/mysqld.pid A/run/mysqld/mysqld.sock 不难看出,C对应的均是目录,A对应的均是文件 eventsGetrealtimeeventsfromtheserver --实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等。 譬如: [root@localhost~]#dockerevents 2015-09-08T17:40:13.000000000+08:00d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79:(fromwordpress)create 2015-09-08T17:40:14.000000000+08:00d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79:(fromwordpress)die 2015-09-08T17:42:10.000000000+08:00839866a338db6dd626fa8eabeef53a839e4d2e2eb16ebd89679aa722c4caa5f7:(frommysql)start execRunacommandinarunningcontainer --用于容器启动之后,执行其它的任务 通过exec命令可以创建两种任务:后台型任务和交互型任务 后台型任务:dockerexec-dcctouch123其中cc是容器名 交互型任务: [root@localhost~]#dockerexec-i-tcc/bin/bash root@1e5bb46d801b:/#ls binbootdevetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar exportExportacontainer'sfilesystemasatararchive --将容器的文件系统打包成tar文件 有两种方式: dockerexport-omysqldb1.tarmysqldb dockerexportmysqldb>mysqldb.tar historyShowthehistoryofanimage --显示镜像制作的过程,相当于dockfile imagesListimages --列出本机的所有镜像 importImportthecontentsfromatarballtocreateafilesystemimage --根据tar文件的内容新建一个镜像,与之前的export命令相对应 [root@localhost~]#dockerimportmysqldb.tarmysql:v1 eb81de183cd94fd6f0231de4ff29969db822afd3a25841d2dc9cf3562d135a10 [root@localhost~]#dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE mysqlv1eb81de183cd921secondsago281.9MB infoDisplaysystem-wideinformation --查看docker的系统信息 [root@localhost~]#dockerinfo Containers:3--当前有3个容器 Images:298 StorageDriver:devicemapper PoolName:docker-253:0-34402623-pool PoolBlocksize:65.54kB BackingFilesystem:xfs Datafile:/dev/loop0 Metadatafile:/dev/loop1 DataSpaceUsed:8.677GB--对应的是下面Dataloopfile大小 DataSpaceTotal:107.4GB DataSpaceAvailable:5.737GB MetadataSpaceUsed:13.4MB--对应的是下面Metadataloopfile大小 MetadataSpaceTotal:2.147GB MetadataSpaceAvailable:2.134GB UdevSyncSupported:true DeferredRemovalEnabled:false Dataloopfile:/var/lib/docker/devicemapper/devicemapper/data Metadataloopfile:/var/lib/docker/devicemapper/devicemapper/metadata LibraryVersion:1.02.93-RHEL7(2015-01-28) ExecutionDriver:native-0.2 LoggingDriver:json-file KernelVersion:3.10.0-229.el7.x86_64 OperatingSystem:CentOSLinux7(Core) CPUs:2 TotalMemory:979.7MiB Name:localhost.localdomain ID:TFVB:BXGQ:VVOC:K2DJ:LECE:2HNK:23B2:LEVF:P3IQ:L7D5:NG2V:UKNL WARNING:bridge-nf-call-iptablesisdisabled WARNING:bridge-nf-call-ip6tablesisdisabled inspectReturnlow-levelinformationonacontainerorimage --用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。 killKillarunningcontainer --强制终止容器 关于stop和kill的区别,dockerstop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然, 容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而dockerkill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。 loadLoadanimagefromatararchiveorSTDIN --与下面的save命令相对应,将下面sava命令打包的镜像通过load命令导入 loginRegisterorlogintoaDockerregistry --登录到自己的Dockerregister,需有DockerHub的注册账号 [root@localhost~]#dockerlogin Username:ivictor Password: Email:xxxx@foxmail.com WARNING:logincredentialssavedin/root/.docker/config.json LoginSucceeded logoutLogoutfromaDockerregistry --退出登录 [root@localhost~]#dockerlogout Removelogincredentialsforhttps://index.docker.io/v1/ logsFetchthelogsofacontainer --用于查看容器的日志,它将输出到标准输出的数据作为日志输出到dockerlogs命令的终端上。常用于后台型容器 pausePauseallprocesseswithinacontainer --暂停容器内的所有进程, 此时,通过dockerstats可以观察到此时的资源使用情况是固定不变的, 通过dockerlogs-f也观察不到日志的进一步输出。 portListportmappingsoraspecificmappingfortheCONTAINER --输出容器端口与宿主机端口的映射情况 譬如: [root@localhost~]#dockerportblog 80/tcp->0.0.0.0:80 容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务 psListcontainers --列出所有容器,其中dockerps用于查看正在运行的容器,ps-a则用于查看所有容器。 pullPullanimageorarepositoryfromaregistry --从dockerhub中下载镜像 pushPushanimageorarepositorytoaregistry --将本地的镜像上传到dockerhub中 前提是你要先用dockerlogin登录上,不然会报以下错误 [root@localhost~]#dockerpushivictor/centos:v1 Thepushreferstoarepository[docker.io/ivictor/centos](len:1) unauthorized:accesstotherequestedresourceisnotauthorized renameRenameacontainer --更改容器的名字 restartRestartarunningcontainer --重启容器 rmRemoveoneormorecontainers --删除容器,注意,不可以删除一个运行中的容器,必须先用dockerstop或dockerkill使其停止。 当然可以强制删除,必须加-f参数 如果要一次性删除所有容器,可使用dockerrm-f`dockerps-a-q`,其中,-q指的是只列出容器的ID rmiRemoveoneormoreimages --删除镜像 runRunacommandinanewcontainer --让创建的容器立刻进入运行状态,该命令等同于dockercreate创建容器后再使用dockerstart启动容器 saveSaveanimage(s)toatararchive --将镜像打包,与上面的load命令相对应 譬如: dockersave-onginx.tarnginx searchSearchtheDockerHubforimages --从DockerHub中搜索镜像 startStartoneormorestoppedcontainers --启动容器 statsDisplayalivestreamofcontainer(s)resourceusagestatistics --动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O stopStoparunningcontainer --停止一个运行的容器 tagTaganimageintoarepository --对镜像进行重命名 topDisplaytherunningprocessesofacontainer --查看容器中正在运行的进程 unpauseUnpauseallprocesseswithinacontainer --恢复容器内暂停的进程,与pause参数相对应 versionShowtheDockerversioninformation --查看docker的版本 waitBlockuntilacontainerstops,thenprintitsexitcode --捕捉容器停止时的退出码 执行此命令后,该命令会“hang”在当前终端,直到容器停止,此时,会打印出容器的退出码。 Run'dockerCOMMAND--help'formoreinformationonacommand.
感谢阅读,希望能帮助到大家尽快的了解并应用Docker的命令,谢谢大家对本站的支持!