zoukankan      html  css  js  c++  java
  • Docker学习笔记之--借助Docker Compose进行多容器部署(环境:centos7)

    上节演示:Docker学习笔记之--查看部署在docker的应用运行日志(环境:centos7)

    接下来演示借助Docker Compose进行多容器部署。

    前边的章节演示尽管可以实现需求功能,但是在生产环境当中,维护起来显然很麻烦,所以下边演示借助Docker Compose功能,实现一键部署!

    一个完整的项目需要多个容器(比如Web、Nginx、SqlServer、Mysql、Redis等)协调运行相互支持,一个个的部署很显然会很麻烦,而且还要为各个容器之间的网络连接而苦恼。

    还好,借助Docker Compose,我们可以编写一个docker-compose.yml文件,可以轻松实现上边所有容器的一键部署。

    第一步:安装 Docker Compose

    依次执行以下命令:截止目前最新版本是 1.27.4

    sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    sudo chmod +x /usr/local/bin/docker-compose
    
    docker-compose --version

    第二步:编辑 docker-compose.yml文件

    在服务器上的web应用根目录下新建一个 docker-compose.yml文件,跟Dockerfile文件放在同一个目录下即可!

    然后编写如下内容:

     1 version: '3.8'
     2 networks:
     3    test_network:
     4      external: true
     5 services:
     6    myapidemo:
     7       image: 1312958948/myapidemo:1.1
     8       container_name: myapidemo
     9       build: .
    10       restart: always
    11       ports:
    12         - "9020:5000"
    13       volumes:
    14         - /root/apilogs/logs:/app/logs
    15       networks:
    16         - test_network
    17     
    18    nginxapi:
    19       image: nginx
    20       container_name: nginxapi
    21       restart: always
    22       ports:
    23         - "80:80"
    24         - "443:443"
    25       volumes:
    26         - /root/nginx/www:/usr/share/nginx/html 
    27         - /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf 
    28         - /root/nginx/logs:/var/log/nginx 
    29         - /root/nginx/certs:/etc/nginx/certs 
    30       networks:
    31         - test_network
    32         
    33    mysql:
    34       image: mysql:8.0
    35       container_name: mysql
    36       restart: always
    37       ports:
    38         - "3306:3306"
    volumes:
    - /var/lib/docker/volumes/mysqldata/_data:/var/lib/mysql
    39 environment: 40 MYSQL_ROOT_PASSWORD: Aa123456 41 MYSQL_DATABASE: MyTest 42 TZ: Asia/Shanghai 43 networks: 44 - test_network 45 46 redistest: 47 image: redis 48 container_name: redistest 49 restart: always 50 ports: 51 - "6379:6379" 52 command: redis-server --requirepass 123456 53 networks: 54 - test_network

    代码解释:一份标准配置文件应该包含 version、services、networks 三大部分,其中最关键的就是 services 和 networks 两个部分,这是它基本结构

    version: '3.8'   表示版本,截止目前最新是 3.8,可以参考文档:https://docs.docker.com/compose/compose-file/

    services  节点下定义每个容器服务,其中:myapidemo、nginxapi、mysql、redistest等表示容器名称

    image: 1312958948/myapidemo:1.1    指定镜像名称和tag版本,如果该镜像不存在,则会自动拉取或创建镜像;如果已经存在则会直接使用

    container_name: myapidemo   指定容器名 

    restart: always   表示关机或者重启docker时,自动重启容器

    build: .    指定 Dockerfile 所在文件夹的路径(点 表示当前目录)。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器

    ports:  - "9020:5000"     端口

    volumes: -  /root/apilogs/logs:/app/logs   挂载一个目录或者一个已存在的数据卷容器,(例如:将/root/apilogs/logs目录 映射到 容器内的 /app/logs目录)

    networks: - test_network    连接到自定义网桥 test_network 

    特别提醒:因为前边章节我已经提前创建好 test_network 网桥了,所以在这里直接使用,下边这段话表示使用已存在的网桥

    networks:
         test_network:
           external: true

    environment:    为容器设置环境变量,等同于 docker run -e MYSQL_ROOT_PASSWORD=Aa123456

    (注意前边没有横杠 -)

    environment:
       MYSQL_ROOT_PASSWORD: Aa123456   
       MYSQL_DATABASE: MyTest
       TZ: Asia/Shanghai

    command: redis-server --requirepass 123456        指定一个容器启动后执行的命令,例如:这里给 redis 设置密码

    其他还有很多,不依依举栗了。

    参考文档:

    https://blog.csdn.net/zhiaini06/article/details/45287663

    https://blog.csdn.net/qq_35720307/article/details/87256684

    第三步:一键部署容器

    使用以下命令创建并运行容器, -d 表示后台运行

    docker-compose up -d

    如果镜像都已经存在,则会直接创建容器并运行

    如果镜像不存在,则会尝试拉取或根据 build指定的路径寻找 Dockerfile文件自动创建

    从提示可以看出,如果镜像不存在则自动创建,否则需要调用docker-compose build 或 docker-compose up --build

    Successfully tagged 1312958948/myapidemo:1.1
    WARNING: Image for service myapidemo was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.

    而提示 xxxx is up-to-date,则表示 Docker Compose 认为这些容器已经启动了,没必要再次启动

    nginxapi is up-to-date
    mysql is up-to-date
    redistest is up-to-date

    注意:在生产环境下,禁止使用该命令:docker-compose down xxx

    扩展:如果要更新迭代应用版本,只需要按照下列步骤执行即可

    1,将最新版本的应用上传更新到服务器,使用cd命令切到应用根目录

    2,停止容器  docker-compose stop 容器名

    3,自动更新镜像并启动容器  docker-compose up -d --build

    4,没了,就3步

    到此结束!

    参考文档:https://www.bilibili.com/video/BV1ib411w7L7?p=13

  • 相关阅读:
    redux dispatch、action、reduce 执行流程
    react中使用react-redux
    npm 全局安装默认地址
    react 组件外js文件路由跳转
    withRouter的作用和适用场景
    react 自定义高阶组件,实现路由拦截,子路由渲染
    移动端原生js使用touch事件监听滑动方向
    Vue.js中this.$nextTick()的使用与理解
    域名等级划分介绍
    nodejs 实现一个账号只能一台设备登录
  • 原文地址:https://www.cnblogs.com/peterzhang123/p/13953313.html
Copyright © 2011-2022 走看看