docker-compose 快速啟動 wordpress 搭建博客

2021-12-25 青年夏日

很多時候我想用一個工具只是做一個嘗試,於是希望它可以:

可快速啟動,不要安裝一堆系統級依賴

可快速清除,不留痕跡

docker 就完美符合這些要求,而且操作方便。再配合docker-compose,幾乎一鍵完成了。

下面我們來快速啟動一個 wordpress 和它配套的 mysql 

步驟

創建docker-compose.yml:

version: '2.1'

services:
wordpress:
depends_on:
- db
image: wordpress
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: admin
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
ports:
- "3306:3306"

volumes:
db_data:

註:由於電腦限制,我只能使用 docker toolbox ,支持的 docker-compose.yml 最高版本只能到 2.1 。

接下來一鍵啟動:

$ docker-compose up

如果遇到 mysql 死活連不上的情況(Access denied for user),那很有可能是因為提供的密碼不對。上面設置的環境變量只在第一次啟動容器時有效,後面啟動時,如果容器已經存在了,docker 會嘗試保留上一次的數據,造成的結果就是,新設置的密碼沒有生效。這時,我們需要先刪除已有容器:

$ docker-compose rm -v

1. 概述

問題:如果要使用 Docker 運行 LNMP 架構,那麼 Nginx、MySQL、PHP、 Linux三個服務運行在一個容器裡,還是運行在多個容器裡呢?

答案是都可以。

如果實現一個容器架構(微服務架構),一個個的 docker run 啟動很麻煩,更麻煩的是容器之間的連接與交互。所以我們需要用到容器編排。

2. 使用步驟

Docker Compose 將所管理的容器分為三層:

工程(project)

服務(service)

容器(contaienr)

Docker Compose 運行的目錄下的所有文件(docker-compose.yml、extends 文件或環境變量文件等)組成一個工程,若無特殊指定工程名即為當前目錄名。

一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像、參數、關係,一個服務當中可包括多個容器實例。

使用 Compose 基本上分為三步:

Dockerfile 定義應用的運行環境(鏡像)

docker-compose.yml 定義組成應用的各服務

docker-compose up -d 構建並啟動整個應用

Docker Compose 是一個由 Python 編寫的軟體,在擁有 Python 運行環境的機器上,我們可以直接運行它,不需要其它的操作。

3. 安裝

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$
$ sudo docker-compose version
docker-compose version 1.21.2, build a133471
docker-py version: 3.3.0
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.1t 3 May 2016

我們也能夠通過 Python 的包管理工具 pip 來安裝 Docker Compose。

$ sudo pip install docker-compose

4. 常見語法

Docker Compose 使用 Yaml 格式文件來編排。

參考:https://docs.docker.com/compose/compose-file/

與 Dockerfile 採用 Dockerfile 這個名字作為鏡像構建定義的默認文件名一樣,Docker Compose 的配置文件也有一個預設的文件名,也就是 docker-compose.yml,如非必要,我建議大家直接使用這個文件名來做 Docker Compose 項目的定義。

4.1 build

指定鏡像構建時的 dockerfile 目錄,格式一般為絕對路徑目錄或相對路徑目錄(dockerfile需要命名為 Dockerfile):

build: /path/to/build/dir
或者
build: ./dir

4.2 image

指定要啟動容器的鏡像:

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

如果鏡像不存在,Compose 嘗試拉它。

如果指定了構建,可以使用指定的選項構建它,並使用指定的 tag 進行標記。

4.3 environment

設置鏡像變量,它可以保存變量到鏡像裡面,也就是說啟動的容器也會包含這些變量設置。

environment 和 Dockerfile 中的 ENV 指令一樣,會把變量一直保存在鏡像、容器中。

格式

environment:
RACK_ENV: development
SHOW: 'true'

environment:
- RACK_ENV=development
- SHOW=true

4.4 expose:

這個標籤與 Dockerfile 中的 EXPOSE 指令一樣,用於指定暴露的埠,但只將埠暴露給連接的服務,而不暴露給主機。

expose:
- "3000"
- "8000"

4.5 ports

映射埠,可以使用 HOST:CONTAINER 的方式指定埠,也可以指定容器埠(選擇臨時主機埠),宿主機會隨機映射埠。

ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"

4.6 restart

指定 Docker 容器的重啟策略。

默認值為 no,即在任何情況下都不會重新啟動容器

當值為 always 時,容器退出時總是重新啟動(會隨著 Docker 服務啟動而啟動容器)

當值為 on-failure 時,當出現 on-failure 報錯(非正常退出,退出狀態非 0),才會重啟容器

當值為 unless-stopped 時,在容器退出時總是重啟容器,但是不考慮在 Docker 守護進程啟動時就已經停止了的容器

restart: "no"
restart: always
restart: on-failure
restart: on-failure:3
restart: unless-stopped

4.7 volume

數據卷掛載,可以直接使用 HOST:CONTAINER 這樣的格式,或者使用 HOST:CONTAINER:ro 這樣的格式,ro 代表數據卷是只讀的。

volumes:
### 只是指定一個路徑,Docker 會自動在創建一個數據卷(這個路徑是容器內部的)。
- /var/lib/mysql

### 使用絕對路徑掛載數據卷
- /opt/data:/var/lib/mysql

### 以 Compose 配置文件為中心的相對路徑作為數據卷掛載到容器。
- ./cache:/tmp/cache

### 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro

### 已經存在的命名的數據卷。
- datavolume:/var/lib/mysqlvolumes:
### 只是指定一個路徑,Docker 會自動在創建一個數據卷(這個路徑是容器內部的)。
- /var/lib/mysql

### 使用絕對路徑掛載數據卷
- /opt/data:/var/lib/mysql

### 以 Compose 配置文件為中心的相對路徑作為數據卷掛載到容器。
- ./cache:/tmp/cache

### 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro

### 已經存在的命名的數據卷。
- datavolume:/var/lib/mysql

4.8 depends_on

此標籤解決了容器的依賴、啟動先後的問題。

version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: mysql

使用 docker-compose up web 啟動,會先啟動 Redis 和 DB,再啟動 Web。

4.9 links

連結到其它服務的中的容器,與 link 連接一樣效果,會連接到其它服務中的容器。

web:
links:
- db
- db:database
- redis

5. 綜合案例:容器化應用部署實踐5.1 環境配置

在宿主機上打開 ip_forward,為我們下面要映射容器的埠到宿主機,只有打開 ip_forward 才能映射成功。

### vim /etc/sysctl.conf
net.ipv4.ip_forward=1
### sysctl -p

5.2 部署 WordPress 應用

創建一個名為 wordpress 的 project(工程):

[root@daniel ~]### mkdir -p /docker-compose/wordpress
[root@daniel ~]### cd /docker-compose/wordpress

創建 docker-compose.yml:

[root@daniel wordpress]### vim docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- "./data:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
expose:
- "3306"

wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8010:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress

說明:這個應用定義了兩個容器服務:db、wordpress。

db 容器通 mysql:5.7 鏡像啟動:

wordpress 容器通過 wordpress:latest 啟動:

需要 db 容器先啟動再啟動 wordpress 容器

wordpress 容器要 link 連接 db 容器

wordpress 容器將 80 埠映射到宿主機的 8010 埠

容器重啟策略為 always

設置連接資料庫的變量

啟動:

對於開發來說,最常使用的 Docker Compose 命令就是 docker-compose up 和 docker-compose down 了。

docker-compose up 命令類似於 Docker Engine 中的 docker run,它會根據 docker-compose.yml 中配置的內容,創建所有的容器、網絡、數據卷等等內容,並將它們啟動。與 docker run 一樣,默認情況下 docker-compose up 會在「前臺」運行,我們可以用 -d 選項使其「後臺」運行。事實上,我們大多數情況都會加上 -d 選項。

[root@daniel wordpress]### docker-compose up -d

如果本地沒有鏡像,下載的兩個鏡像比較大。

[root@daniel wordpress]### docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 e9c354083de7 3 days ago 373MB
wordpress latest 4ba1e63bd20c 8 days ago 501MB

需要注意的是,docker-compose 命令默認會識別當前控制臺所在目錄內的 docker-compose.yml 文件,而會以這個目錄的名字作為組裝的應用項目的名稱。如果我們需要改變它們,可以通過選項 -f 來修改識別的 Docker Compose 配置文件,通過 -p 選項來定義項目名。

docker-compose -f ./compose/docker-compose.yml -p myapp up -d

與 docker-compose up 相反,docker-compose down 命令用於停止所有的容器,並將它們刪除,同時消除網絡等配置內容,也就是幾乎將這個 Docker Compose 項目的所有影響從 Docker 中清除。

docker-compose down

安裝與訪問

在瀏覽器端,訪問容器主機的 8010 埠,安裝訪問,最終效果如下:

6. 容器命令

在 Docker Engine 中,如果我們想要查看容器中主進程的輸出內容,可以使用 docker logs 命令。而由於在 Docker Compose 下運行的服務,其命名都是由 Docker Compose 自動完成的,如果我們直接使用 docker logs 就需要先找到容器的名字,這顯然有些麻煩了。我們可以直接使用 docker-compose logs 命令來完成這項工作。

$ sudo docker-compose logs nginx

在 docker-compose logs 銜接的是 Docker Compose 中所定義的服務的名稱。

同理,在 Docker Compose 還有幾個類似的命令可以單獨控制某個或某些服務。

通過 docker-compose create,docker-compose start 和 docker-compose stop 我們可以實現與 docker create,docker start 和 docker stop 相似的效果,只不過操作的對象由 Docker Engine 中的容器變為了 Docker Compose 中的服務。

$ sudo docker-compose create webapp
$ sudo docker-compose start webapp
$ sudo docker-compose stop webapp

相關焦點

  • 用Docker-Compose一分鐘搭建Wordpress博客系統
    : 4.1.0CPython version: 3.7.5OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019參考: Docker-Compose官方搭建Wordpress教程:https://docs.docker.com/compose/wordpress/
  • 教你三分鐘用docker compose搭建一個自己的個人博客網站
    /docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version測試一下,安裝成功了
  • 利用docker-compose腳本2分鐘搭建一個屬於自己博客的系統
    的環境,使用以下命令來安裝docker-compose。# 下載最新的docker-compose工具,如果有版本更新,可替換其中的版本號sudo curl -L https://github.com/docker/compose/releases/download/2.2.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin
  • 來,用docker搭建一個個人博客網站(WordPress)玩玩
    從3.0開始,WordPress已經內置多用戶博客的功能,可以通過簡單的設置就開設一個支持多域名的博客平臺。WordPress是世界上使用最廣泛的博客系統之一,是一款開源的PHP軟體。因為使用者眾多,所以WordPress社區非常活躍,有豐富的插件模板資源。使用WordPress可以快速搭建獨立的博客網站。
  • Docker高級篇之DockerCompose-雲原生核心
    一鍵啟動所有的服務DockerCompose的使用步驟2 Compose安裝  官網地址:https://docs.docker.com/composesudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname
  • 如何用Docker+WordPress搭建你的博客
    首先你得知道什麼叫做WordPress, 它是一個基於PHP和MySQL的開源的博客管理工具,用於管理你的寫作內容。由於它十分容易部署,而且有很多好看的主題可以供你選擇,因此被許多人使用。一般的安裝方法是,你得有一個伺服器,然後在伺服器上按照PHP,MySQL, Apache/NGINX, 之後下載WordPress的安裝包,進行編譯安裝。
  • 使用Docker-Compose編排容器
    常用選項-f, --file FILE           指定啟動模版文件(一個非docker-compose.yml命名的yaml文件,默認為docker-compose.yml)-p, --project-name NAME   指定一個替代項目名稱 (默認是directory名)-d 以daemon的方式啟動容器--x-networking
  • Windows+VMware快速搭建蘑菇博客本地開發環境
    前言大家好,我是陌溪這陣子很多新手小夥伴打算入坑蘑菇博客的開發,但是被博客所依賴的軟體的安裝和配置所勸退,導致最終無法順利的完成蘑菇博客本地環境的搭建。鑑於此,我寫了一篇使用 VMware 快速搭建蘑菇博客所依賴的中間件的文章,幫助小夥伴能夠更快上手博客的開發。小夥伴坐穩扶好,陌溪帶你上車。
  • Docker Compose 1.18.0 之服務編排詳解
    使用Docker Compose,不再需要使用shell腳本來啟動容器。在配置文件中,所有的容器通過services來定義,然後使用docker-compose腳本來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器 Compose 通過一個配置文件來管理多個Docker容器,非常適合組合使用多個容器進行開發的場景。服務編排工具使得Docker應用管理更為方便快捷。
  • 使用Docker Compose構建一鍵啟動的運行環境
    終於拆出了幾個服務,但又犯難了:以前單體程序,搭建一個運行環境十分easy,程序往一個主機上一扔,配置配置,啟動就ok了;但自從拆成服務後,開發人員的調試環境、集成環境、測試環境等搭建就變得異常困難。有人會說,現在都雲原生了?你不知道雲原生作業系統k8s[1]的存在麼?
  • 我選擇Docker Compose梭哈
    那運維人員每次都需要單獨啟動這三個容器來支撐我們的web應用嗎?有點複雜了。docker-compose就是為了簡化這個過程的,相當於是個腳本,把這三個容器用腳本統一來管理和啟動。節省運維時間和避免出錯率。也就是說多應用互相協同才能完成一件事的時候,是很好用的,否則直接Dockerfile就完了。2、安裝DockerCompose基於Linux的安裝。
  • 使用docker-compose搭建zookeeper集群
    # 技術docker: https://www.docker.comdocker-compose: https://docs.docker.com/compose
  • Docker從入門到放棄
    目錄0x00 用docker進行漏洞測試0x01 docker運行busybox0x02 Docker 搭建運行apache-php環境0x03 用Dockerfile自動化構建可ssh登陸的鏡像0x04 Docker搭建一個wordpress博客0x05 Docker
  • Docker應用之一鍵化安裝Wordpress(無需代碼基礎)
    安裝好Docker之後,我們便可以通過docker-compose快速安裝Wordpress。docker-compose是一個自動化工具,通過用戶配置的docker-compose.yml,一條命令就可以管理一組相關聯的docker容器。
  • Docker Stack使用及compose file配置
    docker stack deploy -c docker-compose.yml nginxCompose fileDocker Stack的使用與Docker Compose的使用類似,都需要一個compose文件,compose file version 3中增加了deploy的命令集,所以在
  • 使用Docker部署SpringBoot+Vue博客系統
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新 yum 緩存sudo yum makecache fast# 安裝 Docker-cesudo yum -y install docker-ce# 啟動docker並設置為開機啟動(centos7)systemctl
  • 一次有趣的 Kubernetes 面試:如何在一小時內完成 WordPress 部署!
    而 docker-compose 以簡單粗暴的方式屏蔽了這些細節,會讓我們放棄思考這些底層細節,對於學習這門技術棧來講,還是弊大於利。不過今天為了快速部署,本文還是選用 docker-compose 吧 !😂Get WordPress Use the software that powers over 35% of the web.
  • Fastapi框架-(16)docker-compose容器編排一鍵搭建和啟動本地環境
    也就我們的docker搭建的本地的環境):```#!文檔快速編排、部署應用服務。通常默認的情況networks啟動的作用的就是默認的進行把兩個處於同一個docker-compose.yml相關的容器進行串聯起來,把所有的容器都添加同一個自定義的網橋網絡中(個人理解)。當然如果在docker-compose.yml中如果沒有指定的networdks的話,則默認通過:docker-compose up啟動的關聯的容器都會默認被加入項目名_default網絡中。
  • 快速掌握docker-compose容器管理快速上手
    :(官方地址:https://docs.docker.com/compose/install/)1.直接執行這行命令下載當前最新穩定版本的docker compose :sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose
  • Docker(四):Docker 三劍客之 Docker Compose
    快速上手沒有什麼比來一個小例子練練手更好的學習方法了,我們以官網上的簡單示例來看看 docker compose 的使用方法。第四步,使用 Compose 編譯啟動應用使用命令 docker-compose up啟動version: '2'services: web: build: .