docker compose能夠方便咱們快捷高效地管理容器的啓動、中止以及重啓等操做,和批量管理容器,它相似於linux下的shell腳本,基於yaml語法,在該文件裏咱們能夠描述應用的架構,好比用什麼鏡像、數據卷、網絡模式、監聽端口等信息。咱們能夠在一個compose文件中定義一個多容器的應用(好比jumpserver),而後經過該compose來啓動這個應用。 html
一、安裝 docker-composelinux
sudo pip install -U docker-compose
二、建立docker-compose.yml文件 nginx
#Docker:組合web
###定義服務
vi docker-compose.ymldocker
指定內容shell
version: '2' services: phoenix: image: nginx ports: - "8080:80" dragon: image: nginx ports: - "8081:80"
三、啓動服務瀏覽器
// 啓動服務 docker-compose up // 經過瀏覽器訪問 http://192.168.99.100:8080/ http://192.168.99.100:8081/ // 回到終端,這裏會顯示容器裏面的一些日誌,每條日誌的前面會標註一下這個日誌來自哪個服務容器,ctrl+c能夠中止它們,這些服務咱們可讓它在後臺去運行 docker-compose up -d // 查看一下正在運行的容器 docker ps
四、經常使用操做安全
// 查看應用的服務 docker-compose ps // 中止phoenix服務 docker-compose stop phoenix // 中止全部在docker-compose.yml文件中定義的服務 docker-compose stop // 從新啓動phoenix服務 docker-compose start phoenix // 啓動全部服務 docker-compose start // 查看服務的日誌 docker-compose logs // 持續跟蹤服務日誌的變化 docker-compose logs -f // 登陸到phoenix服務容器中 docker-compose exec phoenix bash // 要刪除應用的服務須要先把它們都中止掉 docker-compose stop // 刪除全部服務的容器 docker-compose rm // 注意rm不會刪除掉建立的網絡還有數據卷 docker network ls // 這裏的ninghaodocker_default就是咱們的應用建立一個網絡 // 若是想要刪除全部的這些東西的話,可使用 docker-compose down docker network ls
注意:bash
###網絡
網絡決定了服務之間還有外界跟服務之間怎麼樣去進行溝通,在執行docker-compose up的時候,docker會給咱們建立一個默認的網絡,全部的服務也會屬於這個默認的網絡,服務跟服務之間可使用服務的名字進行相互的通訊,咱們也能夠建立本身的網絡,而後讓指定的服務加入到咱們本身建立的這些網絡裏面,那麼這樣的話屬於這個網絡的服務之間能夠進行通訊,網絡之外的服務就不可以去跟它們進行通訊了, 這樣的話會對這個服務有一個隔離的做用,讓應用更安全一些網絡
###定義網絡
version: '2' services: phoenix: image: nginx ports: - "8080:80" networks: - "fairyland" dragon: image: nginx ports: - "8081:80" networks: - "fairyland" monkey: image: nginx ports: - "8082:80" networks: - "default" networks: fairyland: driver: bridge
docker-compose up -d docker-compose exec phoenix bash ping dragon exit docker-compose exec dragon bash ping phoenix // 從新啓動服務 docker-compose up -d docker-compose exec phoenix bash ping dragon ping monkey // dragon能ping通,monkey不能ping通
###命名的數據卷
version: '2' services: phoenix: image: nginx ports: - "8080:80" networks: - "fairyland" volumes: - nest:/mnt dragon: image: nginx ports: - "8081:80" networks: - "fairyland" volumes: - nest:/mnt monkey: image: nginx ports: - "8082:80" networks: - "default" networks: fairyland: driver: bridge volumes: nest: driver: local
具體可查看 docker-compose up -d docker-compose exec phoenix bash cd /mnt touch phoenix_data_1 ls exit docker-compose exec dragon bash cd /mnt ls
###指定位置的數據卷
docker-compose.yml
version: '2' services: phoenix: image: nginx ports: - "8080:80" networks: - "fairyland" volumes: - nest:/mnt - ./app/web:/usr/share/nginx/html dragon: image: nginx ports: - "8081:80" networks: - "fairyland" volumes: - nest:/mnt - ./app/web:/usr/share/nginx/html monkey: image: nginx ports: - "8082:80" networks: - "default" networks: fairyland: driver: bridge volumes: nest: driver: local