Docker系列--- Docker 基本操作 | 详细讲解

一、Docker 镜像操作

前言:
Docker 运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker 就会尝试从默认镜像仓库【https://hub.docker.com】下载,这是 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求
当然了,用户也可以通过配置来使用自定义的镜像仓库

镜像工作流程
1, docker client客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的) restful api典型的c/s架构
2、由docker服务端的守护进程从docker hub上下载了镜像
3、服务端创建了一个新的容器,然后从拉去的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用
4, 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 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 d1a364dc548d

在这里插入图片描述

为了更方便在后续的工作中使用下载好的镜像,我们可以使用【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 nginxv1:latest

在这里插入图片描述

‘#当一个镜像有多个标签时,该命令只会删除多少标签中的这个指定标签,而不会影响镜像文件’
‘#若该镜像只有一个标签就要注意了,再使用该命令会直接彻底删除该镜像!’

docker rmi  11e8bf67e2d3

在这里插入图片描述

‘#选择参数为镜像ID号时要谨慎,必须首先确保该镜像当前没有被容器使用’
‘#如果该镜像已被容器使用,则需先删除所以依赖该镜像的容器,再删除该镜像’
‘#删除时系统会先删除指向该镜像的所有标签,然后删除镜像本身’

⑤存出镜像和载入镜像–docker save/load

如果你需要进行镜像迁移,需要先将镜像保存至本地文件,之后可以拷贝该文件至其他主机
这一过程称之为存出镜像,使用【docker save】命令操作

'命令格式:'
docker save -o [存储文件名] [存储镜像]

'例:'
docker save -o nginx nginx
ls -l nginx

--
scp nginx root@192.168.126.16:nginx

'#传至另一台主机'

在这里插入图片描述
在这里插入图片描述

如果需要将存出的镜像从主机 A 迁移至主机 B 上使用,可以将该导出文件导入到主机 B 的镜像库中
这一过程称之为载入镜像,使用【docker load】进行载入操作

'命令格式:'
docker load <[存出文件]

'例:'
docker load <nginx

docker images

在这里插入图片描述

⑥上传镜像–docker login/push

在本地存出的镜像越来越多,我们可以指定一个仓库来存放这些镜像
目前最方便的就是公共仓库,默认是上传到 Docker Hub 官方仓库,但需要注册使用公共仓库的账号,可以使用【docker login】命令输入用户名、密码和邮箱来登录

'例:'
docker login

'需要先去【https://hub.docker.com】注册一个账号,注册过程很简单'

在上传镜像前需要对本地镜像添加新的标签,然后再使用【docker push】命令进行上传

'命令格式:'
docker tag [名称][:标签] [账号名][/名称][:新标签]
docker push [账号名][/名称][:新标签]

二、Docker 容器操作

容器是 Docker 的另一个核心概念:
容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境
包括文件系统、系统类库、Shell 环境等等
镜像就像一个只读模板,而容器会给这个只读模板一个额外的可写层

①容器的创建与使用–docker create/ps/start/run

容器的创建就是将镜像加载到容器的过程:
Docker 的容器十分的轻量级,用户可以随机创建或删除
新创建的容器默认处于停止状态,即不会自行开始运行任何程序
需要开启一个进程来启动容器,该进程是容器的唯一进程,即该进程终止时,容器也会被完全终止
停止后的容器可以重启启动并保留原有的修改

'命令格式:'
docker create [选项] [镜像] [运行的环境]

'常用选项:'
-i:让容器的输出保持打开
-t:让Docker分配一个伪终端
-d:后台守护进程

'例:'
docker create -itd nginx /bin/bash
'#创建新容器后,会返回一个唯一的ID'

--
docker ps -a
docker ps -aq
'#可以使用该命令查看索引容器的运行状态'
'#-a"选项表示列出系统最近一次启动的容器'
'#-q"显示容器ID

--
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 f807d7da17bb
docker stop f807d7da17bb

docker ps -a

'#Exuted即终止状态'

在这里插入图片描述

③容器的进入–docker exec

需要进入容器进行相应操作时,可以使用【docker exec】命令进入运行中的容器

'命令格式:'
docker exec -it [容器ID] /bin/bash

'例:'
docker exec -it ee52b1ff3f87 /bin/bash

'#用户可以通过所创建的终端来输入命令'

在这里插入图片描述

④容器的导出与导入–docker export/import

用户可以将任何一个 Docker 从一台主机迁移至任意一台主机:
首选需要将已创建好的容器导出为文件,使用【docker export】命令实现,该容器当前处于运行状态也可以正常导出
导出后将该文件传输至其他主机,通过相应的导入命令以实现容器的迁移
与镜像的迁移基本同理

'命令格式:'
docker export [容器ID] >文件名

'例:'
docker export 4aa9da25318d >nginx01
ls -l nginx01 

-
scp centos01 root@192.168.78.22:/root/centos01

在这里插入图片描述

前往远程输出至的主机进行下一步操作

使用【docker import】命令导入,成为镜像

'命令格式:'
cat [文件名] |docker import - [生成的镜像名称][:标签]

'例:'
ls -l nginx01

cat nginx01 |docker import - nginx01:xcf

'#导入文件nginx01成为本地镜像'


docker images |grep nginx

在这里插入图片描述

⑤容器的删除–docker rm
可以使用【docker rm】命令将一个已处于终止状态的容器删除

‘命令格式:’
docker rm [容器ID/名称]

‘例:’
docker ps -a

docker rm $(docker ps -aq)

docker ps -a

在这里插入图片描述

如果要删除一个正在运行的容器,可以添加“-f”选项以强制删除,但是不建议这么做,最好先停止容器再进行删除操作!

Docker 默认的存储目录在 /var/lib/docker,Docker 的镜像、容器、日志等内容全部都存储于此
可以单独使用大容量的分区来存储这些内容,并且一般选择建立 LVM 逻辑卷,从而避免 Docker 在运行的过程中发生存储目录容量不足的问题

面试题:

生产环境配置
{
graph": "/data/docker"                                              //数据目录
"storage-driver": "overlay2",                                       //存储引擎
"insecure-reqistries":"reqistry.access. redhat.com", ","quary.io"]  //私有仓库
"registry-mirrors": ["https://加速镜像地址"]                          //镜像加速
"bip": "172.7.5.1/24",                                             //docker网络
"exec-opts": ["native.cqroupdriver=systemd"]                       //启动时候的额外参数(驱动)
"live-restore": true                                               //当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值