[docker] 四.Docker的三大幫手之一,docker-compose

Docker-compose

dokcer-compose是什麼:

docker-compose 是一個用來把 docker 自動化的東西。
有了 docker-compose 你可以把所有繁複的 docker 操作全都一條命令,自動化的完成。

爲什麼要用 docker-compose,他解決了什麼

用通俗的語言來說,我們平時操作 docker 還是很原始的一系列動作,你手動使用 docker 的動作可以拆分成

找到一個系統鏡像 // docker search
安裝好 vm 或者 virtual box // apt-get install docker
在 vm中安裝鏡像 // docker run -d -it 你的鏡像
略…

這是最小的動作, 如果你要映射硬盤,設置nat網絡或者橋接網絡,等等…你就要做更多的 docker 操作, 這顯然是非常沒有效率的。
但是我們寫在 docker-compose.file 裏面就很好了。 你只需要寫好後 只運行一句
docker-compose up -d
一切都是那麼的簡單
安裝docker-compose

pip install docker-compose

docker-compose 常用命令

Commands:

 build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information
解釋一下

build 構建或重建服務
help 命令幫助
kill 殺掉容器
logs 顯示容器的輸出內容
port 打印綁定的開放端口
ps 顯示容器
pull 拉取服務鏡像
restart 重啓服務
rm 刪除停止的容器
run 運行一個一次性命令
scale 設置服務的容器數目
start 開啓服務
stop 停止服務
up 創建並啓動容器

docker-compose 如何配置

先看看我自己寫的一個 docker-compose.yml

version: '2'
services:
    nginx:
            image: bitnami/nginx:latest
            ports:
                - '80:80'
                - '1443:443'
            volumes:
                - /root/wp_yunlan/nginx/:/bitnami/nginx/
    mariadb:
            image: bitnami/mariadb:latest
            volumes:
                - /root/wp_yunlan/mariadb:/bitnami/mariadb
    wordpress:
            image: bitnami/wordpress:latest
            depends_on:
                - mariadb
                - nginx
            environment:
                - WORDPRESS_USERNAME=neptunemoon    #這個賬戶你是自己設定的
                - WORDPRESS_PASSWORD=123123         #這個密碼是你自己設定的
            ports:
                - '8080:80'
                - '8081:443'
            volumes:
                - /root/wp_yunlan/wordpress:/bitnami/wordpress
                - /root/wp_yunlan/apache:/bitnami/apache
                - /root/wp_yunlan/php:/bitnami/php

nginx 和 mariadb,wordpress 是要啓動的三個服務
順序不是重要的,我們看見wordpress中有個 depends_on: 的屬性
depends_on: 依賴
代表wordpress 依賴於

  • mariadb

  • nginx
    兩個服務, 所以他們兩個會先啓動
    image: 鏡像
    就是你的 docker 鏡像
    我們用
    docker search mariadb
    找到我們需要的鏡像

    root@ubuntu:~/test# docker search mariadb
    NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    mariadb MariaDB is a community-developed fork of M… 1192 [OK]
    paintedfox/mariadb A docker image for running MariaDB 5.5, a … 29 [OK]
    bitnami/mariadb Bitnami MariaDB Docker Image 29 [OK]
    million12/mariadb MariaDB 10 on CentOS-7 with UTF8 defaults 12 [OK]
    toughiq/mariadb-cluster Dockerized Automated MariaDB Galera Cluste… 9 [OK]
    webhippie/mariadb Docker images for mariadb 6 [OK]
    panubo/mariadb-galera MariaDB Galera Cluster 6 [OK]
    kakilangit/mariadb Docker for MariaDB with OQGraph & TokuDB E… 5 [OK]
    maxexcloo/mariadb Service container with MariaDB installed a… 4 [OK]
    tcaxias/mariadb MariaDB containers 1 [OK]
    desertbit/mariadb This is an extended docker image of the of… 1 [OK]
    russmckendrick/mariadb A MariaDB image 1 [OK]
    drupaldocker/mariadb MariaDB for Drupal 1 [OK]
    jpco/mariadb Mariadb, so I can have it on my raspberry 1 [OK]
    clearlinux/mariadb MariaDB Server 1 [OK]
    danielsreichenbach/mariadb Minimal MariaDB container to be used as co… 0 [OK]
    lucidfrontier45/mariadb Mariadb with some customizable properties 0 [OK]
    codete/mariadb MariaDB docker image used at Codete. 0 [OK]
    dogstudio/mariadb MariaDB Container for Dogs 0 [OK]
    babim/mariadb Mariadb Server on Alpine or Debian. Check … 0 [OK]
    objectstyle/mariadb ObjectStyle MariaDB Docker Image 0 [OK]
    oriaks/mariadb MariaDB 0 [OK]
    yannickvh/mariadb Custom build of MariaDB based on the offic… 0 [OK]
    gymnae/mariadb Alpine based simple mariadb 0 [OK]
    nimmis/mariadb MariaDB multiple versions based on nimmis/… 0 [OK]
    root@ubuntu:~/test#

好了,就是bitnami/mariadb了
environment 環境變量

這個是在好理解不過的了。 不過這和我們程序語言設計層面的還是不一樣的,這個是容器層面的環境變量。
如果我們寫程序做一些邏輯判斷的時候,肯定會使用 比如我們判斷現在的編譯器,我們會使用
#if GNUC 或者 #if _MSC_VER 相應的,我們的容器裏面肯定也有這樣的邏輯,我們經常使用環境變量來傳值,或者定義一個行爲。寫過程序的人都懂。

ports 端口映射

映射本機還有鏡像的端口。這個沒有什麼好說的。

volumes 文件映射

有兩種格式,
可以對應 docker 操作中的 -v my/path/:/docker/path
還可以使用單方面的 -v /path
這樣的話 就相當於 一個匿名映射, 其實還是在本機有對應目錄的。
使用docker inspect -f {{.Volumes}} /path 可以看到詳細信息
相對這個瞭解更多的 深入理解Docker Volume

docker-compose 需要注意的
我根據我自己的體驗,給出幾點需要注意的

  1. 不要把 docker 當做數據容器來使用,數據一定要用 volumes 放在容器外面
  2. 不要把 docker-compose 文件暴露給別人, 因爲上面有你的服務器信息
  3. 多用 docker-compose 的命令去操作, 不要用 docker 手動命令&docker-compose 去同時操作
  4. 寫一個腳本類的東西,自動備份docker 映射出來的數據。
  5. 不要把所有服務都放在一個 docker 容器裏面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章