Compose 是 Docker 容器進行編排的工具, 是一個整合發佈docker應用的利器,可定義和運行多容器的應用,在 Compose 中你可使用 YAML 文件來配置你的應用服務。而後,只須要一個簡單的命令,就能夠建立並啓動你配置的全部服務。java
使用 Compose 基本會有以下三步流程:git
1,docker-compose 安裝:github
docker-compose 在GitHub發佈,能夠在這裏獲取到最新版本:https://github.com/docker/compose/releases web
根據官方安裝方法,執行下面命令安裝redis
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
設置目錄權限spring
sudo chmod +x /usr/local/bin/docker-compose
測試安裝docker
docker-compose --version
#或
docker-compose -v
2,在你的服務器上獲取你的docker images服務器
略網絡
3,編排 docker-compose.yml app
Docker Compose 將所管理的容器分爲三層,分別是工程(project)、服務(service)、容器(container)
Docker Compose project 文件的默認路徑是 ./docker-compose.yml,一個工程包含多個服務,每一個服務中定義了容器運行的鏡像、參數、依賴,一個服務可包括多個容器實例
version: '2' # 表示該 Docker-Compose 文件使用的是 Version 2 file services: # 要啓動的 docker 服務列表 demo-docker: # 第一個服務(注意格式:相對上一行兩個空格) image: "ejiyuan/demo-docker:latest" # 鏡像名稱 (注意格式:image相對上一行,空兩格 ,: 後空一格,如下類推) ports: - "9000:8080" # 啓動端口(注意格式:「-」前面兩個空格,後面一個空格) volumes: #掛載一個路徑 - .:/code redis: # 第二個服務 image: "redis:alpine"
PS:Compose目前爲止有三個版本分別爲Version 1,Version 2,Version 3,Compose區分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1沒有聲明版本默認是"version 1"。Version 1未來會被棄用。
4,在 Compose 中構建並運行你的應用:
在 docker-compose.yml 所在路徑下執行該命令 Compose 就會自動構建鏡像並使用鏡像啓動容器
docker-compose up
docker-compose -f -p up -d // 後臺啓動並運行容器
參數:
Options: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name)
默認若是沒有指定具體的compose配置文件,那麼就docker-compose.yml,而且若是不指定項目名稱,默認就是文件夾的name
結果以下:
5,查看
docker-compose images #查看鏡像
docker-compose ps #查看進程
查看docker運行狀態
兩個都啓動了
6,config 顯示 docker-compose.yml配置
docker-compose [-f] config [--services]
結果以下:
7,down:中止並刪除容器、網絡、鏡像、數據卷
docker-compose down
結果以下:
Options: --rmi type Remove images. Type must be one of: 'all': Remove all images used by any service. 'local': Remove only images that don't have a custom tag set by the `image` field. -v, --volumes Remove named volumes declared in the `volumes` section of the Compose file and anonymous volumes attached to containers. --remove-orphans Remove containers for services not defined in the Compose file
8,build
服務除了能夠基於指定的鏡像,還能夠基於一份 Dockerfile,在使用 up 啓動之時執行構建任務,這個構建標籤就是 build,它能夠指定 Dockerfile 所在文件夾的路徑。Compose 將會利用它自動構建這個鏡像,而後使用這個鏡像啓動服務容器
設定上下文根目錄,而後以該目錄爲準指定 Dockerfile
build: context: ../ dockerfile: path/of/Dockerfile
args:
user:zhangsan
例子:
文件結構以下:
Dockerfile文件
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD demo-docker-0.0.1-SNAPSHOT.war app.war RUN sh -c 'touch /app.war' RUN echo "Asia/Shanghai" > /etc/timezone ARG active #佔位符,等待從compose 中帶入 ENV JAVA_OPTS="" ENV spring.profiles.active=${active} ENTRYPOINT ["java","-jar","/app.war"]
docker-compose.yml文件配置
version: '2' services: db: #對應 docker run --name my_postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 -e PGDATA=/data/ -e POSTGRES_USER=admin -e POSTGRES_DB=my_db postgres restart: always image: postgres ports: - "5432:5432" environment: POSTGRES_PASSWORD: 123456 PGDATA: /data/ POSTGRES_USER: admin POSTGRES_DB: my_db web: build: context: . args: active: prod #將值帶入到Dockerfile文件中 ports: - "8080:8081" links: - db
執行
docker-compose up -d
結果以下:
9,volumes 掛在數據卷
指定服務要使用的卷。若是僅針對某一服務,能夠只指定卷主機路徑。但若要多個服務使用,應該使用在頂層範圍下的 volumes 選項中指定的卷名。
docker-compose.yml文件配置
version: '3' services: db: restart: always image: postgres ports: - "5432:5432" environment: POSTGRES_PASSWORD: 123456 PGDATA: /data/ POSTGRES_USER: admin POSTGRES_DB: my_db volumes: - ./code:/data # 將宿主的當前目錄(docker-compose.yml所在目錄)映射到docker容器中的/data 目錄 web: build: context: . args: active: prod #將值帶入到Dockerfile文件中 ports: - "8080:8081" volumes: - data_volume:/tmp
links: - db volumes: data_volume: #設置一個可用做共享的券,很遺憾 沒法掛載到本地指定目錄
執行
docker-compose up -d
查看本地code目錄並登錄到 docker 容器中對比文件
內容是一致的
修改 「./code:/data」 爲 「data_volume:/data」 ,docker-compose up 啓動
搜索定義的卷名稱
docker volume ls | grep data_volume
查看卷詳細信息
docker volume inspect docker_data_volume
cd /var/lib/docker/volumes/docker_data_volume/_data
登錄到兩個 容器終端分別查看 /data與/tmp 內容是一致的
10,networks 加入指定網絡
docker-compose.yml文件配置
version: '3' services: db: restart: always image: postgres ports: - "5432:5432" environment: POSTGRES_PASSWORD: 123456 PGDATA: /data/ POSTGRES_USER: admin POSTGRES_DB: my_db networks: - new_net_1 web: build: context: . args: active: prod #將值帶入到Dockerfile文件中 ports: - "8080:8081" networks: - new_net_1 links: - db networks: new_net_1:
啓動
docker-compose up -d
查看網絡
docker network ls
查看網絡詳情
兩個服務都加入到定義的新網絡中了
11. 其餘