docker微服务

站在Docker的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器等等

软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来

这正是微服务(microservices)的思想:软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层

docker-compose

Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用

你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系

然后,只要一个命令,就能同时启动/关闭这些容器

配置docker-compose.yml

  • version - 表示模板使用的规则版本号
  • services - 表示所有服务
  • webapp - 表示服务名称
  • containername - 指定容器名称,不填默认为:项目名称服务名称_序号
  • image - 表示镜像
  • expose - 暴露端口,但不映射到宿主机,只被连接的服务访问
  • ports - 表示端口映射
  • env_file - 从文件中获取环境变量,可以是一个或多个文件
  • depends_on - 解决容器的依赖、启动先后的问题,先启动redis再启动webapp
  • redis - redis镜像
  • mysql - mysql镜像
  • environment - 设置环境变量
version: "1.0.0"

services:
    webapp:
        container_name: nginx-test
        image: nginx
        ports:
            - "80:80"
        env_file: .env
        depends_on:
            - redis
    redis:
        image: redis:latest
        expose:
            - "30000"
        env_file:
            - ./common.env
            - ./apps/web.env
    mysql:
        image: mysql
        environment:
            - MYSQL_ROOT_PASSWORD=123456
            - MYSQL_DATABASE=test

使用Dockerfile构建镜像

  • context - Dockerfile路径
  • dockerfile - Dockerfile文件名
  • args - 制定构建镜像时的变量
version: '1.0.0'

services:
    webapp:
        build:
            context: ./dockerfile_dir
            dockerfile: dockerfile_name
            args:
                buildno: 1

安装

# 查看版本
docker-compose --version

# 启动所有服务
docker-compose up

# 关闭所有服务
docker-compose stop

# 删除容器文件(容器必须已经停止运行)
docker-compose rm

自建lnmp容器

自建一个lnmp容器,能够实现新增、查询即可

假设我们lnmp环境需要网络隔离,如下配置,nginx、mysql、redis都有独立的网络,相互隔离,php可以连接它们

  • volumes - 宿主机路径和容器文件路径的映射
version: '1.0.0'
services:

    nginx:
        image: nginx:alpine
        # ...
        networks:
            - net-php

    php:
        working_dir: /wwwroot/
        volumes:
            - /Users/tangxiaofeng/wwwroot/:/wwwroot/
        networks:
            - net-php
            - net-mysql
            - net-redis

    mysql:
        image: mysql:5.7
        environment:
        MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
        secrets:
            - db_root_password
            - my_other_secret
        networks:
            - net-mysql

    redis:
        image: redis:latest
        # ..
        networks:
            - net-redis

networks:
    net-php:
    net-mysql:
    net-redis:

secrets:
    my_secret:
        file: ./my_secret.txt
    my_other_secret:
        external: "true"

results matching ""

    No results matching ""