前言:

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i

概念介绍:

Docker

Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。

Docker-Compose

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知

优点:

根据定义的docker-compose.yaml配置文件批量容器编排,轻松高效的管理容器定义,Docker就会按照你声明的配置去把所有的容器启动起来及运行

缺点:

但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器

使用事项:

compose是docker官方的开源项目,需要安装!与它配对使用的是一个docker-compose.yaml文件,docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用。

Compose 使用的三个步骤:

  • 使用Dockerfile定义应用程序的环境。

  • 使用 docker-cmpose.yaml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-cmpose up 命令来启动并运行整个应用程序。

docker-cmpose.yaml的配置案例如下(配置参数参考下文):

version: "3.0"  # 对于docker版本号
services: #定义服务
web: #web引用,自己编写的程序,下面是应用配置
build: . #获取当前目录下Dockerfile文件编译
depends_on: #代表启动顺序
- db
- redis
ports:
- "5000:5000" #端口暴露
volumes: #挂载路径
- .:/code
- logvolume01:/var/log
links:
- redis
redis: #redis应用
image: redis
deploy:
replicas: 6 #副本数
db: #db应用
images:postgres
volumes:
logvolume01: {}

实践

一、环境准备

在 Linux 系统上安装 Docker

使用compose必然需要docker

1.1 yum安装Docker

yum install docker    #安装docker,需要root

1.2 查看版本

docker --version  #查看版本

样例输出:

1.3 启动docker

sudo systemctl start docker.service    #启动 Docker

sudo systemctl enable docker.service   #关闭Docker

在 Linux 系统上安装 Compose

由于compose是docker官方的开源项目,需要安装!!!

1.1 下载compose

# 国外
sudo curl -L "https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内(推荐)
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

1.2 添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose #授权

1.3 查看版本

docker-compose --version #查看版本

样例输出:

二、项目实施

2.1 创建项目

此处以Springboot项目为例,其pom.xml依赖如下

   <dependencies>
<!--web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>

2.2 新增application.properties配置

注:在此示例中,redis是应用程序网络上的 redis 容器的主机名

#配置启动端口
server.port=8888
#配置redis地址,此处指定后续dockers镜像名称
spring.redis.host=redis

2.3 编写程序计数器

package com.example.compose;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class IndexController { /**
* .
* 注入redis
*/
@Autowired
private StringRedisTemplate redisTemplate; /**
* .
* 程序计数器,每访问一次就+1
*
* @return
*/
@GetMapping("/hello")
public String hello() {
Long views = redisTemplate.opsForValue().increment("views");
return "hello docker compose views:" + views;
}
}

2.4  创建 Dockerfile

在你的项目目录中,创建一个Dockerfile。有关编写 Dockerfile 更多信息,请参阅 Docker 用户指南 和Dockerfile 参考

#指定jdk1.8
FROM java:8
#当前jar拷贝到容器中指定名称
COPY *.jar /app.jar
#程序运行时指定程序端口
CMD ["--server-port=8888"]
#暴露端口
EXPOSE 8888
#运行
ENTRYPOINT ["java", "-jar","/app.jar"]

2.4 编排服务

在你的项目目录中创建一个名docker-compose.yaml的文件。定义了两个服务:composeappredis.

version: '3.0'  #对应版本号

services:
composeapp:
build: . #表示获取当前目录下Dockerfile文件进行编译
#dockerfile: Dockerfile #指定当前目录下的文件
image: composeapp #镜像名称
depends_on: #优先启动
- redis
ports: #端口映射
- "8888:8888" redis: #拉取镜像
image: "library/redis:alpine"

友情提示:上述版本号对比示例图。官网对比链接

2.5 将项目打包

三、服务上传启动

3.1 Linux创建一个目录

 mkdir my_composeapp  #创建目录

 cd my_composeapp  #进入

3.2 上传相关文件

上传项目打包后的jarDockerfiledocker-compose.yaml相关配置文件

3.3 启动compose服务

注:docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用

docker-compose up 

docker-compose up -d #-d【后台启动】

docker-compose down  #关闭 【ctrl + c】

样例输出:

项目启动,页面输出日志

3.4 查看运行的容器

此处可见已拉取redis镜像并生成了容器、及已生成java项目运行容器

3.5 访问样例

curl localhost:8888/hello  #访问测试

样例输出:

至此,docker-compose使用简直在方便了!!!大大简化了我们的部署工作。学废的小伙伴记得给自己加鸡腿~

总结:

我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!

参考链接参考链接

docker容器编排原来这么丝滑~的更多相关文章

  1. Docker学习(十)Docker容器编排 Docker-compose

    Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...

  2. Docker容器编排器概览

    就像Apple推出iPhone让智能手机变成主流,Docker让容器变成了主流.自从项目发布以来,Docker着重于提升开发者的体验.基本理念是可以在整个行业中,在一个标准的框架上,构建.交付并且运行 ...

  3. .net core docker容器编排部署(linux)

    环境准备 需要一个linux操作系统:我这里用的是ubuntu 18.04,安装步骤就不说了,网上很多教程,当然也可以私信我. 既然需要用到docker,那么就安装个docker,apt instal ...

  4. Docker 容器编排利器 Docker Compose

    Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...

  5. docker容器编排 (4)

    容器编排 我们的项目可能会使用了多个容器,容器多了之后管理容器的工作就会变得麻烦.如果要对多个容器进行自动配置使得容器可以相互协作甚至实现复杂的调度,这就需要进行容器编排.Docker原生对容器编排的 ...

  6. Docker容器编排工具——docker-compose

    1.docker-compose介绍 2.使用的三个步骤 3.安装docker-compose yum install docker-compose 4.docker-compose.yml 文件 ( ...

  7. Docker - 容器编排工具 compose 之安装

    准备 首先,在使用和安装 docker compose之前,我们应该确保我们已经安装了 docker engine. 安装 官网上面有好多种安装方式,由于我们现在是在使用Docker, 个人感觉应该以 ...

  8. 实战Docker容器调度

    目录 一.前言 二.Docker Compose 2.1.简介 2.2.下载安装 2.3.小实验 2.4.小实验的细节 2.5.Compose file的编写规则 三.Docker Swarm 3.1 ...

  9. docker容器技术基础入门

    目录 docker容器技术基础入门 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 docker ...

随机推荐

  1. Three.js 火焰效果实现艾尔登法环动态logo 🔥

    声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 <艾尔登法环>是最近比较火的一款游戏,观察可以发现它的 Log ...

  2. 关于OAuth2.0 Authorization Code + PKCE flow在原生客户端(Native App)下集成的一点思考

    写在前面 前几天看了园友的一篇文章被广泛使用的OAuth2.0的密码模式已经废了,放弃吧 被再次提起: Implicit Flow Password Grant,均已被标记为Legacy,且OAuth ...

  3. 阿里云镜像站DNS——Chrome配置方法

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 DNS 简介 域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送. 阿 ...

  4. Nginx--sub_filter模块

    客户端浏览器访问替换html中的字符: location / { root /web/htdocs; random_index on; index index.html index.htm; subs ...

  5. linux鸟哥学习笔记

    Linux学习笔记 Linux档案权限和目录配置 目录如果没有x权限,则无法进入该目录 改变文件和属性 chgrp: 改变档案所属的群组 chown:改变档案的拥有者 chmod:改变档案的权限,SU ...

  6. Delaunay三角剖分及MATLAB实例

    https://blog.csdn.net/piaoxuezhong/article/details/68065170 一.原理部分 点集的三角剖分(Triangulation),对数值分析(如有限元 ...

  7. SVPWM实现概述

    SVPWM是FOC的基础,其实现流程大致如下所示: 1. 判断合成矢量所在扇区 2. 计算相邻矢量作用时间 3. 计算各桥臂导通时间 4. 得到各相PWM占空比 5. 更新相应寄存器值  SVPWM目 ...

  8. C++11移动语义之一(基本概念)

    摘要 移动语义是C++11的新特性之一,利用移动语义可以实现对象的移动而非拷贝.在某些情况下,可以大幅度的提升性能.本文将介绍C++11移动语义中的一些基本概念. 表达式 表达式是由一个或者多个运算对 ...

  9. Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

    1.64 GB 内存的机器是非常理想的, 但是 32 GB 和 16 GB 机器也是很常见的.少于 8 GB 会适得其反. 2.如果你要在更快的 CPUs 和更多的核心之间选择,选择更多的核心更好.多 ...

  10. 解释 MySQL 外连接、内连接与自连接的区别 ?

    先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一 个表的所有记录和另一个表中的所有记录一一匹配. 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合 条 ...