• docker容器服务器编排利器 Docker Compose应用实战


    一、Docker Compose必要性以及定义

    用容器运行一个服务,需要使用docker run命令。但如果我要运行多个服务呢?

    假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢?

    一个容器运行多个服务会造成镜像的复杂度提高,docker倾向于一个容器运行一个应用。
    那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了

    这个复杂的问题需要解决,这就涉及到了容器编排的问题了。

    1、Compose

    • 编排

      • 是对多个容器进行启动和管理的方法

      • 例如:LNMT,先启动MySQL,再启动Tomcat,最后启动Nginx

    2、服务架构的演进

    • 单体服务架构

    • 分布式服务架构

    • 微服务架构(容器)

    • 超微服务架构

    3、容器编排工具

    • docker machine

      • 在虚拟机中部署docker容器引擎的工具
    • docker compose

      • 是一个用于定义和运行多容器Docker的应用程序工具
    • docker swarm

      • 需要在多台主机中运行容器的时候
    • mesos+marathon

      • mesos对计算机计算资源进行管理和调度

      • marathon服务发现及负载均衡的功能

    • kubernetes

      • google开源的容器编排工具

    二、Docker Compose 应用参考资料

    https://docs.docker.com/compose/

    三、Docker-Compose应用最佳实战步骤

    1、概念

    工程(project)
    服务(Service)
    容器(Container)

    2、步骤

    1.定义应用的Dockerfile文件,为了任何地方进行构建。

    2.使用docker-compose.yaml定义一套服务,这套服务可以一起在一个隔离环境中运行。

    3.使用docker-compose up就可以启动整套服务。

    四、Docker-Compose的安装

    https://github.com/docker/compose/releases

    五、Docker-Compose实战

    1 网站文件准备

    nginx下的文件信息

    ubuntu@VM-24-12-ubuntu:~/ck14/manual/nginx$ ls
    default.conf  dist  Dockerfile  static
    
    • 1
    • 2

    default.conf文件

    upstream app_server {
        server django_app:8000;
    }
    
    server {
        listen       80;
        server_name  localhost;
    
        #access_log  /var/log/nginx/host.access.log  main;      #访问日志
    
        location /static/ {
            root   /usr/share/nginx/html;   #请求对应配置文件位置(定义服务器的默认网站根目录位置)
            index  index.html index.htm;     #请求对应的文件
        }
        
        location / {
            # 检查静态文件,如果不是代理到应用
            try_files $uri @proxy_to_app;
        }
    
        location @proxy_to_app {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app_server;
        }
    
        #error_page  404              /404.html;          #定义错误提示页面
    
        # redirect server error pages to the static page /50x.html  #重定向服务器错误页面
    
        error_page   500 502 503 504  /50x.html;         #定义错误提示页面
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    
    server {
            listen 81;
            location / {
                    root /usr/share/nginx/html/dist; 
                    index index.html;
                    try_files $uri $uri/ /index.html;
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    dist:前端打包文件

    ubuntu@VM-24-12-ubuntu:~/ck14/auto/nginx/dist$ ls
    css  favicon.ico  fonts  index.html  js
    
    • 1
    • 2

    static:后端打包文件

    ubuntu@VM-24-12-ubuntu:~/ck14/auto/nginx/static$ ls
    admin  rest_framework
    
    • 1
    • 2

    制作nginx,Dockerfile

    将前后端打包文件拷贝到容器中的/usr/share/nginx/html/目录下
    暴露80(后端访问)、81(前端访问)端口

    FROM nginx:alpine
    
    COPY ./static/ /usr/share/nginx/html/static/
    COPY ./dist/ /usr/share/nginx/html/dist/
    COPY ./default.conf /etc/nginx/conf.d/
    
    VOLUME /var/log/
    EXPOSE 80 81
    
    
    
    
    生成镜像命令
    
    ```python
    sudo docker build -t ck14_web_nginx .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行容器

    sudo docker run --name ck14_nginx --network ck14 -d -p 5001:80  -p 5002:81  ck14_web_nginx
    
    • 1
  • 相关阅读:
    Vue生命周期
    深入浅出:npm常用命令详解与实践
    JS—函数相关例题解析
    HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站
    【深度学习】(2) Transformer 网络解析,代码复现,附Pytorch完整代码
    多态原理之虚函数表VBTL
    nginx SseEmitter 长连接
    R语言使用lm函数构建线性回归模型、应用回归模型预测新的预测变量对应的响应变量(predict函数返回预测值的向量)
    26岁开始学iT晚吗?
    .NET 面试题集锦
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/133157597