Docker 最常用的镜像命令和容器命令详解
本文列出了Docker使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份。熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习Docker的镜像构建、备份恢复迁移、镜像仓库、网络、集群等等更多的内容。
镜像相关命令
官方文档:https://docs.docker.com/reference/
查看镜像
[root@localhost~]#dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE hello-worldlatestbf756fb1ae657monthsago13.3kB
- REPOSITORY:镜像在仓库中的名称,本文中以后都简称镜像名称
- TAG:镜像标签
- IMAGEID:镜像ID
- CREATED:镜像的创建日期(不是获取该镜像的日期)
- SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下。
搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索。
dockersearch镜像名称
- NAME:镜像名称
- DESCRIPTION:镜像描述
- STARS:用户评价,反映一个镜像的受欢迎程度
- OFFICIAL:是否为官方构建
- AUTOMATED:自动构建,表示该镜像由DockerHub自动构建流程创建的。
拉取镜像
拉取镜像就是从中央仓库下载镜像到本地。
dockerpull镜像名称
假如我要拉取centos镜像到本地,如果不声明tag镜像标签信息则默认拉取latest版本,也可以通过:https://hub.docker.com/搜索该镜像,查看支持的tag信息。
通过查看tag信息,如果我们要下载centos7的镜像。
dockerpullcentos:7
删除镜像
按镜像ID删除镜像。
#删除单个镜像 dockerrmi镜像ID #删除多个镜像 dockerrmi镜像ID镜像ID镜像ID
dockerimages-q可以查询到所有镜像的ID,通过组合命令可以实现删除所有镜像的操作。
dockerrmi`dockerimages-q`
注意:如果通过某个镜像创建了容器,则该镜像无法删除。
解决办法:先删除镜像中的容器,再删除该镜像。
容器相关命令
查看容器
查看正在运行的容器。
[root@localhost~]#dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
- CONTAINERID:容器ID
- IMAGE:所属镜像
- COMMAND:
- CREATED:创建时间
- STATUS:容器状态
- PORTS:端口
- NAMES:容器名称
查看停止的容器。
dockerps-fstatus=exited
查看所有容器(包括运行和停止)。
dockerps-a
查看最后一次运行的容器。
dockerps-l
创建与启动容器
dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]
- -i:表示运行容器;
- -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端;
- --name:为创建的容器命名;
- -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
- -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建容器后就会自动进容器里);
- -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。
- -P:随机使用宿主机的可用端口与容器内暴露的端口映射。
创建并进入容器
下面这行命令的意思就是通过镜像AA创建一个容器BB,运行容器并进入容器的/bin/bash。
dockerrun-it--name容器名称镜像名称:标签/bin/bash
注意:Docker容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,就会自动退出。
退出当前容器
exit
守护式方式创建容器
dockerrun-di--name容器名称镜像名称:标签
登录守护式容器方式
dockerexec-it容器名称|容器ID/bin/bash
停止与启动容器
#停止容器 dockerstop容器名称|容器ID #启动容器 dockerstart容器名称|容器ID
文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令。
dockercp需要拷贝的文件或目录容器名称:容器目录
也可以将文件从容器内拷贝出来。
dockercp容器名称:容器目录需要拷贝的文件或目录
目录挂载(容器数据卷操作)
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。
但是容器被删除的时候,宿主机的内容并不会被删除,因为底层是通过拷贝实现的。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响,同理,底层是拷贝实现的。
但是容器被删除的时候,宿主机的内容并不会被删除。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。
容器与宿主机之间的数据卷属于引用的关系,数据卷是从外界挂载到容器内部中的,所以可以脱离容器的生命周期而独立存在,正是由于数据卷的生命周期并不等同于容器的生命周期,在容器退出或者删除以后,数据卷仍然不会受到影响,数据卷的生命周期会一直持续到没有容器使用它为止。
创建容器添加-v参数,格式为宿主机目录:容器目录,例如:
dockerrun-di-v/mydata/docker_centos/data:/usr/local/data--namecentos7-01centos:7 #多目录挂载 dockerrun-di-v/宿主机目录:/容器目录-v/宿主机目录2:/容器目录2镜像名
目录挂载操作可能会出现权限不足的提示。这是因为CentOS7中的安全模块SELinux把权限禁掉了,在dockerrun时通过--privileged=true给该容器加权限来解决挂载的目录没有权限的问题。
匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker/volume中生成。
#匿名挂载 dockerrun-di-v/usr/local/data--namecentos7-02centos:7 #查看volume数据卷信息 dockervolumels
具名挂载
具名挂载就是给数据卷起了个名字,容器外对应的目录会在/var/lib/docker/volume中生成。
#匿名挂载 dockerrun-di-vdocker_centos_data:/usr/local/data--namecentos7-03centos:7 #查看volume数据卷信息 dockervolumels
指定目录挂载
一开始给大家讲解的方式就属于指定目录挂载,这种方式的挂载不会在/var/lib/docker/volume目录生成内容。
dockerrun-di-v/mydata/docker_centos/data:/usr/local/data--namecentos7-01centos:7 #多目录挂载 dockerrun-di-v/宿主机目录:/容器目录-v/宿主机目录2:/容器目录2镜像名
查看目录挂载关系
通过dockervolumeinspect数据卷名称可以查看该数据卷对应宿主机的目录地址。
[root@localhost~]#dockervolumeinspectdocker_centos_data [ { "CreatedAt":"2020-08-13T20:19:51+08:00", "Driver":"local", "Labels":null, "Mountpoint":"/var/lib/docker/volumes/docker_centos_data/_data", "Name":"docker_centos_data", "Options":null, "Scope":"local" } ]
通过dockerinspect容器ID或名称,在返回的JSON节点中找到Mounts,可以查看详细的数据挂载信息。
只读/读写
#只读。只能通过修改宿主机内容实现对容器的数据管理。 dockerrun-it-v/宿主机目录:/容器目录:ro镜像名 #读写,默认。宿主机和容器可以双向操作数据。 dockerrun-it-v/宿主机目录:/容器目录:rw镜像名
volumes-from(继承)
#容器centos7-01指定目录挂载 dockerrun-di-v/mydata/docker_centos/data:/usr/local/data--namecentos7-01centos:7 #容器centos7-04和centos7-05相当于继承centos7-01容器的挂载目录 dockerrun-di--volumes-fromcentos7-01--namecentos7-04centos:7 dockerrun-di--volumes-fromcentos7-01--namecentos7-05centos:7
查看容器IP地址
我们可以通过以下命令查看容器的元信息。
dockerinspect容器名称|容器ID
也可以直接执行下面的命令直接输出IP地址。
dockerinspect--format='{{.NetworkSettings.IPAddress}}'容器名称|容器ID
删除容器
#删除指定容器 dockerrm容器名称|容器ID #删除多个容器 dockerrm容器名称|容器ID容器名称|容器ID
之前给大家介绍过Dockerrun命令的使用方法详解,感兴趣的朋友可以参考下!
到此这篇关于Docker最常用的镜像命令和容器命令详解的文章就介绍到这了,更多相关Docker镜像命令和容器命令内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。