Docker 引擎统一了基础设施环境,包括硬件配置,操作系统的版本,运行时环境的异构
Docker 引擎统一了程序打包(装箱)的方式,例如 java 程序,go 程序,python 程序等等
Docker 引擎统一了程序部署(运行)方式,例如 java 的部署运行方式为 java -jar...
,或者 python 的部署运行 python manage.py runserver
,go 的部署运行 go run ...
现在使用 Docker 容器,统一使用 docker run …
docker compose 是单机部署的,使用集群部署我们可以使用 docker stack
例如 docker compose 部署单机是这个样子的:
docker-compose up -d xxx.yml
使用 docker stack 的时候,我们可以这样:
docker stack depoly xxx.yml
咱们来看看 docker stack
是什么?
★Docker 在进行多服务部署和管理时通常会使用Docker Stack来解决大规模部署管理问题 Docker引擎在1.12 版本集成了Docker Swarm, 内置新的容器编排工具docker stack,通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理 ”
说白了,docker stack
可以完成docker
本身做不到的事情,就是他可以完成容器编排,但是这里我们就会有这么一个疑问?有了 docker compose
为什么还要有docker stack
?
Docker swarm 是 Docker 的本机群集
它将 Docker主机池转变为单个虚拟Docker主机
Docker swarm 提供标准的 Docker API,任何已经与 Docker 守护进程通信的工具都可以使用Swarm透明地扩展到多个主机
服务可理解为发布到生产环境时某组容器的预期状态 ,以及强化了( 复制集、 容器重启策略、回滚策略、服务更新策略 )等生产特性
总得来说,docker stack 适用于生产环境的编排工具,而 docker-compose 更适合被定义为单机容器编排的工具
# docker stack --help
Usage: docker stack [OPTIONS] COMMAND
Manage Docker stacks
Options:
--orchestrator string Orchestrator to use (swarm|kubernetes|all)
Commands:
deploy Deploy a new stack or update an existing stack
ls List stacks
ps List the tasks in the stack
rm Remove one or more stacks
services List the services in the stack
Run 'docker stack COMMAND --help' for more information on a command.
命令 | 描述 |
---|---|
docker stack deploy | 部署新 stack 或更新现有 stack |
docker stack ls | 显示 stack 列表 |
docker stack ps | 列出 stack 中的任务 |
docker stack rm | 移除一个或多个 stack |
docker stack services | 列出 stack 中的服务 |
例如咱们在随便在网上就可以找一个例子,
DockerFile 里面写使用 docker stack
时,就可以写成 deploy:
来进行指定
是一个容器化平台以容器的形式将应用程序及其所有依赖项打包,确保应用程序在任何环境中无缝运行
Docker 里面有 docker 镜像,docker 容器 和 docker 仓库
是docker容器的源代码,Docker镜像用于创建容器
它不依赖于任何特定的基础架构,它们可以在任何计算机,任何基础架构和任何云中运行
用来保存镜像的,可以看做是一个代码控制中心
docker 不是虚拟化方法,他是一个工具,用于容器化系统上的容器管理或应用程序部署
它依赖于实际实现基于容器的虚拟化或操作系统及虚拟化的其他工具,Docker主要专注于在应用程序容器内自动部署应用程序
docker默认的网络配置,可以设置IP,但是要与docker host主机的虚拟网络在同一网段
不会给容器进行任何网络配置
直接使用 docker 宿主机的网络
与已经存在的容器共有同一个IP地址
自定义网络,咱们可以使用 docker network create
来新建一个网络
咱们可以使用 挂载卷,就是在创建容器的时候使用 -v
参数,进行绑定挂载,匿名挂载,或者具名挂载 ,咱们就可以将宿主机的目录或者文件挂载到容器中
绑定挂载
就是明确将自己宿主机的目录或者文件,对应到容器中指定的目录或文件,会有这样的特点:
匿名 / 具名挂载
就是 -v
后面带的参数若只写容器中的路径(匿名挂载)或者写了一个代号,指定容器中的路径(具名路径)
默认为挂载到容器的工作目录,/var/lib/docker/volumes
下面
每个容器都是在自己的命名空间中运行,但使用与所有其他容器完全相同的内核
发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源
使用ctrl+ q + p
即可
docker kill $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -aq)
构建镜像基于哪个镜像
镜像维护者姓名或邮箱地址
构建镜像时运行的指令
运行容器时执行的shell环境
指定容器挂载点到宿主机自动生成的目录或其他容器
为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
健康检查
构建时指定的一些参数
声明容器的服务端口(仅仅是声明)
设置容器环境变量
拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
运行容器时执行的shell命令
关于 Docker 的学习资料其实都在 docker hub上面,我们可以不断的学习,实战,总结,优化思维,逐步进阶
参考资料:
docker docs
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~