Docker管理工具
Docker Compose
DockerFile只能是定义个容器,而Docker Compose可以定义多个。
Docker Machine
简化了按照宿主机及操作系统特有的安装及配置步骤,及简化了安装Docker后才能运行Docker这一过程。
提供了多平台多Docker主机的集中管理,使得应用由本地迁移到云端变得简单,只需要修改一下环境变量即可和任意Docker主机通信部署应用,可以使用一条命令就可以在公有云平台、私有云平台等地方创建及管理Docker主机。
Docker Swarm
管理Docker集群的工作,可以单独部署一个节点,解决了Docker容器和宿主机的紧耦合、迁移、分组等问题。
将一组Docker Engine作为一个集群进行管理,并提供了label、schedule、filter的能力,其中调度部分,允许用户定制主机的调度策略。
Docker Tutum
提供容器管理云服务,使得用户可以方便的创建、启动、查看、关闭或部署容器,也提供了一个总览页面来方便用户在一处查看所有容器的状态。
Docker Shipyard
基于Web的Docker管理工具,支持多主机,可以把多个Docker主机上的容器统一管理,可以查看镜像,build镜像,并提供RESTful API等。
Docker cAdvisor
谷歌旗下的开源工具,监控图默认1秒刷新一次,显示最近一分钟的实时数据,不显示汇聚和历史数据,也没有阈值告警功能,此外无法同时监控多个Docker主机,不过由于简单、方便,而且具备很好的实时性能监控能力,所以适合特殊情况下的性能监控和问题排查。
Docker Compose
Docker Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写,使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等,然后一条命令管理所有服务,如启动、停止、重启等。
DockerFile只能定义一个容器,而DockerCompose可以定义多个。
Docker Compose的ersion版本统一用3,3是兼容2的,version版本1已经废弃了;3和2最大的区别是3支持多机和单机,2仅支持单机;
Docker Compose没有解决负载均衡的问题,因此需要借助其他工具实现服务发现和负载均衡。
Docker Compose将管理的容器分为三层,工程(Project)、服务(Service)及容器(Container),一个工程中可以包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务当中可以包括多个容器实例。
安装
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
#添加权限
chmod +x /usr/local/bin/docker-compose
#测试
docker-compose --version
# Pip工具安装
pip install docker-compose
YAML文件
Docker-Compose是使用.yml文件来编写的。
YAML是一种标记语言,很直观的数据序列化格式,可读写高,类似于Xml数据描述语言,语法比Xml简单的多;YAML数据结构通过缩进来标识;连续的项目通过减号来标识;键值对用冒号分隔;数组用中括号;hash用花括号;
不支持制表符Tab缩进,需要使用空格缩进;
通常开头缩进2个空格;
字符后缩进一个空格,如冒号、逗号、横杆
用#进行注释、说明
特殊字符用单引号引起来
布尔值(true、false、yes、no、on、off)必须用引号括起来,这样分析器才会解释为字符串
常用命令
#构建启动配置文件中指定的服务名容器,如果不加-f则默认为当前目录下的docker-compose.yml和docker0compose.override.yml文件
docker-compose up -d 服务名
docker-compose -f docker.yml up -d tomcat
#创建或重新创建服务使用的镜像
docker-compose build 配置的服务名称
#进入容器
docker-compose exec 服务名 bash
docker-compose -f 文件名 exec 服务名 bash
#删除所有容器、镜像
docker-compose down
#查看运行的容器
docker-compose ps
#重新启动容器
docker-compose restart 服务名
#在php-fom中不启动管理容器,并在容器执行 phpo -v 执行完成后删除容器
docker-compose run -no-deps--rm php-fom php -v
#构建镜像
docker-compose build 服务名
#不带缓存的构建
docker-compose build --no-cache 服务名
#查询服务的日志
docker-compose logs 服务名
docker-compose -f logs 服务名
#验证配置文件,正确不输入,错误输出
docker-compose config -q
#以json的形式输出此服务的docker日志
docker-compose events –json 服务名
#暂时此服务容器
docker-compose pause 服务名
#恢复此服务容器
docker-compose unpause 服务名
#删除容器
docker-compose rm 服务名
#停止容器
docker-compose stop 服务名
#启动容器
docker-compose start 服务名
常用配置文件参数
#services标签下的第二集标签是web,这个名词是用户自定义的服务名称,image则是指定服务的镜像名称或镜像id
services:
web:
image: hello-world
build:构建镜像上下文路径,出了可以基于指定的镜像,还可以基于一份dockerfile,在使用up启动之时执行构建任务,这个构建标签就是build,可以指定dockerfile所在的文件夹路径dockerfile
image:来自的镜像
args:构建参数,在dockerfile中指定的参数可以在构建过程中指定环境变量,但是在构建成功之后取消,与EVN不同的是arg允许控制
build:
content: .
args:
- build=1
- test
on: 第二种写法
command:覆盖容器启动后默认执行的命令,如cammand: [bunle,exec,thin,-I,3000]
container_name:自定义容器名称吗,如果自定义名称,则无法将服务scale到1容器之外
deploy:指定与部署和运行相关的配置,限版本3
depends_on:服务之间的依赖,控制服务启动顺序,正常是按顺序启动服务,如在没有启动数据库的情况下,先启动了应用,这时就会出现找不到数据库的问题,因此这个标签就解决了容器依赖、启动先后的问题。
dns:自定义DNS服务器,可以是单个值或列表
entrypoinse:覆盖entrypoint
env_file:从文件中添加环境变量,可以是单个值或列表,即可以单独定义一个存储变量的文件
environment:添加变量,可以是数字或字典,布尔值用括号括起来,会吧变量保存到镜像中,类似docker run -e指定容器的环境变量,而arg仅仅只能用在构建过程中
expose:容器服务端口
links:连接到另外一个容器,depends_on是解决启动顺序,而这个可以解决连接问题
links:
-db
-db:databases
-redis
external_links:连接Compose之外的容器
extra_hosts:添加主机名映射,与--add-host相同,往/etc/hosts文件中添加一些记录
logging:记录该服务的日志,与--log-driver相同,配置日志服务
network_mode网络模式,与-net相同
networks:要加入的网络
aliases 要加入网络时,为服务指定容器的静态ip地址
ipv4_address/ipv6_address
pid:将pid模式设置主机PID模式,与宿主机共享PID地址空间,pid:”host”,容器使用这个标签将能够访问和操作其他容器和宿主机的名称空间
ports:暴露端口,与-p相同,但端口不低于60
sysctls:在容器内设置内核参数,可以是数组或字典
volumes:挂载一个目录或一个已存在的数据卷容器到容器
volumes_from:从其他容器或服务挂载数据链,可选参数是:ro和:rw
restart:默认是no;当值为always时,容器总是重新启动;当值为no-failure时,即出现报错容器退出时,容器重新启动。
hostname:主机名称
working_dir:工作目录
部署Tomcat
version: ‘3.1’
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
volumes:
- ./webapps:/usr/local/tomcat/webapps
environment:
TZ: Asia/Shanghai
部署MySQL
version: ‘3.1’
services:
db:
image: mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD: 12345
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 12345:3306
volumes:
- ./data:/var/lib/mysql