一、容器编排技术

现在我们有一个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. 添加可执行的权限
sudo chmod +x /usr/local/bin/docker-compose
  1. 验证 docker-compose
docker-compose -v

五、Docker-Compose常用命令

  1. 查看帮助
docker-compose -h
  1. 创建并运行所有容器
docker-compose up
  1. 创建并后台运行所有容器
docker-compose up -d
  1. 指定模板
docker-compose -f docker-compose.yml up -d
  1. 停止并删除容器、网络、卷、镜像
docker-compose down
  1. 查看容器输出日志
docker-compose logs
  1. 拉取依赖镜像
docker-compose pull
  1. 检查配置
dokcer-compose config
  1. 检查配置,有问题才有输出
dokcer-compose config -q
  1. 重启服务
docker-compose restart
  1. 启动服务
docker-compose start
  1. 停止服务
docker-compose stop

六、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. 指定网桥,数据卷
version: '3.0'
services:tomcat80: ##服务名称#container_name: tomcat8080 指定容器名称image: tomcat:8 #镜像文件名称 run imagesports:  ###端口号的映射 -p- 8080:8080volumes: ## 数据源 宿主机与容器数据共享  -v- /usr/tomcat/webapps:/usr/local/tomcat/webappsnetworks:  ###定义网络的桥- testtomcat81: ##服务名称#container_name: tomcat8080 指定容器名称image: tomcat:8 #镜像文件名称ports:  ###端口号的映射- 8081:8080volumes: ## 数据源 宿主机与容器数据共享- /usr/tomcat/webapps:/usr/local/tomcat/webappsnetworks:- test
networks:  ## 定义服务的桥test:

七、使用Compose部署springboot项目

  1. SpringBoot application,yml
spring:profiles:active: prddatasource:#ip指定 mysql 容器服务的名称url: jdbc:mysql://mysql:3306/testdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver
server:###端口号port: 8080servlet:##设置springboot项目访问路径context-path: /abc
  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. docker-compose.yml
version: "3.0"
services:mysql: # mysql服务image: mysql:5.7command: --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:- mwebmy-web: #自己单独的springboot项目hostname: abcbuild: ./     #需要构建的Dockerfile文件ports:- "38000:8080"      #容器端口映射到宿主机的端口depends_on:      #web服务依赖mysql服务,要等mysql服务先启动- mysqlnetworks:- mweb
networks:  ## 定义服务的桥mweb:
  1. 启动服务
docker-compose up -d

八、使用docker_compose 部署mysql 和 redis

version: '2.0'services:         mysql:restart: alwaysimage: mysql:8.0.20container_name: mysqlvolumes:- /home/mysql/data:/var/lib/mysqlcommand:--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_SUBSTITUTIONports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=root123- TZ=Asia/Shanghai redis:restart: alwaysimage: rediscontainer_name: redisvolumes:- /home/redis/data:/dataports:- "6379:6379"command: ["redis-server" ,"--appendonly" ,"yes","--requirepass root123"]

启动服务

docker-compose up -d

九、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 设置进入容器时的路径 默认访问的目录

Docker-Compose 容器编排技术相关推荐

  1. Docker compose 容器编排

    1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...

  2. Docker学习(六):docker compose容器编排

    Docker-compose 实现对容器集群的快速编排 多服务部署的管理工具 定义docker-compose.yml文件,写好容器之间的调用关系,通过命令完成多个容器的同时启动关闭 解决了容器与容器 ...

  3. Docker Compose 容器编排基础使用

    Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务.然后,使用一个命令,就可以从 YML 文件配置中创建并启 ...

  4. Docker Compose容器编排

    Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用.你需要定义一个 YAML 格式的配置文件docker-compose.yml, 写好多个容器之间 ...

  5. 这就是你日日夜夜想要的docker!!!---------Docker Compose容器编排理论+实操

    文章目录 一.Compose简介 1.在Compose中有两个重要的概念 2.docker,dockerfile与docker-compose区别 二.Compose安装与卸载 1.Centos系统安 ...

  6. 容器编排技术 -- Kubernetes kubectl 与 Docker 命令关系

    容器编排技术 -- Kubernetes kubectl 与 Docker 命令关系 1 docker run 2 docker ps 3 docker attach 4 docker exec 5  ...

  7. 容器编排技术 -- 基于Docker本地运行Kubernetes

    容器编排技术 -- 基于Docker本地运行Kubernetes 概览 下面的指引将高速你如何通过Docker创建一个单机.单节点的Kubernetes集群. 下图是最终的结果: 先决条件 1. 你必 ...

  8. Docker 多容器编排Swarm(六)

    docker swarm简介 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机 ...

  9. 浅述 Docker 的容器编排

    作者 | 天元浪子 来源 | CSDN博客 概述 作为容器引擎,Docker为容器化的应用程序提供了开放标准,使得开发者可以用管理应用程序的方式来管理基础架构,实现快速交付.测试和部署代码.随着容器的 ...

最新文章

  1. 总结一下在使用某里云服务器的过程中出现过的一些问题
  2. Heartbeat双机热备配置
  3. [C语言] qsort 快速排序函数讲解
  4. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口 6...
  5. MyBatis创建SqlSession-有没有更好的拿到SqlSessionTemplate 的方法?
  6. 013.Zabbix的Items(监控项)
  7. 构建和测试JSF.next
  8. Linux编程手册读书笔记第四章(20140407)
  9. 用js检测文本框中输入的是否符合条件并有错误和正确提醒
  10. IPFS下载安装和配置
  11. Express框架实现原理
  12. HTML转义字符大全<转>
  13. Spring Boot 之 ResourceHandlerRegistry 通过url直接访问本地服务器上指定路径的资源
  14. 远程桌面连接无法全屏显示
  15. Java学习笔记之设计模式(1)设计模式简介
  16. 《21天学通Java(第6版)》—— 2.10 认证练习
  17. navicat for mysql 10.0.11 简体免安装中文破解版
  18. php 类 抽象方法,「php抽象类和抽象方法」- 海风纷飞Blog
  19. Android aseats 加密,A SEAT
  20. android 基带版本,手机基带是什么?手机的基带版本是什么意思?

热门文章

  1. xeon e7系列服务器cpu,英特尔10核CPU降临,Xeon E7系列处理器正式发布
  2. Tomcat下log4j日志文件 配置过程
  3. 固态硬盘正确分区方法,好用的硬盘分区工具
  4. Rate limit bypas
  5. html显示用户ipv6地址,IPv6地址查询
  6. HihoCoder上网络流算法题目建模总结
  7. 简单易学的机器学习算法——梯度提升决策树GBDT
  8. 给App启用MultiDex功能
  9. VBA破解Excel表格保护密码
  10. Hadoop3.2.1 【 YARN 】源码分析 : NodeStatusUpdaterImpl概述