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策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面