終於寫到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 選擇對應的文件下載。
下載下來後,咱們放到 /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 那最重要的就是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 的指令是差很少的。
解決容器的依賴,表示一個容器依賴其餘的其餘容器,好比說
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 --help
基本語法格式:
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
我這裏也就將一下常見的,由於經過--help
均可以查到。
用於檢查咱們的docker-compose.yml 文件的內容格式是否正確,在咱們運行以前先檢測一下比較好。
用來啓動項目,好比咱們如今有一個docker-compose.yml 文件,那咱們進入到這個文件目錄,執行docker-compose up
就能夠將項目依賴的鏡像下載下來,並啓動相應的容器服務。整個項目都啓動起來了,直接使用就行了,可謂是至關強大了。
docker-compose up -d 表示後臺啓動。
和 up 對應,用來中止咱們的項目。
重啓咱們項目
其餘的也不說了,能夠查看官網:
https://docs.docker.com/compose/reference/overview/
光說不練假把式,咱們上面說的一堆基礎的知識,仍是須要咱們實踐才行,否則咱們不會有什麼實質性的收穫。因此接下來咱們就搭建一個簡單的demo。
咱們仍是用前面的的hello的項目,咱們對項目進行一些修改,增長 redis。
這裏我就不具體的講啦,有不會的能夠看我這篇文章,寫的很簡單明瞭:
咱們這裏先在在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); } }
好了,咱們將項目打包成鏡像,至於怎麼打包成鏡像上一篇我已經講了,不會的能夠查看:
咱們使用 redis 鏡像,可是咱們不想使用默認的配置,想要使用本身的配置啓動redis。因此咱們來複制一份redis.conf 。我就修改了
#設置redis 能夠遠程訪問 bind 0.0.0.0 #後臺啓動 daemonize yes
redis.conf 放在咱們上圖的redis目錄下。
咱們來編寫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 啓動鏡像。咱們直接在存放docker-compose.yml 目錄下執行:
docker-compose up
這樣咱們就啓動成功了。
若是想後臺啓動的話輸入:
docker-compose up -d
咱們項目啓動,如今來測試一下到底成功沒有。
http://192.168.252.53:9000/
這個是測試項目是正常啓動了。
咱們接下來看看咱們配置的redis 有沒有成功。
http://192.168.252.53:9000/redis/add?key=a&value=123qaz http://192.168.252.53:9000/redis/get?key=a
能夠看到界面上接口沒有問題了,redis已經已經生效了,咱們還不太肯定,能夠去服務器上看下。
。本地沒有裝redis ,咱們能夠進入到redis容器中去查看。
操做以下:
先經過docker ps
查看redis 容器id
而後經過下面命令進入容器。
docker exec -it 容器id /bin/bash
最後鏈接redis
redis-cli
好了,就說這麼多啦
後續加油♡
歡迎你們關注我的公衆號 "程序員愛酸奶"
分享各類學習資料,包含java,linux,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。
若是你們喜歡記得關注和分享喲❤