[afterCode] docker 速成班 6: docker-compose

經過docker 的 network咱們能夠將多個 container 有機的組合起來構建出本身須要的服務. 可是這裏有幾個小問題就是node

  1. 不利於分享.
  2. 步驟麻煩.(須要本身建立 network;指定container 使用 network;... )

那如何解決上面的兩個問題呢?nginx

docker-compose.yml

第5節例子中的服務能夠經過建立一個這樣的docker-compose.yml文件來解決.web

version: '3'
services:
  nginx:
    image: nginx
    ports:
      - 8080:8080
    volumes:
      - ./conf.d:/etc/nginx/conf.d
    depends_on:
      - nodeapp
  nodeapp:
    build: './'
    container_name: hello
    environment:
      - NODE_ENV=production

經過下面的命令就能將全部須要的 container 啓動起來.docker

docker-compose up

docker-compose.yml 文件能夠理解爲爲了讓項目工做起來組織 docker container 的 yaml 格式的配置文件. 一個 docker-compose.yml 文件就一個項目. 配置文件裏面能夠定義 services, volumesnetworks 三個主要部分. 我我的的喜愛是直接使用映射的方式來配置 container 的持久化的磁盤空間,因此比較少的用
volumes 部分;而一個 docker-compose.yml 啓動起來以後,docker 會爲這個項目建立一個默認的 networks, 默認狀況下這些容器都是鏈接在這個 network 中. 並且還支持用 container_name 的 dns 解析; 因此最重要的仍是 services 的定義, 而 services 的定義就是根據項目須要列舉的 container 的定義.bash

對於 container 的定義大體有兩類, 直接可使用的 docker hub 上 image 的. 如這個例子中的 nginx 容器;簡單的經過 image 字段就能指定須要的 image; 再經過 ports,volumes, environment 字段來指定 container 的端口映射,磁盤映射和環境變量配置等等. 能經過 docker run 選項作到的事情 docker-compose.yml 中都能作到. 特別提一點的就是在磁盤映射的時候, 宿主機的路徑能夠是用相對與docker-compose.yml的相對路徑. 例子中 nginx 的定義下面的命令行同樣的意義; 其中這個 project_defaultdocker-compose.yml 啓動時建立的默認 network.app

$docker run --network project_default  \
            -v $PWD/conf.d:/etc/nginx/conf.d -p 8080:8080 nginx

第二種定義的方式就基於 Dockerfile. 那容器是如何工做的就徹底有 Dockerfile 來決定了. build字段是用來指定 Dockerfile所在的路徑. 例子中定義的 nodeapp 服務, 仍是用了 environment 來指定程序運行的環境變量;用 container_name 指定了容器的名字, 若是不作指定的話, container 的名字使用 項目名_服務名 的格式來命名. 並且咱們在 nginx 服務反向代理的時候須要用 container 的名字來訪問 node 中的 web 服務, 因此這裏就定義了container 的名字.ui

經過 Dockerfiledocker-compose.yml 就能很是的方便的分享你項目運行和開發環境的配置了.命令行

但願你們喜歡.代理

相關文章
相關標籤/搜索