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
:镜像 IDCREATED
:镜像的创建日期(不是获取该镜像的日期)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
:容器 IDIMAGE
:所属镜像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 命令的使用。
本文采用 知识共享「署名-非商业性使用-禁止演绎 4.0 国际」许可协议
。
🤗 您的点赞
和转发
是对我最大的支持。
📢 扫码关注 哈喽沃德先生
「文档 + 视频」每篇文章都配有专门视频讲解,学习更轻松噢 ~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
完美解决方案-雪花算法ID到前端之后精度丢失问题
最近公司的一个项目组要把以前的单体应用进行为服务拆分,表的ID主键使用Mybatis plus默认 的雪花算法来生成。 快下班的时候,小伙伴跑过来找我,:“快给我看看这问题,卡这卡了小半天了!”。连拉带拽,连哄带骗的把我拉到他的电脑前面。这位小伙伴在我看来技术不算是大牛,但经验也很丰富了。他都卡了半天的问题,应该不是小问题,如果我一时半会搞不定,真的是耽误我下班了,所以我很不情愿的在他的位置坐了下来。 一、现象是这样的 下面我把异常的现象给大家描述一下,小伙伴建了一张表,表的主键是id BigINT,用来存储雪花算法生成的ID,嗯,这个没有问题! CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', #其他字段省略 ); 使用Long 类型对应数据库ID数据。嗯,也没有问题,雪花算法生成的就是一串数字,Long类型属于标准答案! [@Data](https://my.oschina.net/difrik) public class User { private Long id; //其他成员变量省略 在后端下断点。看到数据...
- 下一篇
如何测试Linux内核?
本文翻译自:https://embeddedbits.org/how-is-the-linux-kernel-tested/ How is the Linux kernel tested? 您是否想过如何测试Linux内核?如何维护Linux内核这一使用了全球数千名程序员开发的,数百万行代码的开源项目的质量? 这不是一件容易的事。但这并不意味着这是一件不可能的事! 大约每3个月(10到12周)就会发布一个新的Linux内核版本。在此期间,将为“合并窗口”保留2周的时间,其中所有已开发和批准的内容都将合并到Linus Torvalds树(主线)中。剩下的8到10周的开发时间用于修复漏洞和稳定化。 在稳定阶段,会发布新的候选版本(通常每周一次)。当Linus Torvalds“觉得”代码“足够稳定”并且最新候选版本中的更改数量减少时,将发布新的内核版本。 当我说Linus Torvalds感到代码“足够稳定”时发布了新版本时,我的意思是说Linux内核开发过程中没有什么正式的流程可以发布新版本。没有任何一种神奇的工具可以针对内核进行完全的测试,也没有正式的测试计划可以确保新的内核版本能够正...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度