docker-compose hello word

  Compose 是 Docker 容器進行編排的工具, 是一個整合發佈docker應用的利器,可定義和運行多容器的應用,在 Compose 中你可使用 YAML 文件來配置你的應用服務。而後,只須要一個簡單的命令,就能夠建立並啓動你配置的全部服務。java

使用 Compose 基本會有以下三步流程:git

  • 在 Dockfile 中定義你的應用環境,能夠是多個docker應用。
  • 在 docker-compose.yml 中定義組成應用程序的服務。
  • 使用dcoker-compose up命令 運行整個應用程序解決方案。

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
  • context 選項能夠是 Dockerfile 的文件路徑,也能夠是到連接到 git 倉庫的 url
  • 使用此 dockerfile 文件來構建,必須指定構建路徑context 
  • args 指定構建參數的值。首先要在 Dockerfile 中指定參數名,而後再使用該選項指定參數值

例子:

文件結構以下:

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. 其餘

docker-compose.yml 配置文件編寫詳解

Docker Compose 配置文件詳解

docker-compose使用指南

docker-compose教程(安裝,使用, 快速入門)

r-compose 文件配置選項

相關文章
相關標籤/搜索