docker三剑客之docker compose

什么是docker compose

答:平时我们都是一次启动一个容器,可是如果需要一次启动多个容器作为一个整体控制启动和停止,各个容器间也有依赖,这时候就到 docker compose表演了,通过docker-compose.yml创建一个服务包含多个需要启动的容器包括容器间的依赖都在文件中定义好后启动就可以了
前提:需要先安装docker参照之前文章安装即可

安装docker-compose

在线二进制在线安装

curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

如下图:在这里插入图片描述

  • 查看是否成功安装
    docker-compose version
    在这里插入图片描述

离线二进制安装

  • 如果用的内网这时我们需要到外网下载好相关文件再继续安装,这里
    已下载好一个文件,放在百度云上需要的直接下载即可
    链接:https://pan.baidu.com/s/1dbDGyHh_YsLWg65qR6FLfA
    提取码:lb83
  • 下载好后将docker-compose-Linux-x86_64,文件名重命名为docker-compose,并给于执行权限移动到 /usr/local/bin/目录下即可完成安装
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose &&chmod +x /usr/local/bin/docker-compose

如何卸载

  • 通过二进制安装的只需要删除对应目录下的命令即可
rm -rf /usr/local/bin/docker-compose

简单的使用介绍

  • 样例文件docker-compose.yml,下面为一个service包含两个服务,web和redis,web依赖redis,启动时会先启动redis再启动web
version: '3'
services:
  web:
    image:"tomcat:latest"
    depends_on:
      - redis
    ports:
      -"8080:8080"
  redis:
    image:"redis:alpine"

  • 相关命令
docker-compose up -d #在docker-compose.yml所在目录执行,将在后台启动容器
docker-compose down  #在docker-compose.yml所在目录执行,将停止相关容器
docker-compose restart  #在docker-compose.yml所在目录执行 重启服务
  • docker-compose.yml文件内容同样支持挂载,网络设定等其他属性,service中每个服务属性就和运行单个容器设定是一样的,不过我们呢通过docker-compose,可以指定启动顺序,作为整体来管理
    再给一个样例:
version: '2'
services:
  nginx001: 
    image: bolingcavalrynginx:0.0.1
    links: 
      - tomcat001:t01 
      - tomcat002:t02
    ports: 
      - "80:80" 
    restart: always 
  tomcat001: 
    image: bolingcavalrytomcat:0.0.1
    ports: 
      - "8081:8080"
    restart: always
  tomcat002: 
    image: bolingcavalrytomcat:0.0.1
    ports: 
      - "8082:8080"
    restart: always

说明:
links:
- tomcat001:t01
- tomcat002:t02
表示和tomcat001,tomcat002服务建立连接,t01 ,t02只是一个别名
而nginx中的配置是这样:
upstream tomcat_client {
server t01:8080 weight=1;
server t02:8080 weight=1;
}
这里面的t01,t02和link参数中的t01,t02对应,这样nginx在用t01,t02做为域名做请求转发的时候,请求就能到tomcat001和tomcat002上了。

实战多容器启动和关联

  • 这里将通过一个nginx转发到两个tomcat上实现负载均衡
访问
转发
转发
客户端
nginx
tomcatoo1
tomcatoo2

普通方式实现多容器启动和关联

  • 新建文件夹,创建Dokerfile文件
    在这里插入图片描述
    Dokerfile文件内容如下:
#基础镜像
FROM nginx:latest
#定义工作目录
ENV WORK_PATH /etc/nginx
#定义conf文件名
ENV CONF_FILE_NAME nginx.conf
#删除原有配置文件
RUN rm $WORK_PATH/$CONF_FILE_NAME
#复制新的配置文件
COPY ./$CONF_FILE_NAME $WORK_PATH/
#给shell文件赋读权限
RUN chmod a+r $WORK_PATH/$CONF_FILE_NAME

解释:/etc/nginx/nginx.conf文件为nginx镜像默认文件存储位置,上述代码就是在更换为我们的配置文件

  • 创建nginx.conf文件内容如下:
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    #include /etc/nginx/conf.d/*.conf;

      upstream tomcat_server {
         server t01:8080 weight=1;
         server t02:8080 weight=1;
    } 
      upstream tomcat_server1 {
         server t01:8080 weight=1;
         server t02:8080 weight=1;
    }
    server {
        server_name "tomcat_server";
        listen 80;
        listen [::]:80  ipv6only=on;


        location / {
            proxy_pass http://tomcat_server;
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
   server {
        server_name "tomcat_server1";
        listen 8090;
        listen [::]:8090  ipv6only=on;

        location / {
            proxy_pass http://tomcat_server1;
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

}

解释:上述代码为我们的nginx.conf配置文件内容,主要让nginx监听80,8090,端口,然后转发t01,t02的8080端口也就是两个tomcat对应的容器端口
建立完后文件夹内容而下:
在这里插入图片描述

  • 构建镜像我们自己的nginx镜像
docker build -t mynginx:2.3.1 .

在这里插入图片描述

  • 启动两个tomcat容器,如下,
    在这里插入图片描述
    在这里插入图片描述
  • 查看刚才启动的容器
    在这里插入图片描述
  • 启动nginx
  • docker run --name=ngx001 --link=tomcat001:t01 --link=tomcat002:t02 -p 80:80 -p 8090:8090 -idt mynginx:2.3.1
    在这里插入图片描述
    解释:这里启动用我们创建的镜像mynginx:2.3.1`,–link参数分别对应我们nginx.conf中的t01和t02,tomcat001和tomcat002就是之前启动的容器名,然后映射了两组端口,80和8090也是对应nginx.conf中监听端口,这样就可以通过这两个端口访问了
    在这里插入图片描述
  • 访问虚拟机地址:默认是80端口
  • 在这里插入图片描述
    再试下:8090端口
    在这里插入图片描述
    这样就完成了我们测试下停tomcat001容器
    在这里插入图片描述
    访问没有问题:
    在这里插入图片描述
    再次停tomcat002容器:访问出错负载成功
    在这里插入图片描述

docker compose方式实现多容器启动和关联

  • 首先我们停掉刚才运行的三个容器
    docker stop tomcat001 tomcat002 ngx001;docker rm tomcat001 tomcat002 ngx001
    在这里插入图片描述
  • 编辑ocker-compose.yml文件内容如下:
version: '3'
services:
  nginx001: 
    image: mynginx:2.3.1
    links: 
      - tomcat001:t01 
      - tomcat002:t02
    ports:
      - 8090:8090
      - 80:80
    restart: always 
  tomcat001: 
    image: tomcat
    ports: 
      - "8081:8080"
    restart: always
  tomcat002: 
    image: tomcat
    ports: 
      - "8082:8080"
    restart: always


然后在docker-compose.yml文件所在的目录,执行如下命令:

docker-compose up -d

在这里插入图片描述

  • 查看是否生效访问页面像之前那样,成功了
    在这里插入图片描述
  • 停止命令,在docker-compose.yml文件所在的目录执行
  • docker-compose down在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值