Docker-Compose 容器编排技术

举报
程序员-上善若水 发表于 2022/06/23 22:36:43 2022/06/23
【摘要】 一、容器编排技术 现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我...

一、容器编排技术

现在我们有一个springboot项目,需要依赖Redis、mysql、nginx。如果使用docker原生部署的话,则需要安装Redis、mysql5、nginx容器,在才可以启动我们springboot项目,这样的话部署项目的流程非常复杂,所以需要引入我们的Docker compose实现容器编排技术。

二、Docker-Compose

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

三、Docker-Compose的两个重要的概念

服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

四、离线安装Docker-Compose

  1. 下载离线包,并上传至服务器

https://download.csdn.net/download/qq_43692950/16155151

  1. 移动到usr/local/bin下
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

  
 
  • 1
  1. 添加可执行的权限
sudo chmod +x /usr/local/bin/docker-compose

  
 
  • 1
  1. 验证 docker-compose
docker-compose -v

  
 
  • 1

五、Docker-Compose常用命令

  1. 查看帮助
docker-compose -h

  
 
  • 1
  1. 创建并运行所有容器
docker-compose up

  
 
  • 1
  1. 创建并后台运行所有容器
docker-compose up -d

  
 
  • 1
  1. 指定模板
docker-compose -f docker-compose.yml up -d

  
 
  • 1
  1. 停止并删除容器、网络、卷、镜像
docker-compose down

  
 
  • 1
  1. 查看容器输出日志
docker-compose logs

  
 
  • 1
  1. 拉取依赖镜像
docker-compose pull

  
 
  • 1
  1. 检查配置
dokcer-compose config

  
 
  • 1
  1. 检查配置,有问题才有输出
dokcer-compose config -q

  
 
  • 1
  1. 重启服务
docker-compose restart

  
 
  • 1
  1. 启动服务
docker-compose start

  
 
  • 1
  1. 停止服务
docker-compose stop

  
 
  • 1

六、docker-compose.yml

  1. Compose常用配置

Image 镜像名称;
Build 根据docker file 打包 成镜像;
Context 指定docker file文件位置;
Commond 使用command可以覆盖容器启动后默认执行的命令;
Container_name 容器名称;
depends_on 指定依赖那个服务;
Ports 映射的端口号;
extra_hosts 会在/etc/hosts文件中添加一些记录;
Volumes 持久化目录;
volumes_from 从另外一个容器挂在数据卷;
Dns 设置dns

  1. 简单定义通过compose 启动一个tomcat
version: '3.0'
services:
  tomcat: ##服务名称
    image: tomcat:8 #镜像文件名称
    ports:
    - 8080:8080

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 指定网桥,数据卷
version: '3.0'
services:
  tomcat80: ##服务名称
    #container_name: tomcat8080 指定容器名称
    image: tomcat:8 #镜像文件名称 run images
    ports:  ###端口号的映射 -p
    - 8080:8080
    volumes: ## 数据源 宿主机与容器数据共享  -v
      - /usr/tomcat/webapps:/usr/local/tomcat/webapps
    networks:  ###定义网络的桥
      - mayikt

  tomcat81: ##服务名称
    #container_name: tomcat8080 指定容器名称
    image: tomcat:8 #镜像文件名称
    ports:  ###端口号的映射
      - 8081:8080
    volumes: ## 数据源 宿主机与容器数据共享
      - /usr/tomcat/webapps:/usr/local/tomcat/webapps
    networks:
      - mayikt
networks:  ## 定义服务的桥
  mayikt:

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

七、使用Compose部署springboot项目

  1. SpringBoot application,yml
spring:
  profiles:
    active: prd
  datasource:
  	#ip指定 mysql 容器服务的名称
    url: jdbc:mysql://mysql:3306/testdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
server:
  ###端口号
  port: 8080
  servlet:
    ##设置springboot项目访问路径
    context-path: /abc

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  1. DockerFile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER abc
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为mayikt.jar
ADD test1.0-SNAPSHOT.jar test.jar
# 运行jar包
RUN bash -c 'touch /test.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]
#暴露8080端口
EXPOSE 8080

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1. docker-compose.yml
version: "3.0"
services:
  mysql: # mysql服务
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
    ports:
      - "3306:3306"      #容器端口映射到宿主机的端口
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'testdb'
      MYSQL_USER: 'test'
      MYSQL_PASSWORD: 'test'
    networks:
      - mweb
  my-web: #自己单独的springboot项目
    hostname: abc
    build: ./     #需要构建的Dockerfile文件
    ports:
      - "38000:8080"      #容器端口映射到宿主机的端口
    depends_on:      #web服务依赖mysql服务,要等mysql服务先启动
      - mysql
    networks:
      - mweb
networks:  ## 定义服务的桥
  mweb:


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  1. 启动服务
docker-compose up -d

  
 
  • 1

八、使用docker_compose 部署mysql 和 redis

version: '2.0'

services:         
  mysql:
    restart: always
    image: mysql:8.0.20
    container_name: mysql
    volumes:
      - /home/mysql/data:/var/lib/mysql
    command:
      --lower_case_table_names=1
      --character-set-server=utf8
      --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root123
      - TZ=Asia/Shanghai 
      
  redis:
    restart: always
    image: redis
    container_name: redis
    volumes:
      - /home/redis/data:/data
    ports:
      - "6379:6379"
    command: ["redis-server" ,"--appendonly" ,"yes","--requirepass root123"]


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

启动服务

docker-compose up -d

  
 
  • 1

九、DockerFile 解析(补充)

一个镜像文件到底是如何创建?

  1. 需要手动编写一个dockerfile文件
  2. 将该dockerfile docker build 自定义成一个镜像文件
  3. docker run 运行容器

1. Centos镜像文件

在这里插入图片描述

2. DockerFile编写规范

  1. #描述注释;
  2. 指令必须要大写,后面至少需要带至少一个参数;
  3. 指令是按照从上到下,顺序执行;

3. DockerFile指令

  1. FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令
  2. MAINTAINER :维护者
  3. RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令
  4. ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  5. COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  6. CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
  7. ENV: 设置环境变量
  8. EXPOSE: 指定于外界交互的端口
  9. VOLUME 用于指定持久化目录
  10. WORKDIR 设置进入容器时的路径 默认访问的目录

文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43692950/article/details/115262989

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。