5、docker-compose開鋒(docker 三劍客)

前言

終於寫到docker-compose了,其實我最開始接觸docker的時候,是由於一個開源項目須要用docker 環境和docke-compose 因此我最早接觸的是docker-compse 後面才惡補的docker的一些基礎知識。html

能夠看到docker-composer 和docker 有關係,可是你也瞭解docker-compose 的命令 簡單的操做docker 容器。前端

說了這麼多,尚未說docker-compose 有什麼做用,爲何要使用docker-coompose。
其實咱們都知道,在咱們實際的項目中,一個項目通常都是前端服務端數據庫都進行分離的。因此一個項目通常都是有多個鏡像組成的。那怎麼將這一組鏡像管理起來呢?就是經過docker-compose 啦java

docker-compose 中有兩個重要呢的概念
服務(service ): 就是咱們上面說的一個應用容器,僅僅負責真個項目的中的一部分,好比數據庫mysql.mysql

項目(project):就是咱們上面說你的項目啦,包含一組容器。linux

docker-compose 經過 docker-compose.yml 文件對這一組容器進行配置。git

好了,正式開始接觸 docker-compose吧程序員

安裝

docker-compose 安裝很簡單,windos 版本的已經自帶了。咱們能夠經過github

docker-compose  -v

查看咱們本機安裝的docker-compose 版本。
Linux 安裝也很簡單。
在官網上也有:https://github.com/docker/compose/releasesweb

sudo apt-get update

#安裝最新的docke-ce
sudo apt-get install  docker-ce

# 下載最新的docker-compose
curl -L https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 修改docker-compose 權限
chmod +x /usr/local/bin/docker-compose

卸載 docke-composeredis

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

本地安裝

若是上面安裝不行的話,或者報錯,能夠用下面的方式進行安裝。

在上面的官網上找到對應版本的Assests 選擇對應的文件下載。

file

下載下來後,咱們放到 /usr/local/bin/ 目錄下。執行下面操做

#更名
sudo mv docker-compose-Linux-x86_64 ./docker-compose
#增長執行權限
sudo chmod +x /usr/local/bin/docker-compose

這樣就和上面的效果是同樣的啦,咱們能夠經過docker-compose -v 查看安裝成功沒有。

docker-compose.yml

知道了docker-compose 那最重要的就是docker-compose.yml 文件啦,經過這個文件就能夠管理項目的鏡像了,那咱們怎麼寫docker-compose.yml 文件呢?
官方提供了不少模版,咱們按照模版來寫就能夠了。

主模版

version: "3"

services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"

能夠看到格式就是咱們熟悉的yml 格式,和咱們springboot 項目中配置是差很少的。
咱們前面知道的一個項目是由一組服務組成的,也就是你對應文件中的services。webapp 就是咱們爲服務起的一個名字,image 對應的鏡像名,ports 鏡像暴露的端口,volumes 鏡像的數據卷。能夠看到,裏面的命令和docker run 的指令是差很少的。

depends_on

解決容器的依賴,表示一個容器依賴其餘的其餘容器,好比說

version: "3"

services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"
    depends_on: 
      - redis
      - mysql

  redis:
    image: redis:latest
    restart: always
    ports:
      - "6379:6379"

  mysql:
    image: mysql:latest
    restart: always
    ports:
      - "3306:3306"

仍是上面的例子,只不過我多加了兩個 service 。表示這個項目中用到了mysql 和redis 而且在webapp 中使用depends_on 表示redis 和mysql 先webapp 啓動。

更多的模版,你們用的時候能夠參考官網上就能夠了我感受。知道是什麼意思就能夠,不用都記下來。

https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html

docker-compose 指令

咱們能夠經過幫助指令來查看docker-compose 怎麼使用。

docker-compose --help

基本語法格式:

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

我這裏也就將一下常見的,由於經過--help 均可以查到。

docker-compose config

用於檢查咱們的docker-compose.yml 文件的內容格式是否正確,在咱們運行以前先檢測一下比較好。

docker-compose up

用來啓動項目,好比咱們如今有一個docker-compose.yml 文件,那咱們進入到這個文件目錄,執行docker-compose up 就能夠將項目依賴的鏡像下載下來,並啓動相應的容器服務。整個項目都啓動起來了,直接使用就行了,可謂是至關強大了。

docker-compose up -d 表示後臺啓動。

docker-compose down

和 up 對應,用來中止咱們的項目。

docker-compose restart

重啓咱們項目

其餘的也不說了,能夠查看官網:

https://docs.docker.com/compose/reference/overview/

demo

光說不練假把式,咱們上面說的一堆基礎的知識,仍是須要咱們實踐才行,否則咱們不會有什麼實質性的收穫。因此接下來咱們就搭建一個簡單的demo。

咱們仍是用前面的的hello的項目,咱們對項目進行一些修改,增長 redis。
這裏我就不具體的講啦,有不會的能夠看我這篇文章,寫的很簡單明瞭:

3、Redis在SpringBoot中使用案例

咱們這裏先在在pom.xml 中增長redis 依賴:

<!--Redis使用starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

在application.properties 中增長redis 配置

#配置redis
# Redis數據庫索引(默認爲0)
spring.redis.database=0  
# Redis服務器地址
spring.redis.host=192.168.252.53
# Redis服務器鏈接端口
spring.redis.port=6389  
# Redis服務器鏈接密碼(默認爲空)
spring.redis.password=
# 鏈接池最大鏈接數(使用負值表示沒有限制) 默認 8
spring.redis.lettuce.pool.max-active=8
# 鏈接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1
spring.redis.lettuce.pool.max-wait=-1
# 鏈接池中的最大空閒鏈接 默認 8
spring.redis.lettuce.pool.max-idle=8
# 鏈接池中的最小空閒鏈接 默認 0
spring.redis.lettuce.pool.min-idle=0

在controller 包中建立一個redisController 類

@RestController
@RequestMapping("/redis")
@Slf4j
public class RedisController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping(value = "/add",method = RequestMethod.GET)
    public String add(@RequestParam(value="key")String key,@RequestParam(value = "value") String value){
        ValueOperations ops=stringRedisTemplate.opsForValue();
        ops.set(key,value);
        return "success";
    }

    @RequestMapping(value = "/get",method = RequestMethod.GET)
    public String get(@RequestParam(value = "key")String key){
        ValueOperations ops=stringRedisTemplate.opsForValue();
        return (String) ops.get(key);
    }
    
}

好了,咱們將項目打包成鏡像,至於怎麼打包成鏡像上一篇我已經講了,不會的能夠查看:

3、DockerFile 定製屬於本身的專屬鏡像

準備咱們的redis.conf

咱們使用 redis 鏡像,可是咱們不想使用默認的配置,想要使用本身的配置啓動redis。因此咱們來複制一份redis.conf 。我就修改了

#設置redis 能夠遠程訪問
bind 0.0.0.0
#後臺啓動
daemonize yes

file
redis.conf 放在咱們上圖的redis目錄下。

docker-compose.yml

咱們來編寫docker-compose.yml ,直接套用上面的模版。

version: "3"
  
services:
  webapp:
    image: quellanan/hello:1.0.0
    ports:
      - "9000:9000"
    volumes:
      - "/data"
    depends_on:
      - redis

  redis:
    image: redis:latest
    restart: always
    ports:
      - "6389:6379"
    volumes:
      - /redis/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf

能夠看到基本上是根據模版來的,指定咱們鏡像,端口,數據卷。
這裏webapp 的沒有什麼好說的 ,上面都說了,一看就能懂,說一下redis的。
images 指定的鏡像爲redis:latest ,若是你本地沒有這個鏡像,就會從官網上下載。
restart:always 表示自動重啓。

ports:"6389:6379"

表示鏡像啓動redis容器的端口是6379,映射到服務器的6389 端口,因此咱們在項目配置的redis 端口應該是6389.

volumes: /redis/redis.conf:/etc/redis/redis.conf

表示將 ./redis/redis.conf 文件加載到 容器中的 /etc/redis/redis.conf 位置。
說明第一個路徑是相對路徑,第二個路徑是絕對路徑。

command: redis-server /etc/redis/redis.conf

表示在啓動redis 容器的時候會執行的命令。這樣就能夠實現啓動redis鏡像加載咱們本身的配置文件了。

docker-compose up

準備工做都作好了,開始咱們大展拳腳,哈哈,其實否則,咱們準備工做作好了,就已經成功一大半了,咱們接下來要作的就是 就是經過docker-compose 啓動鏡像。咱們直接在存放docker-compose.yml 目錄下執行:

docker-compose up

file
這樣咱們就啓動成功了。

若是想後臺啓動的話輸入:

docker-compose up -d

測試

咱們項目啓動,如今來測試一下到底成功沒有。

http://192.168.252.53:9000/

這個是測試項目是正常啓動了。
file
咱們接下來看看咱們配置的redis 有沒有成功。

http://192.168.252.53:9000/redis/add?key=a&value=123qaz
http://192.168.252.53:9000/redis/get?key=a

file
file

能夠看到界面上接口沒有問題了,redis已經已經生效了,咱們還不太肯定,能夠去服務器上看下。
file。本地沒有裝redis ,咱們能夠進入到redis容器中去查看。
操做以下:
先經過docker ps 查看redis 容器id
而後經過下面命令進入容器。

docker exec -it 容器id  /bin/bash

最後鏈接redis

redis-cli

file

番外

好了,就說這麼多啦

後續加油♡

歡迎你們關注我的公衆號 "程序員愛酸奶"

分享各類學習資料,包含java,linux,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。

若是你們喜歡記得關注和分享喲❤

file

相關文章
相關標籤/搜索