日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Docker compose 容器编排

發布時間:2023/11/28 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker compose 容器编排 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 概述

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

答案是都可以。

  • 你可以分別放在三個容器中
  • 也可以全部放在一個容器中
  • 還可以 PHP、 Linux 、Nginx共用一個容器,MySQL 單獨一個容器
  • 甚至還可以分別做多個容器,實現更復雜的架構

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

2. 使用步驟

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

  • 工程(project)
  • 服務(service)
  • 容器(contaienr)

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

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

使用 Compose 基本上分為三步:

  1. Dockerfile 定義應用的運行環境(鏡像)
  2. docker-compose.yml 定義組成應用的各服務
  3. 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

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

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

格式

environment:RACK_ENV: developmentSHOW: '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- redisredis:image: redisdb:image: mysql

使用 docker-compose up web 啟動,會先啟動 RedisDB,再啟動 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 應用

  1. 創建一個名為 wordpress 的 project(工程):
[root@daniel ~]### mkdir -p /docker-compose/wordpress
[root@daniel ~]### cd /docker-compose/wordpress
  1. 創建 docker-compose.yml:
[root@daniel wordpress]### vim docker-compose.yml
version: '3'
services:db:image: mysql:5.7volumes:- "./data:/var/lib/mysql"restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: wordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpressexpose:- "3306"wordpress:depends_on:- dbimage: wordpress:latestlinks:- dbports:- "8010:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_PASSWORD: wordpress

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

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

  • MySQL 的數據目錄掛載到當前目錄 ./data,此目錄不存在會自動創建
  • 容器重啟策略為 always
  • 設置了連接 MySQL 的 4 個變量

wordpress 容器通過 wordpress:latest 啟動:

  • 需要 db 容器先啟動再啟動 wordpress 容器
  • wordpress 容器要 link 連接 db 容器
  • wordpress 容器將 80 端口映射到宿主機的 8010 端口
  • 容器重啟策略為 always
  • 設置連接數據庫的變量
  1. 啟動:

對于開發來說,最常使用的 Docker Compose 命令就是 docker-compose updocker-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
  1. 安裝與訪問

在瀏覽器端,訪問容器主機的 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 createdocker-compose startdocker-compose stop 我們可以實現與 docker createdocker startdocker stop 相似的效果,只不過操作的對象由 Docker Engine 中的容器變為了 Docker Compose 中的服務。

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

https://gitbook.cn/books/5fb91715f25ffc2d3e3d2983/index.html

總結

以上是生活随笔為你收集整理的Docker compose 容器编排的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。