Docker Compose

docker-compose

docker-compose是Docker官方编排工具,用来管理和运行Docker容器,负责实现对Docker容器集群的快速编排。使用一个 Dockerfile 模板文件,可以很方便的定义一个单独的应用容器,而Compose则可以方便的实现需要多个容器相互配合来完成某项任务的情况。
Docker Compose将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。Docker Compose运行的目录下的所有文件(docker-compose.yml、extends文件或环境变量文件等)组成一个工程,默认名称为当前目录名。一个工程当中可包含多个服务,一个服务当中可包括多个容器实例。Docker Compose并没有解决负载均衡的问题,需要借助其他工具实现服务发现及负载均衡。
Compose 通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目 (project)。
Compose 中有两个重要的概念:
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器 实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Docker Compose是一个部署多个容器的简单必要的工具,使用一条简单的命令部署多个容器,简化了多容器的部署过程,使多容器移植变得简单可控。从其Roadmap可以看出,Docker Compose的目标是做一个生产环境可用的工具,包括服务回滚,多环境支持(dev/test/staging/prod),支持在线服务部署升级,防止服务中断并且监控服务使其始终运行在正确的状态。Roadmap中的另一个目标是更好的与Docker Swarm集成,目前版本存在的主要问题是无法保证处于多个主机的容器间正常通信因为目前不支持跨主机间容器通信。另一个问题是在Docker Compose中定义构建的镜像只存在在一台Docker Swarm主机上,无法做到多主机共享,因此目前需要手动构建镜像并上传到一个镜像仓库使多个Docker Swarm主机可以访问并下载镜像。相信随着Docker Compose的完善,其必将取代docker run成为开发者启动docker容器的首选。

安装 Docker Compose
https://docs.docker.com/compose/install/

Docker服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)
https://www.cnblogs.com/wushangjue/p/7810339.html
http://www.mamicode.com/info-detail-1703824.html
http://blog.51cto.com/11962757/2086760
http://www.lixiangfeng.com/blog/article/content/8595503
https://www.jianshu.com/p/2217cfed29d7
可能冒号后需要加个空格,不然在执行 docker-compose up -d后报错ERROR: yaml.scanner.ScannerError: mapping values are not allowed here。
创建 docker-compose.yml 文件,然后在当前目录下执行命令 docker-compose up -d 来启动各个服务。

version: "2"
services:
  php-fpm1:
    image: bitnami/php-fpm
    container_name: php-fpm1
    restart: always
    links:
      - mysql1:mysql-alias
    volumes:
      - /alidata/docker_work/www:/host/www
  nginx1:
    image: nginx
    container_name: nginx1
    restart: always
    ports:
      - 81:80
      - 444:443
    volumes:
      - /alidata/docker_work/nginx/conf:/etc/nginx/conf.d
      - /alidata/docker_work:/host
    links:
      - php-fpm1:php-fpm-alias

注意在此环境下的Php连接mysql,需要使用mysqli_connect。

docker-machine

VirtualBox和Docker的区别

VirtualBox和Docker的区别,一句话总结就是VirtualBox虚拟化硬件,Docker虚拟化操作系统。
VirtualBox,是创建硬件虚拟化的软件。通常情况下,一个操作系统运行在硬件上,其中硬件和操作系统之间的通信是通过移动数据到内存地址,然后发出指令来通知可使用该数据的硬件(或者是数据在被读取时)。 在VirtualBox(或其它虚拟机)设置的环境中,那些内存地址实际上是虚拟机软件自身的内存区域,并且那些指令是由虚拟机而不是直接由底层的CPU解释的。实际结果是,你在VirtualBox中运行一个操作系统,对于这个操作系统来说,VirtualBox程序看起来像一台完整计算机,硬件以及所有配件都有。实际上它不知道自己是在另一个程序中运行的。

Docker,则是不进行硬件的虚拟化。相反,它的作用是创建一个文件系统,使其看起来像一个普通的Linux文件系统,并且运行应用程序在一个所有文件和资源都在文件系统内的锁定环境中。事实上,该应用程序的容器并不模仿任何硬件,应用程序仍然在硬件上运行,它只是隔离了应用程序并允许您可以运行该应用程序跟特定的并且完全不是主机操作系统的软件和第三方库合作。这意味着,在启动或停止Docker应用程序时几乎没有开销,因为它们不需要预先分配的内存和磁盘空间等等。因此Docker容器很容易设置或者拆除。此外,容器在假装需要系统中各种硬件组件上运行软件的时候并不浪费任何开销 – 它是直接使用硬件的。

yum安装VirtualBox
配置yum源:
vim /etc/yum.repos.d/virtualbox.repo
输入

[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc

然后用yum直接安装:
yum install VirtualBox-5.2

CentOS7下minikube start后VirtualBox执行报错
https://blog.csdn.net/jiekou0376/article/details/80454808

[root@openshift ~]# docker-machine create –driver virtualbox virtualbox1
Running pre-create checks…
Error with pre-create check: “This computer doesn’t have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory”

Docker Swarm

Docker Swarm 和 Docker Compose 都是 Docker 官方容器编排项目,不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署 Docker Swarm 更加适合。

【Docker】 Swarm简单介绍
https://www.cnblogs.com/franknihao/p/8490416.html

Swarm就是一组运行docker的机器,并联合成为一个集群。当启动Swarm集群之后,docker命令会通过Swarm manager执行在整个集群之上。Swarm集群的机器可以是物理机,也可以是虚拟机,当加入Swarm集群之后,被称为nodes。
Swarm managers有两种不同的方式运行container:第一种emptiest node,尽量使用少的机器部署容器;第二种global,确保每一台机器上都会运行一个容器的实例。可以在docker-compose.yml中指定运行的模式。
Swarm managers是集群的核心控制节点,它负责执行命令,授权新机器加入集群。Worker节点只负责提供资源。
docker可以很方便的切换为 swarm mode,切换的命令是docker swarm init,一旦切换为 swarm mode后,当前的机器角色就变为Swarm managers。

发表评论