用(WordPress + MySQL 實戰(zhàn)))
文檔/教程【免費下載鏈接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.項目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps點擊查看免費下載本指南是 90DaysOfDevOps 學(xué)習(xí)路線中容器章節(jié)的核心一課在掌握單個 Docker 容器與 Dockerfile 之后見 第 45 天Docker 鏡像解剖通過 Docker Compose 以一份 YAML 文件同時拉起 WordPress 與 MySQL 兩個相互關(guān)聯(lián)的容器并理解命名卷帶來的數(shù)據(jù)持久化能力。讀完本文你將掌握docker-compose.yml的完整結(jié)構(gòu)與關(guān)鍵參數(shù)、up/down/ps等日常編排命令、數(shù)據(jù)清理與保留的區(qū)別并能在倉庫內(nèi)置的 ELKElasticsearch Logstash Kibana三容器示例上舉一反三。為什么需要 Docker Compose如果一個鏡像已經(jīng)自包含、能滿足單一用例那么運行單個容器就足夠了。但當(dāng)你需要在多個不同的容器鏡像之間構(gòu)建互相協(xié)作的應(yīng)用時事情就變得復(fù)雜起來。例如一個網(wǎng)站前端需要一個后端數(shù)據(jù)庫理論上可以把數(shù)據(jù)庫也塞進(jìn)同一個容器但更合理、更高效的做法是讓數(shù)據(jù)庫擁有自己獨立的容器——各自獨立演進(jìn)、獨立伸縮、獨立備份。Docker Compose 正是為此而生它是一款允許你在多個容器上運行更復(fù)雜應(yīng)用的工具核心價值在于只用一份配置文件加一條命令就能把整個多容器應(yīng)用拉起來。本文的實戰(zhàn)示例來自 Docker 官方的 Quickstart 示例Compose 與 WordPress我們的目標(biāo)是使用 Docker Compose 啟動 WordPress 和一個獨立的 MySQL 實例使用一個名為docker-compose.yml的 YAML 文件描述整個應(yīng)用構(gòu)建項目并驗證容器狀態(tài)通過瀏覽器完成 WordPress 的初始化配置最后執(zhí)行關(guān)閉與清理觀察數(shù)據(jù)是否保留。安裝與驗證 Docker ComposeDocker Compose 本身是一個獨立的工具。如果你使用的是macOS 或 WindowsCompose 已經(jīng)隨Docker Desktop一并安裝無需額外操作而當(dāng)你希望在Windows Server 主機或 Linux 服務(wù)器上運行容器時則需要按照 Docker 官方安裝文檔單獨安裝 Compose 插件。安裝完成后打開終端輸入docker-compose --version或docker compose version取決于版本即可確認(rèn)工具是否就緒認(rèn)識 docker-compose.yml 與 YAML 語言先花一分鐘理解 YAML在深入配置文件之前有必要先聊聊 YAML 本身——你會在 DevOps 的幾乎所有角落遇到它。對 YAML 最經(jīng)典的定義是“YAML 是一種對人類友好的、適用于所有編程語言的數(shù)據(jù)序列化語言。”它通常用于配置文件以及某些需要存儲或傳輸數(shù)據(jù)的應(yīng)用場景。你可能已經(jīng)接觸過承擔(dān)同樣職責(zé)的 XML 文件而 YAML 提供了更精簡的語法卻面向同樣的使用場景。YAML最初是 “Yet Another Markup Language” 的縮寫維護(hù)者后來將其改名為 “YAML Aint Markup Language” 以強調(diào)其數(shù)據(jù)導(dǎo)向特性近年來越來越流行其對象序列化能力使它成為 JSON 的有力替代品——尤其是在人類需要直接閱讀和編寫配置的場合。docker-compose.yml 的完整內(nèi)容與逐行解析docker-compose.yml就是描述“我們想要在多容器場景下做什么”的配置清單。下面這份文件正是倉庫中 WordPress 示例 的實際內(nèi)容與教程原始示例完全一致version: 3.9 services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - 8000:80 restart: always environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}逐段拆解這份配置version: 3.9聲明 Compose 文件格式的版本號決定哪些語法特性可用。services:文件的主體部分定義了應(yīng)用包含的每個容器服務(wù)。本例有兩個服務(wù)db和wordpress。db服務(wù)使用mysql:5.7鏡像并通過restart: always保證容器異常退出后自動重啟。四個環(huán)境變量MYSQL_ROOT_PASSWORD、MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD分別指定了 MySQL 的 root 密碼、要創(chuàng)建的數(shù)據(jù)庫名以及普通用戶賬號密碼MySQL 官方鏡像在首次啟動時會據(jù)此完成初始化。wordpress服務(wù)使用wordpress:latest鏡像depends_on: - db聲明它依賴db服務(wù)先啟動ports: 8000:80把宿主機 8000 端口映射到容器內(nèi) 80 端口WordPress 默認(rèn)監(jiān)聽端口。四個WORDPRESS_*環(huán)境變量告訴 WordPress 如何連接數(shù)據(jù)庫——注意WORDPRESS_DB_HOST填的是服務(wù)名db在 Compose 自動創(chuàng)建的內(nèi)部網(wǎng)絡(luò)中服務(wù)名即主機名可被 DNS 直接解析這也是多容器協(xié)作的關(guān)鍵機制。volumes:頂層聲明db_data和wordpress_data兩個命名卷。與之前教程中“用完即棄”的無狀態(tài)容器不同這里第一次把狀態(tài)引入了配置MySQL 數(shù)據(jù)寫入db_data卷掛載到容器內(nèi)/var/lib/mysqlWordPress 站點文件主題、插件、上傳內(nèi)容寫入wordpress_data卷掛載到容器內(nèi)/var/www/html。這類文件隨著業(yè)務(wù)復(fù)雜會變得非常龐大但 YAML 的縮進(jìn)結(jié)構(gòu)與鍵值語法讓整體面貌保持清晰可讀。構(gòu)建并啟動多容器應(yīng)用回到終端切換到存放docker-compose.yml的目錄執(zhí)行docker-compose up -d該命令會拉取所需的鏡像并啟動整個多容器應(yīng)用。其中-d表示detached 模式后臺運行命令執(zhí)行后終端即可繼續(xù)使用。隨后用docker ps查看運行狀態(tài)可以看到兩個容器同時在運行一個是wordpress另一個是mysql見文首截圖兩容器均基于wordpress:latest與mysql:5.7鏡像且 WordPress 容器的端口映射為0.0.0.0:8000-80/tcp。在瀏覽器中完成 WordPress 初始化打開瀏覽器訪問http://localhost:8000即可看到 WordPress 的安裝頁面按照頁面提示完成 WordPress 的初始化安裝選擇語言、填寫站點信息、創(chuàng)建管理員賬號隨后就能進(jìn)入后臺開始搭建網(wǎng)站。再次訪問http://localhost:8000可以看到使用默認(rèn)主題渲染的站點首頁——教程中站點標(biāo)題為 “90DaysOfDevOps”并包含一篇示例文章。通過 Docker Desktop 觀察卷與更改主題在對站點做任何修改之前打開Docker Desktop 的 Volumes 標(biāo)簽頁可以看到與容器關(guān)聯(lián)的兩個命名卷一個屬于 WordPresswordpress_data一個屬于數(shù)據(jù)庫db_data。這就是數(shù)據(jù)持久化的直接證據(jù)。接下來做兩處典型的站點修改更換主題教程當(dāng)前使用的是 “Twenty Twenty-Two” 主題在后臺將其切換為 “Twenty Twenty”新增文章在后臺發(fā)布一篇新文章。完成后站點即呈現(xiàn)新的主題與最新文章列表。清理保留數(shù)據(jù)還是徹底刪除多容器應(yīng)用的清理與數(shù)據(jù)生命周期管理是本節(jié)的重點幾種命令的行為差異必須分清docker-compose down # 停止并移除容器但保留命名卷數(shù)據(jù)仍在 docker-compose up -d # 重新啟動應(yīng)用數(shù)據(jù)完整保留 docker-compose down --volumes # 停止容器并同時刪除命名卷數(shù)據(jù)徹底清除執(zhí)行docker-compose down后容器被移除但在 Docker Desktop 的 Volumes 標(biāo)簽頁仍能看到兩個命名卷——數(shù)據(jù)安然無恙在相同目錄再次執(zhí)行docker-compose up -d應(yīng)用重新上線回到http://localhost:8000會發(fā)現(xiàn)之前更換的主題和新增的文章全部還在這正是命名卷持久化的價值若想連數(shù)據(jù)一起清除使用docker-compose down --volumes卷會被一并銷毀之后再次docker-compose up -d會得到一個全新的應(yīng)用——不過鏡像仍然緩存在本地系統(tǒng)中無需重新從 DockerHub 拉取。Docker Compose 與 Kubernetes各自的定位初學(xué) Docker Compose 時常會困惑它與 Kubernetes 這類容器編排工具的關(guān)系。本演示的所有操作都聚焦在一臺主機上WordPress 和數(shù)據(jù)庫運行在本地桌面機器的 Docker 環(huán)境中沒有多臺虛擬機或物理機也無法輕松地按需對應(yīng)用進(jìn)行水平伸縮scale up/down。而 Kubernetes 解決的是跨多節(jié)點的編排、調(diào)度、伸縮、自愈等問題——這是 90DaysOfDevOps 后續(xù)章節(jié)的內(nèi)容在進(jìn)入 Kubernetes 之前容器基礎(chǔ)還有幾天要夯實。進(jìn)階示例ELK 單節(jié)點三容器編排倉庫的 Containers 目錄 下內(nèi)置了一個來自官方示例庫、更具代表性的多容器應(yīng)用Elasticsearch Logstash KibanaELK單節(jié)點部署位于 elasticsearch-logstash-kibana 目錄。其 docker-compose.yml 展示了比 WordPress 示例更豐富的 Compose 特性services: elasticsearch: image: elasticsearch:7.16.1 container_name: es environment: discovery.type: single-node ES_JAVA_OPTS: -Xms512m -Xmx512m ports: - 9200:9200 - 9300:9300 healthcheck: test: [CMD-SHELL, curl --silent --fail localhost:9200/_cluster/health || exit 1] interval: 10s timeout: 10s retries: 3 networks: - elastic logstash: image: logstash:7.16.1 container_name: log environment: discovery.seed_hosts: logstash LS_JAVA_OPTS: -Xms512m -Xmx512m volumes: - ./logstash/pipeline/logstash-nginx.config:/usr/share/logstash/pipeline/logstash-nginx.config - ./logstash/nginx.log:/home/nginx.log ports: - 5000:5000/tcp - 5000:5000/udp - 5044:5044 - 9600:9600 depends_on: - elasticsearch networks: - elastic command: logstash -f /usr/share/logstash/pipeline/logstash-nginx.config kibana: image: kibana:7.16.1 container_name: kib ports: - 5601:5601 depends_on: - elasticsearch networks: - elastic networks: elastic: driver: bridge這份配置新增了幾個值得學(xué)習(xí)的要點自定義網(wǎng)絡(luò)頂層networks.elastic使用driver: bridge創(chuàng)建專用網(wǎng)絡(luò)三個服務(wù)通過networks: - elastic加入同一網(wǎng)絡(luò)服務(wù)間以容器名es、log、kib互相訪問——例如 Logstash 管道配置中就用http://es:9200作為 Elasticsearch 地址健康檢查Elasticsearch 通過healthcheck定期探測localhost:9200/_cluster/healthdocker ps中會顯示(healthy)狀態(tài)這是編排中保證依賴就緒的常用手段JVM 內(nèi)存約束ES_JAVA_OPTS與LS_JAVA_OPTS分別把 Elasticsearch 和 Logstash 的堆內(nèi)存限制在 512MB避免本地開發(fā)時資源耗盡端口矩陣Elasticsearch 暴露9200/9300Logstash 暴露5000TCP/UDP、5044Beats 輸入、9600HTTP APIKibana 暴露5601配置掛載與啟動命令Logstash 的管道配置通過 bind mount 掛載進(jìn)容器并用command顯式指定logstash -f啟動參數(shù)。Logstash 的管道定義見 logstash-nginx.config其處理鏈為input從/home/nginx.log讀取 Nginx 訪問日志JSON 格式start_position beginning從文件頭開始讀取filter依次對消息做json解析、geoip地理信息增強和useragent瀏覽器解析最后output寫入 Elasticsearch 的nginx索引并同時在stdout以rubydebug格式輸出。該目錄下的 README.md 還給出了完整的部署預(yù)期docker-compose up -d會創(chuàng)建elasticsearch-logstash-kibana_elastic網(wǎng)絡(luò)并依次啟動es、log、kib三個容器。進(jìn)入該目錄執(zhí)行同樣的docker-compose up -d隨后用docker ps確認(rèn)三個容器都在運行然后即可在瀏覽器中分別訪問Elasticsearchhttp://localhost:9200Logstashhttp://localhost:9600Kibanahttp://localhost:5601/api/status結(jié)束實驗后同樣用docker-compose down一鍵移除全部容器。小結(jié)Docker Compose 把“多容器應(yīng)用的描述、啟動、停止、清理”壓縮為一份docker-compose.yml加幾條命令是本地開發(fā)、CI 驗證和單機部署的利器。本文從 WordPress MySQL 的官方示例出發(fā)覆蓋了 Compose 安裝驗證、YAML 配置結(jié)構(gòu)、命名卷持久化、數(shù)據(jù)保留/刪除差異再到 ELK 三容器示例中的網(wǎng)絡(luò)、健康檢查與管道配置為你后續(xù)學(xué)習(xí) Kubernetes 集群編排打下了扎實的容器基礎(chǔ)。下一講將進(jìn)入 第 47 天繼續(xù)容器章節(jié)的深入內(nèi)容。贊分享文檔/教程【免費下載鏈接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.項目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps點擊查看免費下載相關(guān)推薦90DaysOfDevOps 第 46 天用 Docker Compose 一鍵編排 WordPress MySQL 多容器應(yīng)用90DaysOfDevOps 第 46 天用 Docker Compose 一鍵編排 WordPress MySQL 多容器應(yīng)用 在 90 天 DevOp文檔/教程90DaysOfDevOps 第 46 天用 Docker Compose 編排多容器應(yīng)用WordPress MySQL 實戰(zhàn)90DaysOfDevOps 第 46 天用 Docker Compose 編排多容器應(yīng)用WordPress MySQL 實戰(zhàn) 本文是 90DaysO文檔/教程SiamMask性能優(yōu)化秘籍如何實現(xiàn)77FPS的實時目標(biāo)跟蹤SiamMask性能優(yōu)化秘籍如何實現(xiàn)77FPS的實時目標(biāo)跟蹤 SiamMask作為CVPR2019的明星項目以其Fast Online Object Tr創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考