docker学习笔记(六)Docker

阅读: 评论:0

docker学习笔记(六)Docker

docker学习笔记(六)Docker

docker学习笔记(五)Docker-Compose

简介

Docker-compose是官方的开源项目,负责实现对Docker容器集群的快速编排

举个简单的例子,我们一个java Web应用,依赖的环境有jdk ,数据库使用的mysql,缓存数据库使用的redis,消息队列服务器使用的是rabbitmq,并且分为ABC三个应用协作运行,也就是说我们需要一台mysql服务器,一台rabbitmq服务器和一台redis服务器,Docker-Compose服务编排,也就是说我们使用Docker-compose自定义一个配置文件去配置这些环境,将环境安装在Docker中,并且编排好启动顺序,依赖,在以后应用服务移植时可以不用重复搭建环境,只需要安装Docker环境即可

Compose中有两个重要的概念:

  • 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例,比如:ABC三个应用协作运行,需要三台mysql服务,可以从同一个镜像中运行三个不同的mysql实例即可

  • 项目(project): 由一组关联应用容器组成的一个完整的业务单元,例如我们ABC三个应用协作,加上运行环境 redis实例,mq实例 ,mysql实例,这样构成一个项目的完整运行,是一组完整的业务单元

    compose的默认管理对象是项目,也就是说通过命令对项目中的一组容器进行便捷的生命周期管理,compose项目由Python编写,实际上调用了Docker服务提供的API来对容器进行管理,因此,只要所有操作的平台支持DockerAPI,就可以利用Compose来进行编排管理

    安装命令

    #下载
    sudo curl -L .20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    #安装
    chmod +x /usr/local/bin/docker-compose
    #查看版本
    docker-compose version
    # 显示
    mrwhite@mrwhite-PC:~$ docker-compose version
    docker-compose version 1.20.0, build ca8d3c6
    docker-py version: 3.1.3
    CPython version: 3.6.4
    OpenSSL version: OpenSSL 1.0.1t  3 May 2016

    bash补全命令

    curl -L .8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    

    卸载

    如果是二进制包方式安装的,删除二进制文件即可

sudo rm /usr/local/bin/docker-compose

使用Docker-Compose部署springboot应用

现在有一个springboot应用,使用的依赖环境有 redis,我们需要的环境就是redis,java环境,使用docker-compose将java和redis的环境打包为一组服务部署.

controller

/*** Docker-Compose应用测试类** @author baijie* @date 2019-08-23*/
@RestController
public class ComposeController {@Autowiredprivate RedisTemplate<String,String> redisTemplate;String KEY =  "INCR_KEY" ;@GetMapping("/get/incr")public String getIncr(){String s = redisTemplate.opsForValue().get(KEY);if(StringUtils.isEmpty(s)){redisTemplate.opsForValue().set(KEY,"1");return "1";}else {Long increment = redisTemplate.opsForValue().increment(KEY);String();}}
}

server:port: 9070
spring:redis:host: redis_cacheport: 6379timeout: 60sdatabase: 0lettuce:pool:max-active: 200max-idle: 20min-idle: 5max-wait: -1

pom redis 依赖

 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>redis.clients</groupId><artifactId>jedis</artifactId></exclusion><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency>

maven Docker 插件

  <build><finalName>docker-springboot</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- Docker maven plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><imageTags><imageTag>v1</imageTag></imageTags><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><!-- Docker maven plugin --></plugins></build>

springboot Dockerfile配置

FROM maven:3.5-jdk-8

准备f的配置

appendonly yes
daemonize no

创建文件夹并启动

cd ~
mkdir docker-compose
cd docker-compose

编写Docker-compose文件

version: "3"services:app:build: ./appports: - 9070:9018environment:- TZ=Asia/Shanghaidepends_on:- redis_cacheworking_dir: /appvolumes: - /etc/localtime:/etc/localtime:ro- ./app:/applinks:- redis_cachecommand: mvn clean spring-boot:runredis_cache:restart: alwaysports:- 6379:6379image: redis container_name: redis_cachecommand: redis-server /usr/local/etc/fvolumes:- ./redis_data/:/data/- ./f:/usr/local/etc/f

更改项目目录结构

将项目拷贝至docker-compose文件夹并命名为app,在其中创建一个Dockerfile

FROM maven:3.5-jdk-8

启动Docker-compose

# 拉取镜像
docker-compose pull 

启动项目

docker-compose up -d

Docker-compose配置解释

​ version:

“3” 代表使用第三代语法构建docker-compose编排服务文件

​ services:

代表一组服务,该标签下每一个服务是在运行时是一个容器

​ app:

服务名,根据我们自己的服务自定义

​ image :

指定我们的容器运行时从哪个镜像启动实例,

​ build

代表构建的镜像的Dockerfile所在的目录,build和image在docker-compose文件中的同一个服务中必须定义一个

​ ports:

端口号配置 9070代表宿主机的端口,9018代表容器内部的端口,容器内部的端口与springboot内部配置的端口需要对应

​ environment:

容器运行时的环境配置,“SPRING_PROFILES_ACTIVE=dev” 代表启动springboot应用时指定的配置文件,- TZ=Asia/Shanghai配置容器的时区,防止容器内时间与宿主机时间不同步

​ working_dir:

代表容器内应用的工作目录

​ volumes:

容器内部的目录挂载,例如: - ./app ./app代表宿主机目录,/app代表容器内的目录

depends_on:

服务依赖,在服务下此标签的意思是依赖于以下服务

​ restart:

always 代表如果服务启动不成功会一直尝试

​ container_name:

指定容器的名称,如果没有这个配置,compose会默认分配一个容器名称

​ command:

表示以这个命令启动这个服务

​ links:

容器的链接,docker-compose中的每一个服务就是一个容器,而容器的环境是隔离的,容器相互依赖就需要通信,links是为了保持两个容器之间的通信,而且在容器内部通过compose配置links可以在容器内部使用服务名+端口来访问其他容器

Docker-compose 命令详解

#查看帮助
docker-compose -h# -f  指定使用的 Compose 模板文件,默认为 l,可以多次指定。
docker-compose -l up -d #启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d#停用移除所有容器以及网络相关
docker-compose down#查看服务容器的输出
docker-compose logs#列出项目中目前的所有容器
docker-compose ps#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build#拉取服务依赖的镜像
docker-compose pull#重启项目中的服务
docker-compose restart#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm #在指定服务上执行一个命令。
docker-compose run ubuntu ping docker#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2#启动已经存在的服务容器。
docker-compose start#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop

参考

Docker Compose + Spring Boot + Nginx + Mysql 实践

本文发布于:2024-02-03 05:54:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170691085649082.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:学习笔记   docker   Docker
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23