Docker

Docker命令

镜像

功能 命令
查找镜像 docker search 镜像名称
拉取镜像 docker pull 镜像名称:标签(版本号)
查看本地镜像 docker images
删除镜像 docker rmi 镜像名称:版本号

创建并运行容器

命令:docker run 参数... 镜像名称

参数如表格所示

功能 参数
端口映射 # 将主机端口映射到容器中的某端口 -p(小写) 主机端口:容器端口 暴露容器中的所有端口到主机的随机端口-P(大写)
指定容器名称 --name 容器名称
容器关闭时自动删除 --rm
重启策略 指定容器关闭时的重启策略,有三种可选策略 no(默认):表示不重启 on-failure:当失败时重启,还可以加上 :3 指定最多重启3次,如果3次都失败就不再重启了 always:只要已关闭就自动重启--restart 策略
环境变量 # 环境变量使用 name=value 的方式,可以配置多个, 使用逗号分割-e 环境变量 或 --env 环境变量
限制容器资源 -cpus 指定可使用 cpu 数量 --memory bytes 限制内存使用大小

容器

查看容器 docker ps -a
删除容器 docker rm 容器id或名称
停止容器 docker stop 容器id或名称
启动容器 docker start 容器id或名称
查看容器日志 docker logs 容器id或名称
进入容器内部 docker exec -it 容器id或名称 进入后执行的命令

Docker

没有docker部署有啥问题

部署流程繁琐

环境不一致

资源隔离问题

交付流程复杂

Docker是什么

Docker :是基于 LXC(Linux container- Linux 容器)虚拟容器技术的。是一个容器引擎,用于管理客器的生命周期容器(安装成功后的软件),

你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要

虚拟化技术 :

是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、

转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。

由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。

这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储

Docker基本组成

Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。

容器(Container) :安装成功后的软件,容器用于运行一个软件,这个容器里面准备了软件运行所需要的---系列依赖

镜像(Image):软件的安装包,容器中需要哪兰内容,以及对应的配置信息,全部打包在这里面

仓库(Repository):用于存放各个镜像,对镜像进行統一管理

Docker的架构

Docker是 C/S 架构:客户端/服务端模式

Docker 由三部分组成:

Docker Client (docker客户端):向服务端发起请求,比如下载镜像,管理容器生命周期等操作(命令行)

Docker Daemon(守护进程):包括 Docker Server:服务端,接收请求Engine:容器引擎,真正负责执行对应的任务

Docker Registry(docker镜像) :存储镜像,用户相关信息 镜像仓库 Docker Hub 阿里云 Docker 镜像仓库

Docker 命令

数据卷Volume

为了实现数据持久化,使容器之间可以共享数据。可以将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享的操作。

即使将容器删除,挂载到本地的数据卷也不会丢失。

你可以将数据卷理解为文件目录的映射,我们可以通过 Docker 提供的相关命令,来将主机中的某一个文件目录映射到容器中,此时当你在容器中操作该目录下的文件时,实际上操作的就是主机中的文件。

匿名绑定

在启动容器时直接使用 -v /container_dir 即可完成匿名绑定

匿名绑定的方式将在 Docker 的 volumes 目录下生成一个 sha256 的字符串作为目录名

匿名绑定的 volume 在容器被删除的时候,数据卷也会被删除,不能实现持久化

查看数据卷在主机的哪个位置 :docker inspect container_id

具名绑定

同样是启动容器时绑定一个数据卷,不同的是可以为该数据卷起个名字

命令: -v volume-name:container_dir

通过名字你可以快速的定位并管理这些 volume

具名绑定删除容器,不会删除数据卷,可以实现数据持久化,

Bind Mount

匿名绑定 和具名绑定 都是在docker volumes 目录下生成文件,而不能绑定外部主机的某个自定义文件

Bind mount 可以绑定并加载主机的某个文件目录到容器中,这种方式是平常最常用的

也是在容器启动时使用 -v

命令 :-v host_dir:container_dir(主机目录:容器内目录),可以使用多个 -v 同时绑定多个目录

数据卷管理

docker volume 命令 用于管理 数据卷

create 创建一个数据卷

inspect 显示一个或多个数据卷的详细信息

ls 查看目前已有的数据卷列表

prune 删除所有本地没有被使用的数据卷

rm 删除一个或多个数据卷

网络Network

基本概念

Docker 对 容器网络隔离的技术,提供了多种不同的模式来实现网络互动和隔离

作用 :

容器间的网络隔离

实现部分容器之间的网络共享

管理多个子网下容器的 ip

bridge(桥接模式)

在主机中创建一个 Docker0 的虚拟网桥 ,docker0 负责实现主机跟容器内网卡互动

主机 ---> docker0 -->docker0创建伊对虚拟网卡,一半在主机(vethxx),一半在容器(eth0) ---> 访问 容器

桥接模式容器 互联 :docker 时 link 两个容器 ,就可以直接ping到 另一个容器名

Host模式

容器不再拥有自己的网络空间,而是直接与主机共享网络空间

那么基于该模式创建的容器对应的 ip 实际就是与主机同一个子网,同一个网段。

主机 :168.192.113.121 容器 :168.192.113.1xx

None模式

Docker 会拥有自己的网络空间,不与主机共享

在这个网络模式下的容器,不会被分配网卡、ip、路由等相关信息。

相当于不连外网,完全隔离,只有自己的本地网络

container模式

就是不会创建自己的网络空间,而是与其他容器共享网络空间,直接使用指定容器的ip/端口等

自定义(推荐)

不使用 Docker 自带的网络模式,而是自己去定制化自己特有的网络模式。

命令:

docker network COMMAND

create 创建网络

通过参数 自定义

Driver 网络连接方式

gateway 网关端口 ip

ipv6

subnet 子网

等等

跨不同网络容器间通信

使用 docker network conntct A B 命令 可以关联不同模式容器的网络

DockerFile

Docker 为用户提供的 用于自定义构建镜像的配置文件

描述如何构建镜像对象

docker build 指定 dockerfile文件,就可以按配置构建镜像

可以自定义镜像内容

构建公共基础镜像减少其他镜像配置

开源程序的快速部署

实现企业内部项目的快速交付

DockerFile 指令

构建镜像

Commit :基于一个现有的容器,构建一个新的镜像

构建步骤 :

构建一个dockerfile文件

docker build 构建成为一个镜像

docker run 运行镜像

docker push 发布镜像(DockerHub、阿里云镜像仓库)

仓库

Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。我们将镜像仓库分为公共镜像仓库和私有镜像仓库。

作用 :

实现快速交付,可以更方便在其他机器上下载镜像运行容器

可以存储公司内部私有镜像,避免暴露到外网

提升镜像下载速度

常见的仓库 :docker hub 阿里云

私有仓库

Nexus

创建持久化目录

mkdir -p /opt/docker/nexus

#开放权限

chmod 777 -R /opt/docker

启动nexus 容器

docker run -d --restart=always -p 8868:8081 -p 5000:5000 -p 5001:5001 --name nexus -v /opt/docker/nexus:/nexus-data sonatype/nexus3

Harbor :使用 Harbor 必须要先安装 docker 以及 docker-compose

容器编排

容器编排:对容器的生命周期进行更快速方便的方式进行管理

功能 : 依赖管理、副本数控制、配置共享

Docker compose

单机环境的容器编排

compose 版本与 docker 版本之间存在一定关联

它通过 yaml 配置文件的方式完成之前执行 docker run 命令所设置的所有参数(网络、数据卷、服务等 )

你可以先针对单机上的所有容器进行相关配置,配置完成后即可使用 docker-compose 对单机多容器进行高效的管理

扩缩容 : scale 命令指定容器数量 例 : docker-compose sacle xxx = 5

Compose 命令

build 构建或重新构建一个服务

bundle Generate a Docker bundle from the Compose file

config 验证并查看 compose 文件

create 创建一个服务

down 停止并删除容器、网络、镜像和数据卷

events Receive real time events from containers

exec 在一个运行中的容器执行命令

help 获取帮助信息

kill 关闭一个容器

logs 显示服务的日志信息

pause 暂停一个服务

port 打印一个端口绑定的公开端口

ps 查看容器列表

pull 拉取镜像

push 推送镜像

restart 重启容器

rm 删除已经停止的容器

run 运行一个一次性执行的命令

scale 设置服务的容器数量

start 启动服务

stop 停止服务

unpause 恢复一个暂停的服务

up 创建并启动一个容器

version 显示 compose 的版本信息

Swarm(分布式编排)

Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,Swarm 使用标准的 Docker API 接口作为其前端的访问入口

相对于 compose Docker Swarm 则可以在多个服务器或主机上创建容器集群服务

Swarm关键概念

1.Swarm

集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm

是节点维护相关的命令

2.Node

一个节点是docker引擎集群的一个实例。可以将其视为Docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。

节点分为管理 (manager) 节点和工作 (worker) 节点。

管理节点只负责管理,包含的资源更少

3.Service

服务 (Services) 是指一组任务的集合,服务定义了任务的属性。

服务有两种模式:

replicated services 按照一定规则在各个工作节点上运行指定个数的任务。

global services 每个工作节点上运行一个任务

两种模式通过 docker service create 的 --mode 参数指定。

4.Task

任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器

任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点

结构 :swarm 采用主从的方式 来管理 过个docker节点

Swarm弹性伸缩

指定容器数量 : scale命令

调整实例个数 :docker service update --replicas <service id/name>

调整集群大小 : 加入集群 docker swarm join 退出集群"docker swarm leave

Swarm的调度策略

Swarm在调度的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.

1 Random

顾名思义,就是随机选择一个Node来运行容器

2 Spread

在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。

3 Binpack

Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面

相关推荐
ZHOU_WUYI1 小时前
windows 中docker desktop 安装
运维·docker·容器
风霜不见闲沉月3 小时前
k8s网络服务
linux·容器·kubernetes
杨浦老苏4 小时前
隐私友好型分析平台Plausible Analytics
docker·群晖·网络分析
JunLan~5 小时前
安装 Docker(使用国内源)
linux·docker·容器
踏雪Vernon6 小时前
[OpenHarmony5.0][环境][教程]OpenHarmony 5.0源码在WSL2 Ubuntu22.04 编译环境搭建教程
linux·docker·鸿蒙系统
.生产的驴16 小时前
Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册
数据库·分布式·后端·spring cloud·docker·容器·负载均衡
苦逼IT运维19 小时前
Docker 配置 HTTP 和 HTTPS 网络代理
网络·http·docker
杨浦老苏1 天前
开源客户关系管理平台EspoCRM
docker·crm·群晖
胡八一1 天前
解决k8s拉取私有镜像401 Unauthorized 问题
云原生·容器·kubernetes
筑梦之路1 天前
银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路
docker·容器·kubernetes