以往要在一台電腦上建立更多主機時,我們會用上像是 VMware 這樣的虛擬技術軟體,也就是所謂的「虛擬機」,但在 Docker 出來之後這一切就改變了。
Docker 的用途就像是 VMware,但因為環境並不是「虛擬」出來的⋯⋯等種種原因,令 Docker 啟動一個「系統」的速度不到五秒,比起傳統的虛擬機的三分鐘快上了至少三十五倍左右。

好吧,實際上那並不叫「系統」。在 Docker 中這種東西叫做「容器」,且 Docker 的執行效率就像原生級般地快速,因此可以把 MySQL、PHP、Apache 分開成「三個容器」來執行,如此一來其中一個容器掛掉時,不會影響到其他的服務。
而傳統的虛擬機則會把這三個服務執行在同個「系統」中。Docker 十分地方便且多數人都已用此技術取代傳統虛擬機(當然有時還是會用上虛擬機),更多詳細資訊可至維基百科觀看。
1. 安裝 Docker
在新版的 Ubuntu 16.04 版本中安裝 Docker 已經變得夭壽簡單,透過下列指令就可以安裝 Docker 了。
$ apt install docker.io
這將會在你的電腦上用上至少 120 MB 的空間,應該是沒什麼啦。
檢查 Docker 版本
安裝完之後我們可以輸入 docker version
或是 docker -v
(簡略資訊)檢查已安裝的 Docker 版本。
$ docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Mon, 19 Dec 2016 09:20:48 +1300
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Mon, 19 Dec 2016 09:20:48 +1300
OS/Arch: linux/amd64
通常會用到這個指令通常都是要去 GitHub 那邊回報問題的⋯⋯。
2. 安裝 Docker Compose
一般來說我們可以用 Docker 啟動單個容器。倘若你要啟動「一套服務」例如建立一個部落格需要:PHP、MySQL、Apache,這個時候就至少需要三個容器,一個一個啟動太慢了,所以我們可以把這些東西寫成一個 docker-compose.yml
檔案,然後透過 Docker Compose 協助我們一次啟動三個容器。
首先透過下列指令安裝 Docker Compose。
$ curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
安裝完畢之後我們需要給予 Docker Compose 一定的執行權限。
$ chmod +x /usr/local/bin/docker-compose
接著我們就可以透過 docker-compose --version
檢查剛才安裝的 Docker Compose 版本為何。
$ docker-compose --version
docker-compose version 1.10.0, build 4bd6f1a
接下來我們就能夠開始建立 docker-compose.yml
檔案然後啟動一套服務。
3. 透過 Compose 建立 WordPress
這裡會舉一個官方範例作為參考,這個範例會啟動 MySQL 和 WordPress 兩個容器。在我們開始之前,建議你先建立一個資料夾,然後進入該資料夾再進行下一個步驟。
$ mkdir my_wordpress/
$ cd my_wordpress/
然後就可以繼續啦。
建立 Compose 檔案
現在建立一個 docker-compose.yml
檔案,這包含了兩個容器:MySQL 5.7
和 WordPress
,內容如下。
version: '2'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
注意:在 volumes
的部分建議你閱讀「数据卷 · Docker —— 从入门到实践」文章。
透過 Compose 啟動服務
在同個目錄下透過 docker-compose up -d
就能夠以剛才建立的設定檔啟動那兩個容器。
$ docker-compose up -d
Creating network "my_wordpress_default" with the default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
efd26ecc9548: Pull complete
a3ed95caeb02: Pull complete
...
Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
efd26ecc9548: Already exists
a3ed95caeb02: Pull complete
589a9d9a7c64: Pull complete
...
Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6
Status: Downloaded newer image for wordpress:latest
Creating my_wordpress_db_1
Creating my_wordpress_wordpress_1
如果你是第一次啟動這些容器,你可能還沒有該容器所需的映像檔,此時 Docker 會自動到 DockerHub 獲取,會花上一些時間,未來重複做這些事情時就會自動省略這些過程。
拜訪 WordPress
現在你的 WordPress 已經在 :8000
埠口提供服務了,你能透過瀏覽器前往查看,然後就會看到下面這樣的頁面。
