Docker Compose
解决了本地docker容器编排问题
compose由python编写,调用Docker服务提供的API来对容器进行管理
负责实现对Docker容器集群的快速编排,用一个配置文件定义一个多容器的应用,然后用一条指令安装这个应用所有的依赖,完成构建,解决了容器与容器之间如何管理编排的问题
两个重要概念:
- service:一个应用容器,实际上可以运行多个相同镜像的实例
- project:由一组关联的应用容器组成一个完整业务单元
使用docker-compose.yml进行管理
实例:
xxx@xxx-virtual-machine:~/docker_test$ cat docker-compose.yml
version: '3'
services:
control:
image: ubuntu
container_name: pmjcontrol
privileged: true
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /usr/bin/docker:/usr/bin/docker:ro
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose:ro
- /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7:ro
command: sleep 100000
例程:
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
test:
image: nginx:1.14-alpine
container_name: mynginx
command: ifconfig
networks:
app_net: # 调用下面 networks 定义的 app_net 网络
ipv4_address: 172.16.238.10
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
运行启动项目:
#查看帮助
docker-compose -h
# -f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
#启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d
#停用移除所有容器以及网络相关
docker-compose down
#查看服务容器的输出
docker-compose logs
#列出项目中目前的所有容器
docker-compose ps
#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build
#拉取服务依赖的镜像
docker-compose pull
#重启项目中的服务
docker-compose restart
#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm
#在指定服务上执行一个命令。
docker-compose run ubuntu ping docker.com
#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2
#启动已经存在的服务容器。
docker-compose start
#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop
Docker Machine
解决了docker运行环境的问题,配置并管理宿主机(具有docker engine的主机)
- dockers基于linux内核的cgroup实现的,如果在非linux平台上使用docker技术,需要依赖安装linux系统的虚拟机
- docker machine可以在各个平台上快速创建具有docker服务的虚拟机,可以理解为virtualbox或者vmware
- win10上自带了hyper-v虚拟机,docker可以直接运行在linux系统的hyper-v上
应用场景:
- 在 Mac 或 Windows 上使用 Machine 在 VirtualBox 中安装和运行 Docker Engine
- 使用docker machine在本地运行docker。在Mac或者windows box中使用docker Toolbox安装程序安装Docker Machine将为Docker Engine配置一个本地的虚拟机,使能够连接并运行docker命令
- 使用 Machine 在云提供商上 provision Dockerized 宿主机
Docker Swarm
解决了多主机多容器的调度部署问题
也是容器编排项目,与compose的区别在于,docker compose是一个在单个服务器或主机上创建多个容器的工具,而swarm则是可以在多个服务器或者主机上创建容器集群服务,对于微服务的部署,显然是docker swarm更为合适
将docker主机池转变为单个虚拟Docker主机,提供了标准的Docker API,所有任何已经与Docker守护程序通信的工作都可以使用swarm轻松扩展到多个主机
swarm集群=swarm manager+work node