热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DockerCompose介绍以及部署项目

简单介绍:docker-compose支持的可以在单机上进行多容器部署的工具,可以通过运行一个yml文件以固定的顺序启动多个容器,而不需要

简单介绍:docker-compose支持的可以在单机上进行多容器部署的工具,可以通过运行一个yml文件以固定的顺序启动多个容器,而不需要手动一个个启动。

一、准备工作

老版本的docker-copmose需要单独安装docker-compose,而新版本docker-compose则在安装docker-engine的时候就会带着安装docker-compose。

(一)老版本

使用以下命令:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

上面是针对linux64位操作系统,可改成

sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

安装结束以后运行docker-copmose version即可看到对应的版本号

(二)新版本

直接运行:sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
然后启动:sudo systemctl start docker

二、部署项目

准备一个yml启动文件,可以参考下面的,具体语法我就不一一解释了:

docker-compose.yml文件

version: '3'
services:cloud-gateway:network_mode: "host"image: "adoptopenjdk/openjdk8"restart: alwaysworking_dir: /rootvolumes:- "./cloud-gateway:/root"#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:roports:- "7000:7000"command: java -jar app.jar depends_on:- zipkincloud-admin:network_mode: "host"image: "adoptopenjdk/openjdk8"restart: alwaysworking_dir: /rootvolumes:- "./cloud-admin:/root"#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:roports:- "7001:7001"command: java -jar app.jardepends_on:- zipkincloud-auth:network_mode: "host"image: "adoptopenjdk/openjdk8"restart: alwaysworking_dir: /rootvolumes:- "./cloud-auth:/root"#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:roports:- "7003:7003"command: java -jar app.jardepends_on:- zipkincloud-tools:network_mode: "host"image: "adoptopenjdk/openjdk8"restart: alwaysworking_dir: /rootvolumes:- "./cloud-tools:/root"#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:roports:- "7002:7002"command: java -jar app.jardepends_on:- zipkin cloud-manage:network_mode: "host"image: "adoptopenjdk/openjdk8"restart: alwaysworking_dir: /rootvolumes:- "./cloud-manage:/root"#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:roports:- "7004:7004"command: java -jar app.jardepends_on:- zipkinnginx:network_mode: "host"image: nginxrestart: alwaysports:- '8200:8200'volumes:- ./conf/nginx.conf:/etc/nginx/nginx.conf- ./conf/black.conf:/etc/nginx/black.conf- ./cloud-frontend/dist/:/home/dist#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:rozipkin:network_mode: "host"image: openzipkin/zipkincontainer_name: zipkinports:- 9411:9411volumes:#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:ro

docker-compose up -d:以后台的方式运行
在这里插入图片描述

docekr-compose down:清除所有运行的项目
在这里插入图片描述

docker-compose logs -f + 服务名:查询服务运行日志
在这里插入图片描述
docker-compose up -d + 服务名:以后台的方式单独运行某个服务

docker-compose restart + 服务名:重启某个服务

三、其他问题

(一)单独停止某个服务

本地修改了代码,需要重新打包发布,但是又不想全部docker-compose停止再启动,那么就可以单独修改其中一个。例如我想停掉我的cloud-gateway项目

1、首先通过 docker ps 查询已启动的容器(docker ps -a 查询所有容器,包括未启动的)
命令 docker container ls -a 也一样。
在这里插入图片描述

2、将要更新的容器停止docker-compose stop cloud-gateway (docker-compose stop 是停止yaml包含的所有容器)
在这里插入图片描述

3、将第二步已停止的容器删除 docker container rm d9b57f832648 (d9b57f832648是cloud-gateway的容器id)
在这里插入图片描述

4、查询所有的镜像 docker images

5、备份镜像,防止意外出错可恢复。docker save cloud-gateway -o /home/bak/cloud-gateway-bak.tar

6、删除镜像 docker rmi cloud-gateway

7、将打包好的更新的jar文件按照docker-compose的描述地址放好,再根据文件编译新的镜像 docker build . -f Dockerfile-Cloud-Gateway -t cloud-gateway

8、启动docker-compose up -d cloud-gateway

9、重启docker-compose restart cloud-gateway

(二)一些常用命令

查看版本:docker-compose version

根据yml创建service:docker-compose up

指定yaml:docker-compose up -f xxx.yaml

后台运行:docker-compose up -d

查看启动成功的service:docker-compose ps,也可以使用docker ps

查看images:docker-compose images

停止/启动service:docker-compose stop/start

删除service[同时会删除掉network和volume]:docker-compose down

进入到某个service:docker-compose exec redis sh

(三)动态扩容

可以使用docker-compose -scale对容器进行动态扩容,但是动态扩容必须先把端口映射去掉,不然同一台机器使用的是一样的对外的端口肯定报错。
例如在机器上自己创建了一个docker-compose文件夹,然后在该文件夹下有启动需要的yml文件,同时也有一个springboot项目的dockerfile文件,只不过通过yml文件运行dockerfile文件构建镜像。我们的项目要访问redis,redis的镜像可直接从远程拉取。

可按照以下步骤扩容:

(1)修改docker-compose.yaml文件,主要是把web的ports去掉,不然会报错

version: '3'
services:#启动的容器名字叫webweb:#在该目录下(.)运行构建镜像的命令build: .#使用的网络名字叫做app-netnetworks:- app-netredis:image: "redis:alpine"#使用的网络名字叫做app-netnetworks:- app-netnetworks:#创建一个网络,名字叫做app-netapp-net:#网络的方式是桥接,桥接模式可直接通过名字访问同一个网络下的容器driver: bridge

(2)创建service

docker-compose up -d

(3)若要对容器进行扩缩容

docker-compose up --scale web=5 -d
docker-compose ps
docker-compose logs web

运行完以上命令就能看到名字叫web的容器被创建了5个


推荐阅读
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
author-avatar
在这里啊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有