Docker 最常用的镜像命令和容器命令详解

本文列出了 Docker 使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份。熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习 Docker 的镜像构建、备份恢复迁移、镜像仓库、网络、集群等等更多的内容。

镜像相关命令

  官方文档:https://docs.docker.com/reference/

查看镜像

[root@localhost ~]# docker images
REPOSITORY  TAG   IMAGE ID  CREATED  SIZE
hello-world  latest  bf756fb1ae65 7 months ago 13.3kB
  • REPOSITORY:镜像在仓库中的名称,本文中以后都简称镜像名称
  • TAG:镜像标签
  • IMAGE ID:镜像 ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小

  这些镜像都是存储在 Docker 宿主机的 /var/lib/docker 目录下。

搜索镜像

  如果你需要从网络中查找需要的镜像,可以通过以下命令搜索。

docker search 镜像名称

  • NAME:镜像名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反映一个镜像的受欢迎程度
  • OFFICIAL:是否为官方构建
  • AUTOMATED:自动构建,表示该镜像由 Docker Hub 自动构建流程创建的。

拉取镜像

  拉取镜像就是从中央仓库下载镜像到本地。

docker pull 镜像名称

  假如我要拉取 centos 镜像到本地,如果不声明 tag 镜像标签信息则默认拉取 latest 版本,也可以通过:https://hub.docker.com/ 搜索该镜像,查看支持的 tag 信息。

  通过查看 tag 信息,如果我们要下载 centos7 的镜像。

docker pull centos:7

删除镜像

  按镜像 ID 删除镜像。

# 删除单个镜像
docker rmi 镜像ID
# 删除多个镜像
docker rmi 镜像ID 镜像ID 镜像ID

  docker images -q 可以查询到所有镜像的 ID,通过组合命令可以实现删除所有镜像的操作。

docker rmi `docker images -q`

注意:如果通过某个镜像创建了容器,则该镜像无法删除。

解决办法:先删除镜像中的容器,再删除该镜像。

容器相关命令

查看容器

  查看正在运行的容器。

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  • CONTAINER ID:容器 ID
  • IMAGE:所属镜像
  • COMMAND
  • CREATED:创建时间
  • STATUS:容器状态
  • PORTS:端口
  • NAMES:容器名称

  查看停止的容器。

docker ps -f status=exited

  查看所有容器(包括运行和停止)。

docker ps -a

  查看最后一次运行的容器。

docker ps -l

创建与启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • -i:表示运行容器;
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端;
  • --name:为创建的容器命名;
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
  • -d:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射。
  • -P:随机使用宿主机的可用端口与容器内暴露的端口映射。

创建并进入容器

  下面这行命令的意思就是通过镜像 AA 创建一个容器 BB,运行容器并进入容器的 /bin/bash

docker run -it --name 容器名称 镜像名称:标签 /bin/bash

注意:Docker 容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为是空闲状态,就会自动退出。

退出当前容器

exit

守护式方式创建容器

docker run -di --name 容器名称 镜像名称:标签

登录守护式容器方式

docker exec -it 容器名称|容器ID /bin/bash

停止与启动容器

# 停止容器
docker stop 容器名称|容器ID
# 启动容器
docker start 容器名称|容器ID

文件拷贝

  如果我们需要将文件拷贝到容器内可以使用 cp 命令。

docker cp 需要拷贝的文件或目录 容器名称:容器目录

  也可以将文件从容器内拷贝出来。

docker cp 容器名称:容器目录 需要拷贝的文件或目录

目录挂载(容器数据卷操作)

  我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。

  但是容器被删除的时候,宿主机的内容并不会被删除,因为底层是通过拷贝实现的。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响,同理,底层是拷贝实现的。

  但是容器被删除的时候,宿主机的内容并不会被删除。如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。

  容器与宿主机之间的数据卷属于引用的关系,数据卷是从外界挂载到容器内部中的,所以可以脱离容器的生命周期而独立存在,正是由于数据卷的生命周期并不等同于容器的生命周期,在容器退出或者删除以后,数据卷仍然不会受到影响,数据卷的生命周期会一直持续到没有容器使用它为止。

  创建容器添加 -v 参数,格式为宿主机目录:容器目录,例如:

docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名

目录挂载操作可能会出现权限不足的提示。这是因为 CentOS7 中的安全模块 SELinux 把权限禁掉了,在 docker run 时通过 --privileged=true 给该容器加权限来解决挂载的目录没有权限的问题。

匿名挂载

  匿名挂载只需要写容器目录即可,容器外对应的目录会在 /var/lib/docker/volume 中生成。

# 匿名挂载
docker run -di -v /usr/local/data --name centos7-02 centos:7
# 查看 volume 数据卷信息
docker volume ls

具名挂载

  具名挂载就是给数据卷起了个名字,容器外对应的目录会在 /var/lib/docker/volume 中生成。

# 匿名挂载
docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7
# 查看 volume 数据卷信息
docker volume ls

指定目录挂载

  一开始给大家讲解的方式就属于指定目录挂载,这种方式的挂载不会在 /var/lib/docker/volume 目录生成内容。

docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名

查看目录挂载关系

  通过 docker volume inspect 数据卷名称 可以查看该数据卷对应宿主机的目录地址。

[root@localhost ~]# docker volume inspect docker_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"
 }
]

  通过 docker inspect 容器ID或名称 ,在返回的 JSON 节点中找到 Mounts,可以查看详细的数据挂载信息。

只读/读写

# 只读。只能通过修改宿主机内容实现对容器的数据管理。
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
# 读写,默认。宿主机和容器可以双向操作数据。
docker run -it -v /宿主机目录:/容器目录:rw 镜像名

volumes-from(继承)

# 容器 centos7-01 指定目录挂载
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 容器 centos7-04 和 centos7-05 相当于继承 centos7-01 容器的挂载目录
docker run -di --volumes-from centos7-01 --name centos7-04 centos:7
docker run -di --volumes-from centos7-01 --name centos7-05 centos:7

查看容器 IP 地址

  我们可以通过以下命令查看容器的元信息。

docker inspect 容器名称|容器ID

  也可以直接执行下面的命令直接输出 IP 地址。

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID

删除容器

# 删除指定容器
docker rm 容器名称|容器ID
# 删除多个容器
docker rm 容器名称|容器ID 容器名称|容器ID

之前给大家介绍过Docker run 命令的使用方法详解,感兴趣的朋友可以参考下!

到此这篇关于Docker 最常用的镜像命令和容器命令详解的文章就介绍到这了,更多相关Docker镜像命令和容器命令内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker常用的清除容器镜像命令小结

    前言 Docker 是一个非常有趣的项目.它自己宣称可以减轻部署服务器的难度,当然我相信里面有炒作的成分.但是实际使用后,我觉得 Docker 的表现还是可圈可点的.这篇文章主要总结了Docker清除容器镜像常用的命令,下面来一起看看吧. 杀死所有running状态的容器 docker kill $(docker ps -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有\'untagged/dangling\' ()状态的镜像 docker rmi

  • Docker创建自己的镜像与上传流程详解

    目录 引入 了解Docker的资源隔离和主机模式 创建 centos7 容器 部署mysql5.7 创建Docker Hub仓库 生成镜像 提交镜像 引入 在部署毕节服务器时遇到了个问题:   因为在三台服务器做好ovirt-engine超融合后,在主节点服务器上部署可视化平台需要安装mysql5.7,但是安装mysql时需要卸载一些依赖,但是由于怕影响原有的postgresql数据库和ovirt-engine的服务组件,选择了用docker容器部署mysql数据库.   在顺利创建好容器,配置

  • Docker 最常用的镜像命令和容器命令详解

    本文列出了 Docker 使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份.熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习 Docker 的镜像构建.备份恢复迁移.镜像仓库.网络.集群等等更多的内容. 镜像相关命令 官方文档:https://docs.docker.com/reference/ 查看镜像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZ

  • Docker常见命令整理汇总(包括镜像命令、容器命令)

    目录 docker帮助命令大全—help 管理镜像命令—image 管理网络命令—network 管理容器命令—container 管理服务命令—service 管理Docker镜像清单和清单列表—manifest 管理节点命令—node 管理插件命令—plugin 管理卷命令—volume 管理Docker命令—system 管理Docker映像的信任—trust 登录docker仓库命令—login 登出docker仓库命令—logout 使用Dockerfile构建一个镜像—build 搜

  • Docker容器操作方法详解

    目录 一.常用命令 1.创建并启动容器 2.列出所有容器 3.进入容器 4.退出容器 5.停止容器 6.启动/重启一个已停止的容器 7.删除容器 二.使用帮助 一.常用命令 下面按照使用容器中的流程: 创建并启动容器 > 查询容器 > 进入容器 > 退出容器 > 停止容器 > 启动/重启容器 > 删除容器来介绍Dockers常用命令,带领小伙伴快速入门. 1.创建并启动容器 docer run 当操作者执行docker run时,运行的容器进程是隔离的,因为它有自己的文

  • Docker run 命令的使用方法详解

    注意,本文基于最新的Docker 1.4文档翻译. Docker会在隔离的容器中运行进程.当运行 docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统.网络资源和以此进程为根进程的进程组.在容器启动时,镜像可能已经定义了要运行的二进制文件.暴露的网络端口等,但是用户可以通过docker run命令重新定义(译者注:docker run可以控制一个容器运行时的行为,它可以覆盖docker build在构建镜像时的一些默认配置),这也是为什么run命令相比于其它命

  • conda常用命令整理及用法详解

    目录 Conda 1 创建.删除和复制虚拟环境 2 激活虚拟环境 3 查看当前虚拟环境列表 4 给虚拟环境装包 5 配置Anaconda的镜像网址 6 给jupyter notebook添加虚拟环境的内核 7 版本控制 8 jupyter notebook安装插件 9 Anaconda从本地安装包 10 导出配置文件和通过配置文件安装 Conda Conda是Anaconda中一个强大的包和环境管理工具,可以在Windows系统中的的Anaconda Prompt命令行使用,也可以在macOS或

  • Docker微服务的ETCD集群搭建教程详解

    目录 etcd的特性 Etcd构建自身高可用集群主要有三种形式 本次搭建的基础环境 1.将服务器挨个添加进集群 2.将服务器统一添加进集群 etcd api接口 服务注册与发现 etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现.etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性.Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,Raft通过选举的

  • Linux下tcpdump命令解析及使用详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具.tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 实用命令实例 默认启动 tcpdump 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包. 监视指定网络接口的数据包 tcpdum

  • docker.service启动报错的一次排查详解

    执行以下命令报错 systemctl restart docker 查看错误信息 systemctl status docker -l 报错信息如下: ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Drop-In: /etc/systemd/system

  • Springboot常用注解及配置文件加载顺序详解

    Springboot常用注解及底层实现 1.@SpringBootApplication:这个注解标识了一个SpringBoot工程,她实际上是另外三个注解的组合,分别是: @SpringBootConfiguration:源码可以看到,这个注解除了元注解外,实际就只有一个@Configuration,把该类变成一个配置类,表示启动类也是一个配置类: @EnableAutoConfiguration:是开启自动配置的功能,向Spring容器中导入了一个Selector,用来加载ClassPath

随机推荐