Docker(三)Docker Compose安装入门到实战安装组件

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值