Docker

Docker的介绍

是什么

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。

能干嘛

1、更快捷得应用交互和部署

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

2、更快捷得扩缩容

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

3、更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

4、更高效的计算资源和利用

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

Docker的安装

1、前提条件

目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上,要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Centos8.x
查看linux 版本:cat /etc/redhat-release
在这里插入图片描述
查看自己的内核:uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
在这里插入图片描述

2、卸载旧版本

如果以前安装过docker,重新安装必须卸载以前的版本。
卸载命令
官网地址:https://docs.docker.com/engine/install/centos/
命令:直接复制执行即可

yum remove docker \
		   docker-client \
		   docker-client-latest \
		   docker-common \
		   docker-latest \
		   docker-latest-logrotate \
		   docker-logrotate \
		   docker-engine

在这里插入图片描述

3、安装yum gcc相关环境

3.1保证能连上外网
在这里插入图片描述
3.2:执行命令:yum -y install gcc
3.3:执行命令:yum -y install gcc-c++

4、安装需要的软件包

执行命令: yum install -y yum-utils

5、设置stable镜像仓库

执行命令:这里用阿里云的;不用官网的是因为下载慢。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、更新yum软件包索引(这一步可选。不过建议执行以一下)

命令:yum makecache fast

7、安装docker引擎

执行官网命令:yum install docker-ce docker-ce-cli containerd.io
在这里插入图片描述

8、启动docker

命令:systemctl start docker
在这里插入图片描述
在这里插入图片描述

9、测试

9.1、查看docker安装版本信息
命令:docker version
有如下信息表示成功;
在这里插入图片描述

9.2、运行一个镜像是否能成功
在这里插入图片描述
在这里插入图片描述

10、卸载了解即可

10.1、停止docker:systemctl stop docker、
10.2、删除docker配置:yum remove docker-ce docker-ce-cli containerd.io
在这里插入图片描述
10.3、删除docker库: sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
在这里插入图片描述

镜像加速器(阿里云)

作用:加快镜像下载速度。相对于国外的服务器要好很多。
操作的结果:将docker下载镜像的地址配置设置为阿里云。
记住:每个账号的镜像地址都不一样。

1、使用账号登录阿里云
2、找到【容器镜像服务 ACR】
在这里插入图片描述
3、点击管理控制台
在这里插入图片描述
4、就可以看到加速地址了。在linux命令界面下执行红框下的命令就可以了。
在这里插入图片描述

Docker的常用命令

一、帮助启动类命令

1、查看docker状态:systemctl status docker

如下图:docker 处于运行状态
在这里插入图片描述

2、停止dokcer:systemctl stop docker

在这里插入图片描述

3、启动docker:systemctl start docker

如下图:docker处于运行状态
在这里插入图片描述

4、重启docker:systemctl restart docker

在这里插入图片描述

5、设置开机自启动docker:systemctl enable docker

在这里插入图片描述

6、查看docker概要信息:docker info

在这里插入图片描述

7、查看docker总体帮助文档:docker --help

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

8、查看docker命令帮助文档:docker 某个命令 --help

如下图:查看docker命令【cp】的介绍。
在这里插入图片描述

二、镜像命令

1、查看本地主机的镜像:docker images

【1.1】docker images :这个默认命令显示本地所有的镜像,但是不包含【中间映像层】(又名中间层镜像,或历史映像层)
在这里插入图片描述
名词解释
中间映像层:在docker build(构建)过程中,为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像。(目前没有找到人能听懂的解释,貌似就是没有标签的镜像)

表头说明
REPOSITORY :表示镜像的仓库名(或源)
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

【1.2】docker images -a:显示所有镜像包含中间映像层 ;网上没有找到【中间映像层】类似案例,这里没有图片案例

【1.3】docker images --digests:显示镜像的摘要信息
在这里插入图片描述
解释
DIGEST(摘要信息):当你从网络上下载某一个包,如果你想要保证下载的包是完整性并且没有被恶意篡改过,常用的方式就是根据这个包的内容,为这个包生成加密哈希串。如何这个加密哈希串和官网的一样,这就说明下载的这个包没有别篡改过,或者是损坏的包。

【1.4】docker images --no-trunc:显示完整的镜像信息;
IMAGE ID(镜像ID):默认情况下是显示简短的镜像IMAGE ID ,【–no-trunc】这个参数可以显示完整大的IMAGE ID
在这里插入图片描述

【1.5】docker images -q:只显示镜像ID(简短的IMAGE ID)
在这里插入图片描述

【1.6】docker images 仓库名:根据仓库名查询镜像
在这里插入图片描述
也可以加上版本号标签:docker images redis:latest
在这里插入图片描述

2、在远程镜像库查询是否有指定的镜像:docker search 镜像名

【2.1】docker search redis:这里以查看redis为例(默认显示25个版本)
在这里插入图片描述
表头说明
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
OFFICIAL: 是否 docker 官方发布
AUTOMATED: 自动构建。

【2.2】docker search --limit 5 redis:只显示5个版本的redis (类似于mysql的分页)
在这里插入图片描述

3、拉取镜像到本地:docker pull 镜像名

【3.1】docker pull redis:拉取redis(默认拉取latest版本,也是就最新版本,官方认证的)
在这里插入图片描述

【3.2】docker pull redis:6.0.8:拉取reidis的指定版本。
在这里插入图片描述

4、删除镜像:docker rmi -f 镜像ID(IMAGE ID)

【4.1】docker rmi -f 7614ae9453d1:删除latest版本的redis
在这里插入图片描述
【4.2】docker rmi -f 镜像ID1 镜像ID2:删除多个镜像
在这里插入图片描述
【4.3】docker rmi -f $(docker images -aq):删除所有镜像。
docker支持命令复用。这个命令的意思是将符合查询条件结果的镜像ID全部删除,工作中禁用
在这里插入图片描述

5、查看镜像、容器、数据卷所占的空间:docker system df

在这里插入图片描述

三、容器命令

1、新建容器并启动容器
【1.1】:交互式创建容器: docker run 【OPTIONS】 IMAGE 【COMMAND】 【ARG…】

【OPTIONS】参数说明

--name:给新生成的容器取一个名字,如果没有指定名字则有系统默认取一个名字。
-d:后台运行容器并返回容器的ID,也就是守护式容器,也就是后台运行的容器
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
	(例如:在docker中生成并运行一个linux容器,并用这个linux容器的终端(伪终端)进行一系列操作)-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

【1.1.1】docker run -it ubuntu /bin/bash:创建一个ubuntu版本的linux容器 并进入Linux容器的伪终端,这个伪终端可以执行一起linux命令。

写法2:docker run -it ubuntu bash :效果和上面是一样的。

当然也可以指定镜像的版本号,例如:docker run -it ubuntu:1.1.0 /bin/bash
在这里插入图片描述
902f72743e31 :这个是生成容器的编号,是唯一的。相当于数据库的主键id;有这个编号,就如上图所示,表示已经进入了这个容器的终端。这个终端可以执行linux的命令,例如查看当前目录的文件 ls

bin/bash :表示载入容器后运行bash ,docker中必须要保持该容器的一个进程的运行,要不然整个容器启动后就又停止运行了。

【1.1.2】也可以在生成的容器的时候给容器指定名字:docker run -it --name=myUbuntu ubuntu /bin/bash
在这里插入图片描述
查看处于运行状态的容器必须是宿主机下查看(建议另开一个终端查看)
docker ps:查看处于运行状态的容器(下一节有该命令的详细案例)。
在这里插入图片描述

【1.2】 守护式创建容器,也就是容器是以后台运行的

命令:docker run -d 镜像名:版本号
在这里插入图片描述
注意:有些镜像使用守护式创建容器(如ubuntu)。容器会停止,这个是docker的机制问题,这种情况就只能使用交互式,然后再退到宿主机。

2、查看处于运行状态的容器:docker ps 【OPTIONS】

在这里插入图片描述
表头说明
CONTAINER ID :容器的id
IMAGE:使用的镜像
COMMAND:启动容器时运行的命令
CREATED:容器的创建时间。
STATUS:容器状态(created:已创建;restarting:重启中;running:运行中;removing:迁移中;paused:暂停;exited:停止;dead:死亡;)。
PORTS:容器的端口信息和使用的连接类型(tcp\udp)
NAMES:系统自动分配或自定义的容器名称。

OPTIONS 参数说明

-a :显示所有的容器,包括未运行的。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
-q :静默模式,只显示容器编号。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
--no-trunc :不截断输出。
-s :显示总的文件大小。

【2.1】docker ps -a :显示所有的容器,包括未运行的。
在这里插入图片描述
【2.2】docker ps -l : 列出最近创建的2个容器。
在这里插入图片描述

【2.3】docker ps -n 3 : 列出最近创建的3个容器。
在这里插入图片描述
【2.4】docker ps -q: 静默模式,只显示容器编号(未带其他参数就是显示正在运行的容器id)。
在这里插入图片描述

3、退出容器

【3.1】exit:在创建一个容器时,并且使用进入了这容器的终端。如果这时使用exit这个命令退出,产生的结果是退出这容器成功。但是容器也停止运行了。(仅限这种情况下的第一次退出容器会发生这种情况,再次启动退出就不会停止运行了。)
1、创建一个容器。并进入了这个容器的伪终端
2、使用【docker ps 】查看当前存活的终端:有一个正在运行的容器
3、使用命令【exit】退出容器伪终端。
4、容器也跟着停止运行了。
在这里插入图片描述
如果再启动这个容器并进入这容器的伪终端。再使用这exit退出。则容器不会停止运行
1、使用命令【docker ps -a】查看所有容器。
2、使用命令【docker restart 68e42cbbb5c5】启动容器
3、使用命令【docker ps】查看正在运行的容器
4、使用命令【docker exec -it 68e42cbbb5c5 /bin/bash】进入容器伪终端
5、使用命令【exit】退出终端
6、再次使用命令【docker ps】查看正常运行的容器。:结果:容器没有停止运行
在这里插入图片描述
如何避免上述情况,就是第一次退出容器。让容器不会停止运行。解决方法:使用组合按键【ctrl+p+q】退出容器。
1、创建一个新容器,并进入了这容器的伪终端
2、查看容器是否正在运行
3、使用组合按键【ctrl+p+q】退出容器伪终端。
4、查看容器是否正在运行:结果:容器没有跟着退出容器终端而停止运行。
在这里插入图片描述
知识点:使用组合按键退出容器在任何情况下都不会停止容器。

4、启动已经停止的容器:docker start 容器id

案例命令: docker start 78296b930b5a在这里插入图片描述

5、重启容器:docker restart 容器id ;也可以用于启动容器。

【4.1】docker restart 78296b930b5a
在这里插入图片描述

5、如何进入正在运行的容器的伪终端:docker exec -it 容器id bash

【5.1】命令1:docker exec -it 78296b930b5a bash 或者使用命令:docker exec -it 78296b930b5a /bin/bash
在这里插入图片描述
【5.2】命令二:docker attach 容器id
在这里插入图片描述
总结:
二者区别:attach 直接进入容器启动命令的终端,不会启动新的进程,exec 是在容器中打开新的终端,并且可以启动新的进程
attach 进入的终端,使用命令exit退出会使容器停止,exec 不会。所以使用attach 进入终端必须使用组合按键【ctrl+p+q】退出终端。

6、 停止正在运行的容器:docker stop 容器id

示例命令:docker stop 78296b930b5a
在这里插入图片描述

7、杀死正在运行的容器(强制停止):docker kill 容器di

示例命令:docker kill 78296b930b5a
在这里插入图片描述

8、删除停止的容器:docker rm 容器id

示例命令:docker rm 78296b930b5a

更多命令: docker rm -f 容器id — 这个可以删除正在运行的容器
工作中禁用命令:docker rm -f $(docker ps -a -q) --删除所有容器,包括运行中的。或者:docker ps -a -q | xargs docker rm -f
在这里插入图片描述

9、查看容器运行日志:docker logs 容器id

示例命令:docker logs 0c2315e3fe72
在这里插入图片描述

10、查看容器内运行进程: docker top 容器id

示例命令:docker top 0c2315e3fe72
在这里插入图片描述

11、查看容器内部细节: docker inspect 容器id

示例命令:docker inspect 0c2315e3fe72
在这里插入图片描述

12、从容器中拷贝文件到宿主机:docker cp 容器id:容器中的文件全路径 宿主机的目标全路径

任务:将容器(642266374c12)中的【/tmp/leo.txt】 文件拷贝到宿主机的【/opt】 目录下。
案例命令:docker cp 642266374c12:/tmp/leo.txt /opt

注意:这个命令必须实在宿主机下面执行。
在这里插入图片描述

13、从宿主机拷贝文件到容器中:docker cp 要拷贝的文件路径 容器id:要拷贝到容器里面对应的路径

需求:将宿主机上的 【/opt/leo2.txt】文件拷贝到容器(642266374c12)中的【/tmp】目录下。
示例命令:docker cp /opt/leo2.txt 642266374c12:/tmp

注意:这个命令必须实在宿主机下面执行。
在这里插入图片描述

14 容器的导出和导入

【14.1】导出:将容器以一个压缩包文件的形式导出到宿主机

案例:将容器【642266374c12 】以一个压缩包的形式导出到宿主机的/tmp目录下并取名叫【MyUbuntu.tar】
示例命令:docker export 642266374c12 >/tmp/MyUbuntu.tar
在这里插入图片描述
【14.2】将容器压缩包生成一个镜像并用这个镜像创建一个容器 :
【142.1】将容器压缩包【MyUbuntu.tar 】生成一个镜像【leo/myubuntu:1.0.1】(这里的镜像名字和版本号自己随便取名)

示例命令:cat /tmp/MyUbuntu.tar | docker import - leo/myubuntu:1.0.1
在这里插入图片描述
【142.2】:使用自定义的镜像生成容器。
生成容器中有当时测试使用的自定义文件(leo.txt;leo2.txt) 这个容器依然是可以正常运行的。
在这里插入图片描述

面试题

1、什么是虚悬镜像

仓库名、标签均为的镜像被称为虚悬镜像,一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值