解決使用Docker Compose管理容器的問題
在Docker的設計中,一個容器隻運行一個應用。但是目前的絕大多數應用系統都不是一個應用就可以組成的。雖然之前提到瞭容器間互相連接、交換數據的方法,使用這些方法也確實能搭建起一個完整應用系統的容器群。但是,需要執行很多命令,需要考慮很多應用和容器間的關系,而Docker Compose正是為瞭解決這些復雜的操作。
解決容器管理問題
就拿最簡單的例⼦來說吧,如果我們要為我們的應⽤容器準備⼀個 MySQL 容器和⼀個 Redis 容器,那麼在每次啟動時,我們先要將 MySQL 容器和 Redis 容器啟動起來,再將應⽤容器運⾏起來。這其中還不要忘瞭在創建應⽤容器時將容器⽹絡連接到 MySQL 容器和 Redis 容器上,以便應⽤連接上它們並進⾏數據交換。
這還不夠,如果我們還對容器進⾏瞭各種配置,我們最好還得將容器創建和配置的命令保存下來,以便下次可以直接使⽤。
如果我們要想讓這套體系像 docker run 和 docker rm 那樣⾃如的進⾏⽆痕切換,那就更加⿇煩瞭,我們可能需要編寫⼀些腳本才能不⾄於被繞到命令的⽑線球⾥。
其實核⼼還是缺少⼀個對容器組合進⾏管理的東西。
Docker Compose
Docker Compose :多容器定義和運行軟件。在Docker Compose中,根據一個配置文件,將所有與應用系統相關的應用和對應的容器進行配置,再根據Docker Compose提供的命令進行啟動,就可以解決上面說的多容器之間的復雜問題。 Docker Compose可以理解為是將多個容器的運行方式和配置固化,類似與Dockerfile 對於鏡像的作用。
安裝Docker Compose
#下載 curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #設置權限 chmod +x /usr/local/bin/docker-compose #查看安裝後的信息 docker-compose version
Docker Compose的基本使用
Docker Compose的核心是它的配置文件,是一個基於YAML格式的文件。與Dockerfile采用Dockerfile這個名字作為鏡像構建定義的默認文件名一樣,Docker Compose的配置文件也有一個默認的文件名docker-compose.yml
。
一個簡單的配置內容
version: '3' services: webapp: build: ./image/webapp ports: - "5000:5000" volumes: - ./code:/code - logvolume:/var/log links: - mysql - redis redis: image: redis:3.2 mysql: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=my-secret-pw volumes: logvolume: {}
Docker Compose 配置⽂件⾥可以包含許多內容,從每個容器的各個細節控制,到⽹絡、數據卷等的定義。
version
是Docker Compose的版本號,最新的是3。services
是配置的核心,定義瞭容器的各項細節。每個services代表的是一個應用集群的配置
啟動和停止
啟動
docker-compose up
,會根據配置文件創建配置的所有容器、網絡、數據卷等內容,並將它們啟動。與docker run
命令類似,並且都是前臺啟動,如果要以守護進程方式啟動也需要加-d
docker-compose up -d
docker-compose up
會默認識別當前控制臺所在目錄的docker-compose.yml
文件,如果要指定目錄可以通過-f
命令,指定項目名可以通過-t
命令
docker-compose -f ./compose/docker-compose.yml -p myapp up -d
停止
docker-compose down
命令用於停止所有容器,並將它們刪除,同時刪除網絡等配置。也就是⼏乎將這個 Docker Compose 項⽬的所有影響從 Docker 中清除。
容器命令
這些命令看上去都和 Docker Engine 中對單個容器進⾏操作的命令類似,我們來看⼏個常見的。
在 Docker Engine 中,如果我們想要查看容器中主進程的輸出內容,可以使⽤ docker logs
命令。⽽由於在 Docker Compose 下運⾏的服務,其命名都是由 Docker Compose ⾃動完成的,如果我們直接使⽤docker logs
就需要先找到容器的名字,這顯然有些⿇煩瞭。我們可以直接使⽤ docker-compose logs
命令來完成這項⼯作。
docker-compose logs nginx
同理,在 Docker Compose 還有⼏個類似的命令可以單獨控制某個或某些服務。
通過 docker-compose create
, docker-compose start
和 docker-compose stop
我們可以實現與 docker create
, docker start
和 docker stop
相似的效果,隻不過操作的對象由 Docker Engine 中的容器變為瞭 Docker Compose 中的服務。
到此這篇關於使用Docker Compose管理容器的文章就介紹到這瞭,更多相關Docker Compose管理容器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Docker Compose的安裝和使用步驟
- Docker compose部署SpringBoot項目連接MySQL及遇到的坑
- docker compose快速開始超詳細教程
- docker-compose安裝yml文件配置方式
- docker-compose教程之安裝使用和快速入門