使用dockercompose部署服务

php-linux php-linux     2022-12-06     467

关键词:

谈到微服务的话题,技术上我们往往会涉及到多服务、多容器的部署与管理。
Docker 有三个主要的作用:Build, Ship和Run。使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YUML语法)文件,在这个文件上面描述应用的架构,如使用什么镜像、数据卷、网络、绑定服务端口等等,然后再用一条命令就可以管理所有的服务(如启动、停止、重启、日志监控等等)。
本文通过发布3个APP(App1,App2,App3),来演示Docker在服务发布、网络、共享分区以及信息隔离与连通方面的工作:
1.安装Compose:

[root@docker ~]# curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@docker ~]# docker-compose version
docker-compose version 1.9.0, build 2585387
docker-py version: 1.10.6
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

2.服务物理框架
技术图片

说明:
a.Container1和2共在一个network namespace(netName1)内,Container3独立network namespace(netName2)
b.Container1挂载了一个系统卷(/opt/conf)到/mnt
c.Container3挂载了一个系统卷(./app/web)到/usr/share/nginx/html
c.Container1,2,3 nginx监听端口分别为:8080,8081,8082

3.docker-compose.yml 内容

[[email protected] compose]# more docker-compose.yml 
version: ‘2‘
services:
  App1:
    image: nginx
    ports:
      - "8080:80"
    networks:
      - "netName1"
    volumes:
      - /opt/conf/:/mnt
  App2:
    image: nginx
    ports:
      - "8081:80"
    networks:
      - "netName1"
    volumes:
      - /opt/conf/:/mnt
  App3:
    image: nginx
    ports:
      - "8082:80"
    networks:
      - "netName2"
networks:
  netName1:
    driver: bridge
  netName2:
    driver: bridge

 

4.运行

[root@docker compose]# docker-compose up
Creating network "compose_netName1" with driver "bridge"
Creating network "compose_netName2" with driver "bridge"
Creating volume "compose_vol1" with local driver
Creating compose_App2_1
Creating compose_App1_1
Creating compose_App3_1

在后台运行:[[email protected] compose]# docker-compose up -d

5.查看容器运行状态

[[email protected] compose]# docker-compose ps
     Name              Command          State               Ports             
-----------------------------------------------------------------------------
compose_App1_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:8080->80/tcp 
compose_App2_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:8081->80/tcp 
compose_App3_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:8082->80/tcp

其他命令:

[root@docker compose]# docker-compose restart #重启所有容器
[root@docker compose]# docker-compose restart App1  #重启App1
[root@docker compose]# docker-compose stop #停止所有容器
[root@docker compose]# docker-compose stop App1  #停止App1

6.验证网络隔离:
a.到App1 ping App2

[[email protected] compose]# docker-compose exec App1 bash
[email protected]:/# ping App2
PING App2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.059 ms
64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.062 ms

成功ping通
b.到App2 ping App1和App3

[[email protected] compose]# docker-compose exec App2 bash
[email protected]1905b2a875e3:/# ping App1
PING App1 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.043 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.085 ms

App2 to App3-成功

[root@docker compose]# docker-compose exec App3 bash
root@595f744e8634:/# ping App1
PING App1 (172.31.213.13): 56 data bytes
....#App3 to App1失败
root@595f744e8634:/# ping App2
PING App2 (172.31.213.13): 56 data bytes
....#App3 to App2失败

 

7.验证共享卷
a. 在host /opt/conf/ 目录下新建nginx.conf 文件

[root@docker conf]# pwd
/opt/conf
[root@docker conf]# touch nginx.conf 

b.登录到App1 和App2查看

[root@docker compose]# docker-compose exec App1 bash
root@49d702fc8606:/# cd /mmt 
root@49d702fc8606:/mnt# ls
nginx.conf#成功挂载
[root@docker compose]# docker-compose exec App2 bash
root@1d161428d4dd:/# cd /mnt
root@1d161428d4dd:/mnt# ls
nginx.conf#成功挂载

c. 在App3中挂载文件到nginx
修改docker-compose.yml App3:

App3:
    image: nginx
    volumes:
      - ./app/web/:/usr/share/nginx/html
    ports:
      - "8082:80"
    networks:
      - "netName2"

在host ./app/web 中添加 app3.html

[[email protected] web]# app3.html
[[email protected] web]# ls
app3.html
[[email protected] web]# more app3.html 
<!DOCTYPE html>
<html>
    <head>
         <meta charset="utf-8">
         <title>Welcome to leonyan‘s home, this is app3</title>
     </head>
   <body>
   Welcome to leonyan‘s home, this is app3!
   </body>
</html>

[[email protected] compose]# cd app/web/

 

 

访问App3 nginx:
技术图片

8.总结
本文演示了通过 Docker Compose进行多容器创建,以及容器间服务的管理,如网络隔离、卷数据共享。以及对容器的日常管理。

dockercompose安装部署jenkins

流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置。本篇讲解通过DockerCompose部署Jenkins服务。流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置。本篇讲解通过DockerCompose部署Jenkins服务。 查看详情

docker用dockercompose部署服务(代码片段)

用dockercompose部署服务dockercompose可以方便我们快捷高效地管理容器的启动、停止、重启等操作,它类似linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什么镜像、数据卷、网络模式、监听端口等信... 查看详情

使用dockercompose编排微服务(代码片段)

使用DockerCompose编排微服务经过前文讲解,可使用Dockerfile(或Maven)构建镜像,然后使用docker命令操作容器,例如dockerrun、dockerkiil等。然而,使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都... 查看详情

dockercompose

...排部署基于docker的应用。本身与docker/swarm配合度很高。DockerCompose是Docker编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm可以让Docker容器在集群中高效运转,而Compose可以让用户在集群中部署分布式应用。简单的说... 查看详情

使用dockercompose部署nexus后提示:unabletocreatedirectory/nexus-data/instance

场景UbuntuServer上使用DockerCompose部署Nexus(图文教程):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101111611在上面部署好Nexus后,启动后日志提示:Unabletocreatedirectory/nexus-data/instance  注:博客:https:// 查看详情

dockercompose方式部署springboot前后端分离项目

服务编排方式部署以下文件具体目录 1、构建springboot后台服务dockerfile文件,vim/usr/local/docker/soc/DockerfileFROMjdk:8MAINTAINERsinvie.cnADDScgService.jar/root/ScgService.jarENTRYPOINT["nohup","java","-jar","/root/ScgServ 查看详情

dockercompose跨主机部署consul集群/单机(代码片段)

简单明了直接开干。原理百度下  #此次部署双客户端三服务端  一、确定服务器信息有无相关端口冲突。docker服务是否存在netstat-nltp|grep-E"8300|8301|8302|8500|8600"8300:集群内数据的读写和复制8301:单个数据中心gossip协... 查看详情

dockercompose(代码片段)

1、什么是dockercomposeCompose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;然后一条命令管理所有服务,比如启动、停止、重... 查看详情

dockercompose(项目)

DockerCompose 项目compose项目简介    compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker/swarm配合度很高。DockerCompose 是Docker编排服务的一部分,可... 查看详情

dockercompose项目

http://hongge.blog.51cto.com/DockerCompose项目compose项目简介compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker/swarm配合度很高。DockerCompose是Docker编排服务的一部分,可以让用... 查看详情

跟我一起学docker(12)--dockercompose的使用

1.什么是DockerCompose?编排和配置容器集群的工具。编排:定义被部署的对象的各组成部分之间的耦合关系,部署流程中各个动作的执行顺序,部署过程所需要的依赖文件和被部署文件的存储位置和获取方式,以及如何验证部署成... 查看详情

dockercompose容器编排(代码片段)

本章知识点概括:DockerCompose容器编排构建自动发现的Docker服务架构实现容器服务自动加入Nginx集群**DockerCompose容器编排功能**Dockercompose的前身是Fig,它是一个定义及运行多个docker容器的工具使用DockerCompose不再需要使用shell脚本来... 查看详情

dockercompose部署springboot+mysql项目(代码片段)

DockerCompose部署Springboot+Mysql项目在上一篇文章SpringBoot(Maven)+Docker打包中,我们实现了将Springboot项目源代码一键打包部署为Docker服务。上文中,我们的Springboot项目如果要与数据库的连接,就必须连接公网IP来使用&... 查看详情

使用dockercompose部署postgresql数据库

参考技术A注:启动时可能会出现权限问题,所以添加了privileged:true在docker-compose的时候docker-composeup会优先使用已有的容器,而不是重新创建容器。需要带上--force-recreate参数重新创建容器docker-composeup-d--force-recreate。本文内容参考... 查看详情

dockercompose部署springboot+mysql项目(代码片段)

...a-jarexample-0.0.1-SNAPSHOT.jar启动此文件。必须安装Docker,DockerCompose。操作第一步:在项目根目录下创建文件Dockerfile,内容如下,本文项目使用的是jdk11,开放8086端口。注意:需要将下文的两处example-0.0.1-SNAPSHO... 查看详情

azure应用服务使用dockercompose创建appservice遇见"linuxversionistoolong.itcannotbemorethan400

...LinuxVersionistoolong.Itcannotbemorethan4000characters."]问题描述使用DockerCompose方式合并多个镜像(Images)文件,然后部署到AppService中,结果失败。报错LinuxVersion太长,不能超过4000个字符。错误消息:"code":"DeploymentFailed","message":"Atleastoneresource... 查看详情

docker私有仓库部署之compose搭建consul集群(代码片段)

文章目录一、DockerCompose简介1.1DockerCompose概述1.2DockerCompose容器编排1.3DockerCompose常用命令1.4DockerCompose配置常用字段二、Consul简介2.1consul概述2.2Consul容器服务更新与发现三、部署Compose3.1安装docker、设置镜像加速3.2compose部署四、consu... 查看详情

如何在kubernetes上进行微服务部署

使用SpringCloud构建实际微服务架构基本概念:使用Docker进行集测试混合持久化微服务架构服务发现API网关Docker使用Docker每服务进行构建部署使用DockerCompose发机进行端端集测试参考技术A直接设置面设置 查看详情