前言
終於寫到docker-compose了,其實我最開始接觸docker的時候,是因為一個開源項目需要用docker 環境和docke-compose 所以我最先接觸的是docker-compse 后面才惡補的docker的一些基礎知識。
可以看到docker-composer 和docker 有關系,但是你也了解docker-compose 的命令 簡單的操作docker 容器。
說了這么多,還沒有說docker-compose 有什么作用,為什么要使用docker-coompose。
其實我們都知道,在我們實際的項目中,一個項目一般都是前端服務端數據庫都進行分離的。所以一個項目一般都是有多個鏡像組成的。那怎么將這一組鏡像管理起來呢?就是通過docker-compose 啦
docker-compose 中有兩個重要呢的概念
服務(service ): 就是我們上面說的一個應用容器,僅僅負責真個項目的中的一部分,比如數據庫mysql.
項目(project):就是我們上面說你的項目啦,包含一組容器。
docker-compose 通過 docker-compose.yml 文件對這一組容器進行配置。
好了,正式開始接觸 docker-compose吧
安裝
docker-compose 安裝很簡單,windos 版本的已經自帶了。我們可以通過
docker-compose -v
查看我們本機安裝的docker-compose 版本。
Linux 安裝也很簡單。
在官網上也有:https://github.com/docker/compose/releases
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-compose
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.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。
這里我就不具體的講啦,有不會的可以看我這篇文章,寫的很簡單明了:
我們這里先在在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.conf
我們使用 redis 鏡像,但是我們不想使用默認的配置,想要使用自己的配置啟動redis。所以我們來復制一份redis.conf 。我就修改了
#設置redis 可以遠程訪問
bind 0.0.0.0
#后台啟動
daemonize yes
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
這樣我們就啟動成功了。
如果想后台啟動的話輸入:
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,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。
如果大家喜歡記得關注和分享喲❤