前言:

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南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. Python:range、np.arange和np.linspace

    1. range range是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组特殊的数,它的原型可以近似表示如下: class rang ...

  2. AQS 详解之共享锁模式

    概括 AQS框架数据结构是一个先进先出的双向队列,当多个线程进行竞争资源时,那些竞争失败的线程会加入到队列中.他向上层提供了很多接口,其中一个是acquireShared获取共享模式的接口.本文将会根 ...

  3. VS code 设置中文语言环境(实现语言切换自由)

    1.打开vs code,然后按快捷键ctrl+shift+p,输入configure language>回车 2.选择Install Additional Languages... 3.在左侧选 ...

  4. linux命令管道工作原理与使用方法

    一.管道定义 管道是一种两个进程间进行单向通信的机制.因为管道传递数据的单向性,管道又称为半双工管道.管道的这一特点决定了器使用的局限性.管道是Linux支持的最初Unix IPC形式之一,具有以下特 ...

  5. 如何看待malloc产生内存碎片

    上代码直接研究: int main() { int *heap_d; int *heap_e; int *heap_f; heap_d = (int *)malloc(10); heap_e = (i ...

  6. Java并发机制(8)--concurrent包下辅助类的使用

    Java并发编程:concurrent包下辅助类的使用 整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920397.html 1.CountDown ...

  7. Myql 中的事务回滚机制概述 ?

    事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个 不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤 销.要同时修改数据库中两个不同表时,如果它们不是一个事务 ...

  8. java-StringBuilder

    一个可变的字符序列. String类的对象内容不可以改变,所以每当进行字符串恶拼接时,总是会在内存中创建一个新的对象,所以经常改变内容的字符串 所以最好不要用String,因为每次生成的对象都会对系统 ...

  9. Invalid prop: type check failed for prop "maxlength"

    Invalid prop: type check failed for prop "maxlength", element 框架时,因为想限制文本框的输入长度, maxlength ...

  10. Java根路径设置(在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了)

    在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了