当前位置: 代码迷 >> 综合 >> docker三剑客之docker compose
  详细解决方案

docker三剑客之docker compose

热度:64   发布时间:2023-11-19 10:56:17.0

docker compose安装及使用

  • 什么是docker compose
  • 安装docker-compose
      • 在线二进制在线安装
      • 离线二进制安装
      • 如何卸载
      • 简单的使用介绍
      • 实战多容器启动和关联
      • 普通方式实现多容器启动和关联
      • 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:- redisports:-"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.1links: - tomcat001:t01 - tomcat002:t02ports: - "80:80" restart: always tomcat001: image: bolingcavalrytomcat:0.0.1ports: - "8081:8080"restart: alwaystomcat002: image: bolingcavalrytomcat:0.0.1ports: - "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.1links: - tomcat001:t01 - tomcat002:t02ports:- 8090:8090- 80:80restart: always tomcat001: image: tomcatports: - "8081:8080"restart: alwaystomcat002: image: tomcatports: - "8082:8080"restart: always

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

docker-compose up -d

在这里插入图片描述

  • 查看是否生效访问页面像之前那样,成功了
    在这里插入图片描述
  • 停止命令,在docker-compose.yml文件所在的目录执行
  • docker-compose down在这里插入图片描述