docker compose实现容器编排

Compose 使用的三个步骤:

使用 Dockerfile 定义应用程序的环境

使用 compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行

最后,执行 docker compose up 命令来启动并运行整个应用程序

为什么需要docker compose

Docker帮助我们解决服务的打包安装的问题,随着而来的问题就是服务过多的带来如下问题:

1、多次使用 Dockerfile、Build、Image 命令或者 DockerHub 拉取 Image;

2、需要创建多个Container,多次编写启动命令;

3、Container互相依赖的如何进行管理和编排;

当我们服务数量增多的时候,上面三个问题就会更加的被放大,如果这三个问题不解决,其实从虚拟机到容器化除了机器减少一些浪费以外,好像没有更多的变化

Docker有没有什么好的方法,可以让我们通过一个配置就搞定容器编排和运行呢?

这个时候Docker Compose就站出来了

Docker Compose可以做到以下几点:

①提供工具用于定义和运行多个docker容器应用;

②使用yaml文件来配置应用服务(docker-compse.yml);

③可以通过一个简单的命令docker-compse up可以按照依赖关系启动所有服务;

④可以通过一个简单的命令docker-compose down停止所有服务;

⑤当一个服务需要的时候,可以很简单地通过–scale进行扩容;

Docker Compose有以下特征:

更高的可移植性,Docker Compose仅需一个docker compse up可以完成按照依赖关系启动所有服务,然后使用docker compose down轻松将其拆解。帮助我们更轻松地部署复杂的应用程序;

单个主机上的多个隔离环境,Compose可以使用项目名称将环境彼此隔离,这带可以在一台计算机上运行同一环境的多个副本,它可以防止不同的项目和服务相互干扰;

构建实验

首先准备好php和nginx的镜像,因为不运行什么复杂代码,随便版本都可以

然后编写docker compose文件,要以写compose.yaml作为才能识别,不然就得指定文件

然后编写compose.yaml文件

[root@server159 nginx]# cat compose.yaml
version: "3.8"
services:
  nginx:
    image: "nginx:latest"
    restart: always
    #刚才创建的桥接网络
    networks: ["ngx-php"]
    #映射端口
    ports: ["80:80"]
    #将nginx挂载替换nginx的配置文件
    volumes:
      - type: bind
        source: ./default.conf 
        target: /etc/nginx/conf.d/default.conf
  php-fpm:
    image: "php-fpm-3:7.4.30"
    networks: ["ngx-php"]
    configs:
      - source: phpconfig
        target: /www/index.php
#创建一个桥接网络
networks:
  ngx-php:
    driver: bridge
#docker compose最近的版本才支持的,以前的老版本是没有的,也相当于volume用法
configs:
  phpconfig:
    file: ./index.php

然后编写nginx配置文件,注意php-fpm为compose.yaml文件里定义的容器名

[root@server159 nginx]# cat default.conf 
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;


    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location ~ \.php$ {
        fastcgi_pass   php-fpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;
        include        fastcgi_params;
    }
}

然后编写index.php测试文件

[root@server159 nginx]# cat index.php
<?php
phpinfo();
?>

然后文件就编写完成了

[root@server159 nginx]# ls
default.conf  compose.yaml  index.php

然后docker compose开始构建容器

[root@server159 nginx]# docker compose up -d
[+] Running 3/3
 ✔ Network nginx_test         Created                                   0.0s 
 ✔ Container nginx-php-fpm-1  Started                                   0.0s 
 ✔ Container nginx-nginx-1    Started                                   0.0s 

查看我们容器的启动情况,可以看到两个容器都启动,然后去浏览器查看

[root@server159 nginx]# docker compose ps
NAME              IMAGE              COMMAND                                                                          SERVICE   CREATED          STATUS          PORTS
nginx-nginx-1     nginx:latest       "/docker-entrypoint.sh nginx -g 'daemon off;'"                                   nginx     42 seconds ago   Up 42 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp
nginx-php-fpm-1   php-fpm-3:7.4.30   "/bin/sh -c '/bin/bash -c \"/etc/init.d/php-fpm start && tail -f /dev/null\"'"   php-fpm   42 seconds ago   Up 42 seconds   

docker compose实现容器编排_第1张图片

可以看到是能解析出php的

所以容器间的通信就完成,跟在linux上的没什么区别

docker compos 容器编排就是这样了再加mysql就可以组成LNMP架构了

你可能感兴趣的:(docker容器,docker,容器,运维,微服务)