Docker笔记:docker compose部署项目, 常用命令与负载均衡

用Docker Compose实现负载均衡【入门篇】 docker compose实现的负载均衡 阅读详情

docker compose的作用

  • docker-compose是docker官方的一个开源项目
  • 可以实现对docker容器集群的快速编排
  • docker-compose 通过一个配置文件来管理多个Docker容器
  • 在配置文件中,所有的容器通过 services来定义
  • 然后使用docker-compose脚本来启动,停止和重启容器
  • 使用docker-compose可以对我们项目进行快速部署

docker命令部署项目

  • 比如,项目中有:nginx, web, mysql 三项服务

1 )mysql 的部署

  • 拉取镜像 $ docker pull mysql
  • 创建mysql, 并将mysql数据库导入到容器里
    • $ docker run --name mysql_c -p 3306:3306 -v /root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    • 在物理机 $ mkdir /root/mysql/conf.d /root/mysql/data 来创建两个目录
  • 客户端 尝试连接 物理机上的mysql容器,成功
  • 连接成功后,创建数据库或导入数据库,这里导入之前的数据库

2 )web的部署

  • 测试本地的web项目是否可以链接容器数据库,检查连接配置,正常
    • 这里如果mysql连接配置写的是ip最好改成 host对应的域名
  • 打包或不打包的不同部署方式,参考前文
  • 需要注意连接数据库的问题,这里简单举例: 这里用centos镜像来运行的,不是golang或已经打包好的镜像
  • $ docker run -itd --name goweb1 --link mysql_c:mysql -p 8080:8080 -v /root/wwwroot/:/root centos
    • --link 之后,会在 /etc/host 生成mysql对应的别名配置,就可以连接到mysql了
  • $ docker exec -it goweb1 /bin/bash 这里goweb1是容器,可以用自己的
  • $ chmode -R goweb1 这里找到对应的目录修改执行权限, 这里goweb1是目录
  • $ nohup ./goweb & 这里 goweb是可执行程序
  • 客户端访问测试正常

3 )nginx的部署

  • 如果想要不通过ip访问,通过域名访问,就要配置ng的转发
  • 转发配置, 默认配置文件 default.conf,新建任意 xxx.conf 存放在物理机上 /root/nginx/conf.d

goweb.conf

upstream backend {
	ip_hash;
	server goweb1:8080; # 这里是 goweb1 容器服务的host别名
}

server {
        listen       80;
        server_name  goweb.xxxx.com; # 你的域名地址
        location / {
              # 设置主机头和客户端真实地址,以便服务器获取客户端真实IP         
              # 禁用缓存
              proxy_buffering off; 
              # 反向代理的地址
              proxy_pass http://backend;     
        }
        # 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  html;
        }
}
  • 启动nginx映射端口,配置映射目录,连接web服务

    • $ docker run -itd --name nginxweb -p 80:80 --link goweb1:centos -v /root/nginx/conf.d/:/etc/nginx/conf.d nginx
  • 检查 host配置

    • $ cat /etc/hosts
    • 如果是客户端访问 goweb.xxxx.com 域名,客户端需要配置相关的host, 才能访问
    • 确认配置文件无误
  • ping 域名 成功

  • 以上是纯docker命令部署,也可通过 Dockerfile来配置部署goweb应用程序

  • 不管是原生docker命令部署,还是 Dockerfile部署,其实都比较麻烦

docker compose 部署项目

1 )安装 docker compose

  • 如果你是安装的桌面版 Docker,不需要额外安装,已经包含了
  • 如果是没图形界面的服务器版 Docker,你需要单独安装
    • 如果是 centos8 默认源是有问题的,我们可以配置到阿里源
      • 参考:http://bbs.itying.com/topic/6256730b212f3a0c78d4ac16
        • $ rm -rf /etc/yum.repos.d/*
        • $ touch /etc/yum.repos.d/CentOS-Base.repo
          • 复制链接提供的内容
        • $ yum clean all
        • $ yum makecache
        • 在安装 docker compose 前还要配置 docker的源,这里是时候的 阿里源
          • $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    • $ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
      • 如果在安装的时候,后面有 docker-compose-plugin 参数,也会被安装
    • $ yum install docker-compose-plugin
      • 这是单独安装
  • 运行 docker compose 检查是否安装成功

2 )配置 docker-compose.yml

version: "3"
  services: # 定义容器服务
    mysql_c: # 当前容器配置
      image: mysql
      container_name: mysql_c # 可以不写,和配置名保持一致
      environment: 
        MYSQL_ROOT_PASSWORD: 123456
      restart: always
      ports:
        - 3306:3306
      volumes:
        - /root/mysql/conf.d:/etc/mysql/conf.d
        - /root/mysql/data:/var/lib/mysql
    goweb1:
      image: gowebimg # 这个golangweb的镜像需要提前准备好
      build:
        context: ./
        dockerfile: Dockerfile
      # container_name: goweb1
      restart: always
      ports:
        - 8080:8080
      depends_on: # 表示 mysql_c 容器创建完成后,再去创建 goweb1 容器
        - mysql_c
    nginx:
      image: nginx
      container_name: nginx
      restart: always
      ports:
        - 80:80
      depends_on:
        - goweb1
      volumes:
        - /root/nginx/conf.d/:/etc/nginx/conf.d
  • 验证配置文件: $ docker compose convert
    • 如果有错,不会启动,输出错误,如: yaml: line3: did not find expected key
  • 编译运行容器: $ docker compose up
  • 后台运行: $ docker compose up -d
  • $ docker ps / docker compose ps
    • 这样,一次就起来了3个容器服务
  • 之后,验证服务是否正常
    • 如果不正常,进行检查,如 检查web服务
    • $ docker compose exec 服务名 /bin/bash
      • 例如: $ docker compose exec goweb1 /bin/bash
    • 查看里面的配置文件
      • 注意一般而言,我们这样查看都是基于未打包的
      • 因为打包后的可执行文件,不是docker打包可能结果和配置不匹配
    • 上述配置,有可能会遇到一些问题,比如 mysql容器先启动起来,goweb应用接着启动起来,但是mysql可能还没启动起来
      • 可重启应用解决 $ docker compose restart goweb1
      • 可使用脚本解决
  • 重启某个服务
    • $ docker compose restart goweb1
  • docker compose 极大方便了我们结合不同的容器
    • 通过一个配置文件,一个命令即可部署

3 )解决启动顺序问题导致的数据库访问不通

  • 使用 wait-for-it.sh 脚本
  • https://github.com/vishnubob/wait-for-it
  • 改写 compose 文件

    goweb1:
      image: gowebimg # 这个golangweb的镜像需要提前准备好
      build:
        context: ./
        dockerfile: Dockerfile
      # container_name: goweb1
      restart: always
      ports:
        - 8080:8080
      depends_on: # 表示 mysql_c 容器创建完成后,再去创建 goweb1 容器
        - mysql_c
      command: ["./wait-for-it.sh", "mysql_c:3306", '--', './goweb'] # goweb是编译后的可执行文件
    

docker compose 常见命令

  • $ docker compose build 可编译/重新编译服务
    • 如果有 Dockerfile会编译我们的镜像
    • –force-rm:总是删除构建过程中的临时容器。
    • –no-cache:镜像构建过程中不使用 cache。
    • –pull:始终先尝试通过 pull 来获取最新版本的镜像
  • $ docker compose logs 可查看操作日志
  • $ docker compose ps 可查看当前主机容器信息,类似 docker ps
  • $ docker compose start 启动容器
  • $ docker compose restart 重启容器
  • $ docker compose stop 停止容器 后面不加容器,则全部停止
  • $ docker compose rm 删除容器 不加容器,删除停止状态的容器
    • -f 强制删除
  • $ docker compose exec 进入容器
  • $ docker compose version 查看版本

docker compose 实现容器扩容

1 )方案1:基于命令

  • $ docker compose up --scale='goweb1=3' -d
    • goweb1 是服务名, 3 是部署扩展3台用于负载均衡
    • 注意,如果web服务启动多态,配置相同的端口会有问题,这时只需要注释掉 上面的 ports 配置
        # ports:
        #     - 8080:8080
      
  • $ docker compose ps 可看见3台 goweb1 服务
  • 结束掉一台,会自动重新负载均衡
    • 可以进入 nginx 服务 ping goweb1 服务,ip地址会动态变化

2 )方案2: 基于docker-compose.yml文件

goweb1:
  build:
    context: ./
    dockerfile: Dockerfile
  restart: always
  deploy:
    replicas: 3 #副本数量
    resources: #资源
      limits: #配置cpu
        cpus: "0.5" # 设置该容器最多只能使用 50% 的 CPU
        memory: 500M # 设置该容器最多只能使用 500M内存
    restart_policy: #定义容器重启策略, 用于代替 restart 参数
      condition: on-failure #只有当容器内部应用程序出现问题才会重启
  depends_on:
    - mysql_c
  command: ["./wait-for-it.sh","mysql_c:3306","--","./goweb"]
  • 注意,启动多个副本不能指定 container_name
部署微服务集群Docker-Compose Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器! 阅读详情

相关推荐

Docker-compose:管理多个容器

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

PeterJXL的博客 2875

Docker Compose

是一个用于生产环境的容器编排工具,它提供了更多的功能和自动化,可以管理大规模的容器集群,实现高可用性、自动伸缩、滚动升级等特性。文件定义多个容器之间的关系和配置,可以同时启动多个容器,并提供了一些便捷的命令用于管理这些容器。)都是用于容器编排的工具,但它们的设计目标和使用场景有所不同。是一个命令行工具,用于管理 Docker 容器编排工具。是一个用于本地开发和测试的工具,它通过。文件定义多个容器之间的关系和配置,而。则更适合生产环境的大规模容器编排。这个示例在基本配置的基础上,增加了。定义敏感信息的配置。

喝醉酒的小白 3220

Docker容器中基于compose+haproxy搭建负载均衡

一,基本知识 1,Docker Compose (1)Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器 (contaienr)。 (2)Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服...

qwqq233的博客 1569

docker-compose 常用命令(附 docker-compose 的安装教程)

docker-compose 常用命令(附 docker-compose 的安装教程)

m0_51913750的博客 3万+

Docker集群部署DockerCompose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。(可以简单的想Compose文件类似于n个docker run的集合)其语法如下所示:我们将其与之前docker命令的对比:具体的Compose的语法。...

金鳞踏雨 1983

DAC8568实战指南:如何用STM32实现8通道DAC精准控制(附代码)

本文提供DAC8568与STM32结合的实战指南,详细解析8通道16位DAC的精准控制方法。内容涵盖硬件连接、SPI配置、驱动层构建、时序调试及多通道同步输出等关键步骤,并附有经过验证的HAL库驱动代码,帮助工程师快速解决实际项目中的通信与输出稳定性问题。

weixin_29175469的博客 746

【docker-compose】docker-compose的详细使用

我们知道使⽤⼀个 Dockerfile 模板⽂件,可以让⽤户很⽅便的定义⼀个单独的应⽤容器。然⽽,在⽇常⼯作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现⼀个 Web 项⽬,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚⾄还包括负载均衡容器等,我们只能一个一个 ` 写dockerfile文件,然后bulid构建,run手动操作单个容器 ` Compose 恰好满⾜了这样的需求。

linjun的博客 1万+

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

m0_52031708的博客 3857

【Docker系列九】使用 Docker Compose 部署 Nginx

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1万+

BMC的风扇控制 (Fan speed control)

这篇文章是我刚开始做风扇功能的时候写的,因为那时候都找不到主管要我报告的内容,所以报告完就顺便整理一下,最近因为在修控制学,之后应该会再补一篇和控制学相关的内容 (如果有空的话) BMC的风扇控制算一个蛮重要的功能,那这个功能包含了"TACH"和"PWM"这两个常用讯号怎么解读,还有最常用的控制演算法"PID(closed loop)"和"Stepwise(openloop)",而另外的Error control ,因为每家做法不同,就不会在这边作介绍 ##实作程式码是来自Facebook的openBM

yeiris的博客 1万+

滴滴数据分析80道面试题及参考答案

常见的模型评价指标有准确率、召回率、F1 值、均方误差、均方根误差、R 方等。准确率是指模型预测正确的样本数占总样本数的比例,它反映了模型预测的准确性。召回率是指模型预测为正例的样本中实际为正例的比例,它衡量了模型对正例的捕捉能力。F1 值是准确率和召回率的调和平均数,综合考虑了两者的平衡。均方误差是预测值与真实值之差的平方的平均值,它衡量了模型预测值与真实值的平均偏离程度。均方根误差是均方误差的平方根,与均方误差类似,但更直观地反映了误差的大小。

大模型大数据攻城狮的专栏 1698

docker 单节点服务编排部署指南(docker-compose)

docker 单节点服务编排部署指南(docker-compose)

墨鸦的博客 7457

YOLOv13改进策略【Head】| 引入RT-DETR中的RTDETRDecoder,替换检测头

本文记录的是基于RTDETRDecoder模块的YOLOv13目标检测改进方法研究。RT-DETR的模块通过,能为解码器提供高质量的初始,从而。相比v13原始的检测头,RT-DETR能,替换后能够更好的提高模型性能。

Limiiiing的博客 434

07. Docker-Compose概述和简单编排部署

Docker-Compose概述和简单编排部署

目前日更2篇中,谢谢关注! 3318

YOLOv8改进 | 主干网络 | 在backbone添加Swin-Transformer层【论文必备】

YOLOv8改进,Swin-Transform,YOLOv8添加Swin-Transform

kay_545 2367

【SpringBoot 3.x 第43节】你还敢说 Spring 启动慢是“宿命”?Spring AOT 把启动剧本都提前写死了,你服不服?

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。

**My Coding Family** 543

Docker 系列之 docker-compose 容器编排详解

💎微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。使用可以轻松、高效的管理容器,它是一个用于定义和运行多容器Docker的应用程序工具项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。运行目录下的所有文件(extends。

李赛赛的专栏 4076

10天冲刺国自然基金!用这套实战AI提示词指令教程,助你中标率翻倍!亲测DeepSeek和ChatGPT不好用

虽然以上国自然提示词指令经过反复实测,但并不是万能无脑帮你搞定所有,大模型AI的特性是你专业领域能力越强,它的智商表现就会更加强大,通过以上提示词教程的使用,大大提升中标概率是肯定的。还有就是大模型的使用上,不是市面上大家都说好的就一定适用,目前来看,Gemini和Claude的两个模型是非常适合国自然本子的修改的。在使用大模型进行国自然本子撰写修改时,首先是角色的设定,然后是目标和背景的描述,好用的提示词指令都是要经过无数次的实测,比对输出结果后又反复调整,达到最佳的效果状态的提示词指令。

智能AI让学术科研更容易 1248

Docker-Compose部署服务

我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多中技术方案,今天给大家介绍Docker官方产品Docker-Compose。Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器(LNMP)等。

weixin_58376680的博客 2943

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

docker compose的用法

Docker-Compose 项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose 项目由 Python 编写,调用 Docker 服务提供的API来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用Compose 来进行编排管理。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

m0_57554344的博客 3801

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Docker-compose 多容器应用部署

Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。

这里没有简介 1898

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

构建部署_docker-compose常用命令

使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,。Dockerfile可以让用户管理一个单独的应用容器,而则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个project,即项目)例如一个web服务再加上后端的数据库服务容器等。docker-compost基础概念docker-compose项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排。

子墨秋风 2144

Docker-Compose概述与简单编排部署

本文主要介绍docker-compose 的概述和简单编排部署,即编排nginx服务和nginx+tomcat服务,希望对你有帮助!

十七拾的博客 2134

Docker Compose详解

一、Docker Compose 简介 Compose 项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。从功能上看,跟OpenStack 中的 Heat 十分类似。其代码目前在 https://github.com/docker/compose 上开源。 Compose定位是【定义和运行多个Docker容器的应用(Oefining and running mult-container Docker applications)】,其前身是开源项目Fig。 我们知道使用一个Docke

人丑就要多读书的博客 6305

docker-compose详解

我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍Docker官方产品Docker-Compose。Dockerfile可以定义一个单独的应用容器;而docker-compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器(LNMP)等。......

weixin_51099370的博客 1万+

Docker-compose

目录一、Docker-compose 简介1. YAML 文件格式及编写注意事项2. Docker Compose配置常用字段3. Docker Compose 常用命令4. Docker Compose 文件结构二、compose 部署1. Docker Compose 环境安装2.准备依赖文件3.编写配置文件docker-compose.yml 一、Docker-compose 简介 docker compose 给容器做单机编排的 Docker-Compose项目是Docker官方的开源项目,负责实现

认真学习 1万+
上一篇: Docker笔记:配置docker网络与不同网络之间的通信及跨主机通信
下一篇: Docker笔记:Docker Swarm 搭建集群与项目部署
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值