目录
查看镜像信息--docker images/inspect/tag
容器的创建与使用-docker create/ps/start/run
容器的导出与导入-docker export /import
一、Docker 镜像操作
Docker 运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker 就会尝试从默认镜像仓库【https://hub.docker.com】下载,这是 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求
当然了,用户也可以通过配置来使用自定义的镜像仓库
搜索镜像--docker search
'命令格式:'
docker search [对象]
'例:'
docker search nginx
'#默认输出结果会按照星级评价进行排序'
docker search -f stars=1000 nginx
'#可以使用选项"-f"配合"stars=x"显示指定星级以上的镜像'
- 一般官方项目组维护的镜像使用单个单词,例如【nginx】作为镜像名称,我们称之为基础镜像或根镜像
- 像【mailu/nginx】这种命名方式的镜像,表示是由 Docker Hub 的用户【mailu】创建并维护的镜像,带有用户名为前缀
- 是否主动创建表示是否允许用户验证镜像的来源和内容
- 使用【docker search】命令只能查找镜像,无法获取镜像的标签,若需要查找 docker 的标签,需要从网页上访问镜像仓库【https://hub.docker.com】
获取镜像--docker pull
搜索到了符合需求的镜像,我们可以使用【docker pull】命令从网络下载镜像到本地使用
'命令格式:'
docker pull [仓库名称][:标签]
'例:'
docker pull mailu/nginx
- 标签【tag】就是用来区分镜像版本的,可以看到没有指定标签,这里会默认下载仓库中最新版本的镜像,即选择【latest】标签
- 在整个下载的过程中,我们可以看出,整个镜像文件是由若干层【layer】组成,我们将其称之为【AUFS】,即联合文件系统,其实现了增量保存与更新的基础,在下载过程中会输出镜像的各层信息
- 镜像下载到本地后,我们就可以随时使用该镜像了
- 用户也可以选择从其他注册服务器仓库下载,需要在仓库名称前指定完整的仓库注册服务器地址
查看镜像信息--docker images/inspect/tag
'命令格式:'
docker images [仓库名称][:标签]
'例:'
docker images
信息 | 说明 |
---|---|
REPOSITORY | 镜像属于的仓库 |
TAG | 镜像的标签信息,标记了同一个仓库中的不同镜像 |
IMAGE ID | 镜像的唯一 ID 号,是镜像的唯一标识 |
CREATED | 镜像的创建时间 |
SIZE | 镜像的大小 |
用户还可以根据镜像的唯一标识 ID 号来获取镜像的详细信息
'命令格式:'
docker inspect [镜像ID号]
'例:'
docker inspect 23089a8ec5aa
'#这是wodby/nginx的镜像ID号'
'#显示篇幅较长'
为了更方便在后续的工作中使用下载好的镜像,我们可以使用【docker tag】命令来为本地的镜像添加新的标签
'命令格式:'
docker tag 名称:[标签] 新名称:[新标签]
'例:'
docker tag wodby/nginx nginx123:nginx
docker images|grep nginx
删除镜像--docker rmi
可以使用【docker rmi】命令删除镜像
删除镜像的方法有两种:使用镜像的标签或 ID
'命令格式:'
docker rmi [仓库名称][:标签]
或
docker rmi [镜像ID号]
'例:'
docker images|grep nginx
docker rmi nginx123:nginx
'#当一个镜像有多个标签时,该命令只会删除多少标签中的这个指定标签,而不会影响镜像文件'
'#若该镜像只有一个标签就要注意了,再使用该命令会直接彻底删除该镜像!'
docker rmi 97788821c58b
'#选择参数为镜像ID号时要谨慎,必须首先确保该镜像当前没有被容器使用'
'#如果该镜像已被容器使用,则需先删除所以依赖该镜像的容器,再删除该镜像'
'#删除时系统会先删除指向该镜像的所有标签,然后删除镜像本身'
docker images|grep nginx
输出镜像和载入镜像
如果你需要进行镜像迁移,需要先将镜像保存至本地文件,之后可以拷贝该文件至其他主机
这一过程称之为存出镜像,使用【docker save】命令操作
'命令格式:'
docker save -o [存储文件名] [存储镜像]
'例:'
docker save -o nginx nginx
ls -l nginx
--
scp nginx [email protected]:nginx
'#传至另一台主机'
如果需要将存出的镜像从主机 A 迁移至主机 B 上使用,可以将该导出文件导入到主机 B 的镜像库中
这一过程称之为载入镜像,使用【docker load】进行载入操作
'命令格式:'
docker load <[存出文件]
'例:'
docker load <nginx
docker images|grep nginx
上传镜像-docker login/push
在本地存出的镜像越来越多,我们可以指定一个仓库来存放这些镜像
目前最方便的就是公共仓库,默认是上传到 Docker Hub 官方仓库,但需要注册使用公共仓库的账号,可以使用【docker login】命令输入用户名、密码和邮箱来登录
'例:'
docker login
--
'需要先去【https://hub.docker.com】注册一个账号,注册过程很简单'
在上传镜像前需要对本地镜像添加新的标签,然后再使用【docker push】命令进行上传
'命令格式:'
docker tag [名称][:标签] [账号名][/名称][:新标签]
docker push [账号名][/名称][:新标签]
'例:'
docker tag nginx:latest qq1571276901/nginx:centos7
docker push qq1571276901/nginx:centos7
二、Docker 容器操作
容器是 Docker 的另一个核心概念:
- 容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境
- 包括文件系统、系统类库、Shell 环境等等
- 镜像就像一个只读模板,而容器会给这个只读模板一个额外的可写层
容器的创建与使用-docker create/ps/start/run
容器的创建就是将镜像加载到容器的过程:
- Docker 的容器十分的轻量级,用户可以随机创建或删除
- 新创建的容器默认处于停止状态,即不会自行开始运行任何程序
- 需要开启一个进程来启动容器,该进程是容器的唯一进程,即该进程终止时,容器也会被完全终止
- 停止后的容器可以重启启动并保留原有的修改
'命令格式:'
docker create [选项] [镜像] [运行的程序]
'常用选项:'
-i:让容器的输出保持打开
-t:让Docker分配一个伪终端
'例:'
docker create -it nginx /bin/bash
'#创建新容器后,会返回一个唯一的ID'
--
docker ps -a
'#可以使用该命令查看索引容器的运行状态'
'#“-a”选项表示列出系统最近一次启动的容器'
--
docker start [容器的ID/名称]
'#启动停止状态下的容器'
如果想直接创建并使用容器,可以使用【docker run】命令,等同于先执行【docker create】,再执行【docker start】
需要注意的是,执行该命令,只要后面的命运行结束,容器就会停止
使用【docker run】命令创建容器时,Docker 在后台的标准运行过程:
- 检查本地是否存在指定镜像,若不存在,则会从公共仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统给容器,在只读的镜像层外挂载一层可读写层
- 从宿主机配置的网桥接口中桥接一个虚拟机至容器中
- 分配一个地址池中的 IP 给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止运行
'例:创建容器并启动执行一条shell命令'
docker run centos /usr/bin/bash -c ls /
--
docker ps -a
'#查看容器的状态,会发现在执行完命令后就终止了'
--
docker run -d centos /usr/bin/bash -c "while true;do echo hello world;done"
'#可以添加“-d”选项,可以让docker以守护进程形式在后台运行,即可以在后台持续运行该容器'
'#注:该容器所运行的程序一旦结束,容器也就会被终止'
docker ps -a
容器的运行与终止-docker stop
'命令格式:'
docker stop [容器的ID/名称]
'例:'
docker stop fcd5691107cf
docker stop a17b5d224f47
docker ps -a
'#Exuted即终止状态'
容器的进入-docker exec
需要进入容器进行相应操作时,可以使用【docker exec】命令进入运行中的容器
'命令格式:'
docker exec -it [容器ID/名称] /bin/bash
'例:'
docker exec -it 4aa9da25318d /bin/bash
'#用户可以通过所创建的终端来输入命令'
容器的导出与导入-docker export /import
用户可以将任何一个 Docker 从一台主机迁移至任意一台主机:
- 首选需要将已创建好的容器导出为文件,使用【docker export】命令实现,该容器当前处于运行状态也可以正常导出
- 导出后将该文件传输至其他主机,通过相应的导入命令以实现容器的迁移
- 与镜像的迁移基本同理
'命令格式:'
docker export [容器ID/名称] >文件名
'例:'
docker export 4aa9da25318d >nginx01
ls -l nginx01
--
scp nginx01 [email protected]:nginx01
前往远程输出至的主机进行下一步操作
使用【docker import】命令导入,成为镜像
'命令格式:'
docker import [文件名] [生成的镜像名称][:标签]
'例:'
docker import centos centos:7
'#导入文件nginx01成为本地镜像'
--
docker images |grep centos
容器的删除-docker rm
可以使用【docker rm】命令将一个已处于终止状态的容器删除
'命令格式:'
docker rm [容器ID/名称]
'例:'
docker ps -a
docker rm docker rm fcd5691107cf a17b5d224f47 cf7eb18ebf28 fb95ffa44044 2ee2c9d515b3 e88f1ded4cd
docker ps -a
如果要删除一个正在运行的容器,可以添加“-f”选项以强制删除,但是不建议这么做,最好先停止容器再进行删除操作!
Docker 默认的存储目录在 /var/lib/docker,Docker 的镜像、容器、日志等内容全部都存储于此
可以单独使用大容量的分区来存储这些内容,并且一般选择建立 LVM 逻辑卷,从而避免 Docker 在运行的过程中发生存储目录容量不足的问题