前言:

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南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. 移动APP开发框架盘点2:Web移动前端框架大全

    前言 自上次发布了<移动APP开发框架盘点>后,时间已经过去了三年, 为什么突然又写一篇续集呢?是因为有一个非常有意思的发现. 开源项目其实有一个成熟周期,这个周期大概是三年左右,自Rea ...

  2. python轻松入门——爬取豆瓣Top250时出现403报错

    关于爬虫程序的418+403报错. 1.按F12打开"开发者调试页面"如下图所示:按步骤,选中Network,找到使用的接口,获取到浏览器访问的信息. 我们需要把自己的python ...

  3. springcloud学习02-对springcloud的理解的记录

    以下都是基于这些资料整理的知识点 学习资料: https://windmt.com/2018/04/14/spring-cloud-0-microservices/ https://www.sprin ...

  4. 初识$router和$route

    初识\(router和\)route 一.前言 ​ vue框架中单页面富应用可以说是其最大的优点功能之一了,应用起来简单直观,说起单页面富应用那就必须得联想到\(router**,但是在项目开发过程中 ...

  5. 常见的反爬措施:UA反爬和Cookie反爬

    摘要:为了屏蔽这些垃圾流量,或者为了降低自己服务器压力,避免被爬虫程序影响到正常人类的使用,开发者会研究各种各样的手段,去反爬虫. 本文分享自华为云社区<Python爬虫反爬,你应该从这篇博客开 ...

  6. redis之 主从复制和哨兵(一)

    一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...

  7. Java 中 sleep 方法和 wait 方法的区别?

    虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件 ...

  8. 什么是 CAS?

    CAS 是 compare and swap 的缩写,即我们所说的比较交换. cas 是一种基于锁的操作,而且是乐观锁.在 java 中锁分为乐观锁和悲观锁.悲观锁是将资源锁住,等一个之前获得锁的线程 ...

  9. 部署新项目自动对数据库进行migrate和让用户收到创建用户/超级用户信息

    当项目中的models有数据表的时候,普通做法是用docke exec -it hello_web_1 bash,进入容器进行migrate,但是我们想要容器一启动就自动创建数据表,可以修改docke ...

  10. vue集成webpack,遭遇 SyntaxError: Unknown word

    这个错误根本和我的项目八竿子打不着,错误原因是配置了 css 的rule,将 这个rule注释掉,正常运行没有问题, 可是我却有强迫症,既然处理 node_modules 文件里才出现的错误,那么我就 ...