經過docker 的 network咱們能夠將多個 container 有機的組合起來構建出本身須要的服務. 可是這裏有幾個小問題就是node
那如何解決上面的兩個問題呢?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
, volumes
和 networks
三個主要部分. 我我的的喜愛是直接使用映射的方式來配置 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_default
是 docker-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
經過 Dockerfile
和 docker-compose.yml
就能很是的方便的分享你項目運行和開發環境的配置了.命令行
但願你們喜歡.代理