Docker使用Dockerfile來實現對現有鏡像的修改來建立新的鏡像, 那docker-compose則完成鏡像的自動部署, 能夠實現多個容器同時部署git
Dockerfile能夠讓用戶管理一個單獨的應用容器;而Compose則運行用戶在一個模板中定義一組相關聯的容器(被成爲一個project項目),github
例如一個web服務器加上後端的數據庫容器等web
安裝最新版本redis
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
YAML模板文件(關鍵字)docker
指定鏡像名稱或鏡像ID,若是鏡像不存在,嘗試拉取鏡像數據庫
指定Dockerfile所在文件夾路徑,自動建立鏡像並使用這個鏡像後端
覆蓋容器啓動後默認執行的命令服務器
鏈接到其餘容器網絡
鏈接到docker-compose.yml外部的容器,甚至非Compose管理的容器dom
暴露端口信息並對外進行映射
暴露端口,但不對外映射,只被鏈接links的服務訪問
卷掛載設置
從另外一個服務或容器掛載它的全部卷
設置環境變量
從文件中讀取環境變量
基於已有的服務進行擴展(繼承其餘模板的配置)
設置網絡模式
跟主機系統共享進程命名空間
配置dns服務器
添加或放棄容器的Linux能力
配置DNS搜索域
其餘的指令和docker run支持的選項相似
working_dir
entrypoint
user
hostname
domainname
mem_limit
privileged
restart
stdin_open
tty
cpu_shares
等
參考案例
docker-compose.yml模塊
# docker-compose.yml 文件內容 version: '3' services: redis: image: ssh_img_b02:latest container_name: redis_test_001 hostname: redis_test_001 restart: always volumes: - /root/redis/redisWork/:/redisWork ports: - "80:80" - "220:22" - "6379:6379" expose: - "80" - "6379" - "22" #command: '/usr/bin/supervisord' command: '/redisWork/usr/local/bin/redis-server /redisWork/etc/redis/6379.conf ' # 執行命令 # 若是不用-f參數指定文件,默認查找當前目錄的docker-compose.yml文件 # up參數爲建立並啓動容器, -d表示後臺運行, 若是已經存在容器,對比是否更新,若是更新了文件,自動更新文件並重啓容器 # 其餘參數操控官方 docker-compose -f docker-compose.yml up -d