欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker-compose詳解和LNMP搭建全過程

 更新時間:2024年11月06日 11:28:57   作者:Xnah_  
Docker-Compose是Docker的一個官方開源項目,用于快速編排Docker容器集群,它允許用戶在YAML文件中定義多個服務,每個服務可以包含一個或多個容器,這些容器可以通過Dockerfile構(gòu)建或直接運行現(xiàn)有鏡像,Docker-Compose支持多種配置選項

一、Docker-compose簡介

1.前言

我們知道使用一個Dockerfile模板文件可以定義一個單獨的應用容器,如果需要定義多個容器就需要服務編排。服務編排有很多種技術(shù)方案,如Docker 官方產(chǎn)品Docker Compose。

Dockerfile可以讓用戶管理一個單獨的應用容器;而Compose則允許用戶在一個模板(YAML格式)中定義一組相關(guān)聯(lián)的應用容器(被稱為一個project,即項目),例如一個Web服務容器再加上后端的數(shù)據(jù)庫服務容器等。

2.概述

  • Docker-Compose項目是Docker官方的開源項目,負責實現(xiàn)對Docker容器集群的快速編排。
  • Docker-Compose將所管理的容器分為三層,分別是工程(project),服務(service) 以及容器(container)。
  • Docker-Compose運行目錄下的所有文件(docker-compose.yml,extends文件或環(huán)境變量文件等)組成一個工程,若無特殊指定工程名即為當前目錄名。

一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像、參數(shù)、依賴。

一個服務當中可包括多個容器實例,Docker-Compose并沒有解決負載均衡的問題,因此需要借助其它工具實現(xiàn)服務 發(fā)現(xiàn)及負載均衡,比如Consul。

  • project:代表多個service組成的項目,默認是用工作目錄的名稱作為project的工程名稱。
  • service:一個 service 可以包含一個或多個容器,在里面可以定義網(wǎng)絡模式端口鏡像數(shù)據(jù)卷等參數(shù)。
  • container:可以直接由一個已存在的鏡像運行實現(xiàn),也可以通過dockerfile構(gòu)建鏡像實現(xiàn)。

Docker-Compose的工程配置文件默認為docker-compose. yml,可通過環(huán)境變量COMPOSE_FILE 或 -f 參數(shù)自定義配置文件,其定義了多個有依賴關(guān)系的服務及每個服務運行的容器。

使用一個Dockerfile模板文件,可以讓用戶很方便的定義一個單獨的應用容器。在工作中,經(jīng)常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現(xiàn)一個Web項目,除了Web服務容器本身,往往還需要再加上后端的數(shù)據(jù)庫服務容器,甚至還包括負載均衡容器等。

Compose允許用戶通過一個單獨的docker-compose. yml模板文件(YAML格式)來定義一組相關(guān)聯(lián)的應用容器為一個項目 (project) 。

Docker-Compose項目由Python編寫,調(diào)用Docker服 務提供的API來對容器進行管理。因此,只要所操作的平臺支持Docker API,就可以在其上利用Compose來進行編排管理。

二、Docker-compose安裝

注意:Docker Compose是 Docker 的獨立產(chǎn)品,因此需要安裝 Docker 之后再單獨安裝Docker Compose。

安裝源獲取

#獲取在線源
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安裝,給予執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version

安裝包下載

#下載好安裝包,直接上傳到系統(tǒng),給執(zhí)行權(quán)限,放在指定目錄
chmod +x docker-compose
mv docker-compose /usr/local/bin/

三、YAML文件格式及編寫注意事項

1.簡介

YAML 是一種標記語言,它可以很直觀的展示數(shù)據(jù)序列化格式,可讀性高。類似于 json 數(shù)據(jù)描述語言,語法比 json 簡單的很多。

YAML 數(shù)據(jù)結(jié)構(gòu)通過縮進來表示,連續(xù)的項目通過減號來表示,鍵值對用冒號分隔,數(shù)組用中括號 [ ] 括起來, hash用花括號 { } 括起來。

使用 YAML 時需要注意下面事項

  • 大小寫敏感;
  • 通過縮進表示層級關(guān)系,不支持制表符 tab 鍵縮進,只能使用空格縮進;
  • 縮進的空格數(shù)目不重要,只要相同層級左對齊,通常開頭縮進2個空格;
  • 用 # 號注釋;
  • 符號字符后縮進1個空格,如冒號":" 、逗號 "," 、橫杠"-";
  • 如果包含特殊字符用單引號' '引起來,會作為普通字符串處理;雙引號" "引用起來,特殊字符作為本身想表示的意思。

2.使用方法

(1)數(shù)據(jù)結(jié)構(gòu)

animals: pets #對象映射: 鍵值對的字典

(2)序列數(shù)組

pets: #對象映射:

- cat - 序列值

- dog

- pig



pets: ["cat", "dog", "pig"] #另一種表達格式

示例

#序列的映射,是指針對一個對象,序列中的值都屬于該對象,如蔬菜包含包菜、胡蘿卜、土豆等。
vegetables:
- potato
- carrot
- cabbage
#映射的映射,是指針對一個對象有多個子對象,分別有他們的值,如系統(tǒng)狀態(tài)包含cpu、內(nèi)存、網(wǎng)絡、磁盤等。
vmstat:
cpu: 2
memory: 4G
disk: 100G
network:
ipv4: 192.168.1.1
netmask: 255.255.255.0
gateway: 192.168.1.254
dns: 8.8.8.8

都是通過左對齊的層級關(guān)系來表示的

(3)布爾值

debug: true #真true,假false,不能用引號引用
debug: false

(4)文本塊

value: | # | 代表保留輸出文本的換行和回車符,不加的話即使文本換行也會在同一行顯示
hello #這種情況就是輸出 hello ,不加 | 就是 helloworld!
world! world!

| - #不保留文本塊末尾的換行 | + #會保留文本塊末尾的換行
value: > hello #將 > 后的字符串和之后的字符串用空格分開,即 hello world!
world!

(5)打錨點和引用

type: &a string #&是打錨點,后面跟的是錨點名稱,&a 代表的就是 string
type: *a #*a 代表引用錨點,此處輸出結(jié)果就是 type: string
types: #此處就是輸出 types:
- int - int
- *a - string
- double - double

(6)組合yaml文件

pets:
- cat
- dog
- pig

--- #可以將多個yml文件寫入一個yml文件中,使用 --- 作為分隔符
vegetables:
- potato
- carrot
- cabbage

四、Docker Compose 常用命令

命令描述
docker-composebuild重新構(gòu)建服務
ps列出容器
up創(chuàng)建和啟動容器
exec在容器里面執(zhí)行命令
scale指定一個服務容器啟動數(shù)量
top顯示容器進程
logs查看容器輸出
down刪除容器、網(wǎng)絡、數(shù)據(jù)卷和鏡像
stop/start/restart停止/啟動/重啟服務
-f,--file使用特定的 compose 模板文件,默認為 docker-compose.yml
-p,--project-name指定項目名稱,默認使用目錄名稱
-d在后臺運行

五、Docker Compose 配置常用字段

字段含義
build使用Dockerfile構(gòu)建鏡像。指定Dockerfile 文件名,要指定Dockerfile文件需要在build標簽的子級標簽中使用dockerfile標簽指定
dockerfile構(gòu)建鏡像上下文路徑(指定Dockerfile文件)
context可以是dockerfile 的路徑,或者是指向git 倉庫的url地址
image指定鏡像。
command執(zhí)行命令,覆蓋容器啟動后默認執(zhí)行的命令(類似于 docker run)
container_name指定容器名稱,由于容器名稱是唯一的, 如果指定自定義名稱,則無法scale指定容器數(shù)量(同一個鏡像指定多個容器數(shù)量)
deploy指定部署和運行服務相關(guān)的配置,只能在Swarm模式使用
environment添加環(huán)境變量
networks加入網(wǎng)絡,引用頂級networks下條目
networks_mode設(shè)置容器的網(wǎng)絡模式,如 host,bridge
ports暴露容器端口,與-p相同,但端口不能小于60
volumes掛載一個宿主機目錄或命令卷到容器中,命令卷要在頂級volumes定義卷名稱
volumes_from從另一個服務或容器掛載卷,可選參數(shù):ro 和:rw。僅版本'2' 支持
hostname容器主機名
sysctls在容器內(nèi)設(shè)置內(nèi)核參數(shù)
links連接到另外一個容器,- 服務名稱[:服務別名] (類似于容器互聯(lián))
privileged

用來給予容器root權(quán)限,注意是不安全的,只有兩個值:true或false

restart

設(shè)置重啟策略,never,always, no-failure, unless-stopped

never——默認策略,在容器退出時不重啟容器

on-failure——在容器非正常退出時(退出狀態(tài)非0),才會重啟容器

on-failure:3——在容器非正常退出時重啟容器,最多重啟3次

always——在容器退出時總是重啟容器

unless-stopped——在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器

depends_on

此標簽用于解決容器的依賴、啟動先后問題

六、Docker-compose搭建LNMP實戰(zhàn)

整體文件結(jié)構(gòu)

1.準備依賴文件,配置nginx

#創(chuàng)建nginx工作目錄,上傳nginx-1.12.0的軟件包
mkdir /opt/compose_lnmp/nginx/
[root@localhost1 ~]#ls /opt/compose_lnmp/nginx/
Dockerfile  nginx-1.12.0.tar.gz  nginx.conf
#編寫nginx的Dockerfile
vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image <chips>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j2 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
#修改nginx配置文件(只做了基礎(chǔ)配置,后續(xù)可以修改)
#修改45行,添加php項
 location / {
            root   html;
            index  index.html index.php;
        }
#66~71行取消注釋,修改
location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   172.18.0.30:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_sc    ript_name;
 70             include        fastcgi_params;
 71         }

2.準備依賴文件,配置mysql

#創(chuàng)建mysql工作目錄,上傳mysql-boost-5.7.20的軟件包
mkdir /opt/compose_lnmp/mysql/
[root@localhost1 mysql]#ls
Dockerfile  my.cnf  mysql-boost-5.7.20.tar.gz
#編寫Dockerfile
vim Dockerfile
FROM centos:7
MAINTAINER this is mysql image <chips>
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j2 && make install
ADD my.cnf /etc/
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN useradd -M -s /sbin/nologin  mysql && chown mysql:mysql /etc/my.cnf && chown -R mysql:mysql /usr/local/mysql/ && /usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data && cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
CMD ["/usr/local/mysql/bin/mysqld"]
#修改my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

3.準備依賴文件,配置php

#創(chuàng)建php工作目錄,上傳php-7.1.10的軟件包
mkdir /opt/compose_lnmp/php/
[root@localhost1 php]#ls
Dockerfile  php-7.1.10.tar.bz2  php-fpm.conf  php.ini  www.conf
#編寫Dockerfile
FROM centos:7
MAINTAINER this is php image <chips>
RUN yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c++ make pcre-devel && useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.bz2 /usr/local/src/
WORKDIR /usr/local/src/php-7.1.10
RUN ./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make -j2 && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
ADD php.ini     /usr/local/php/lib/
ADD php-fpm.conf /usr/local/php/etc/
ADD www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
#修改php.ini文件
#1170行
mysqli.default_socket = /usr/local/mysql/mysql.sock
#939行
date.timezone = Asia/Shanghai
#修改php-fpm.conf文件
#19行取消注釋
pid = run/php-fpm.pid
#修改www.conf文件
#23,24行修改
user = nginx
group = nginx
#36行修改為監(jiān)聽php地址的9000端口
listen = 172.18.0.30:9000
#62行允許的客戶端,添加監(jiān)聽地址為nginx的地址
listen.allowed_clients = 127.0.0.1,172.18.0.10

4.編寫docker-compose.yml文件

#docker-compose.yml放在服務同級目錄
[root@localhost1 compose_lnmp]#ls
docker-compose.yml  mysql  nginx  php  wwwroot
#編寫
vim docker-compose.yml
#定義docker-compose版本,可以是2 或 3
version: '3'

#使用services定義服務
services:
  #第一個service
  nginx:
    #設(shè)置容器名
    container_name: nginx
    #使用dockerfile來構(gòu)建鏡像
    build:
      #指定Dockerfile文件所在位置
      context: ./nginx
      #指定文件名
      dockerfile: Dockerfile
    #映射端口
    ports:
    - 80:80
    - 443:443
    #設(shè)置數(shù)據(jù)卷掛載
    volumes:
    - ./wwwroot:/usr/local/nginx/html
    #加入網(wǎng)絡
    networks:
      lnmp:
        ipv4_address: 172.18.0.10

  mysql:
    container_name: mysql
    build:
      context: ./mysql
      dockerfile: Dockerfile
    ports:
    - 3306:3306
    networks:
      lnmp:
        ipv4_address: 172.18.0.20
    volumes:
    - db-data:/usr/local/mysql
    privileged: true

  php:
    container_name: php
    build:
      context: ./php
      dockerfile: Dockerfile
    ports:
    - 9000:9000
    networks:
      lnmp:
        ipv4_address: 172.18.0.30
    volumes:
    - db-data:/usr/local/mysql
    - ./wwwroot:/usr/local/nginx/html
    #指定依賴,php需要最后啟動
    depends_on:
    - nginx
    - mysql

#設(shè)置網(wǎng)絡為自定義網(wǎng)絡
networks:
  lnmp:
    driver: bridge
    ipam:
      config:
      - subnet: 172.18.0.0/16

volumes:
  db-data:

5.準備測試項目WordPress

6.docker-compose構(gòu)建項目(等待約30min)

查看狀態(tài)(全up則成功)

7.授權(quán)數(shù)據(jù)庫,訪問192.168.116.10/wordpress/index.php/

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于ROS2安裝與docker環(huán)境使用

    關(guān)于ROS2安裝與docker環(huán)境使用

    大家好,本篇文章主要講的是關(guān)于ROS2安裝與docker環(huán)境使用,感興趣的同學趕快來看看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Docker本地鏡像發(fā)布到阿里云的實現(xiàn)

    Docker本地鏡像發(fā)布到阿里云的實現(xiàn)

    本文主要介紹了Docker本地鏡像發(fā)布到阿里云的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Docker圖文詳解

    Docker圖文詳解

    今天小編就為大家分享一篇關(guān)于Docker圖文詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Docker容器互訪的三種方法

    Docker容器互訪的三種方法

    這篇文章主要介紹了Docker容器互訪的三種方法,幫助大家更好的理解和使用docker容器,感興趣的朋友可以了解下。
    2020-09-09
  • Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像

    Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像

    這篇文章主要介紹了Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Docker容器間通訊直接路由方式實現(xiàn)網(wǎng)絡通訊

    Docker容器間通訊直接路由方式實現(xiàn)網(wǎng)絡通訊

    今天小編就為大家分享一篇關(guān)于Docker容器間通訊直接路由方式實現(xiàn)網(wǎng)絡通訊,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Docker部署SonarQube的詳細流程

    Docker部署SonarQube的詳細流程

    SonarQube是一款開源代碼檢測工具,運作流程是這樣的,先通過 sonar-scanner 插件掃描代碼,把數(shù)據(jù)存儲到數(shù)據(jù)庫,sonarQube 讀取數(shù)據(jù)庫,將數(shù)據(jù)庫展現(xiàn)在 web 平臺,本篇介紹通過 docker 來安裝,感興趣的朋友一起看看吧
    2022-02-02
  • ngrok私有服務搭建方式(docker交叉編譯)

    ngrok私有服務搭建方式(docker交叉編譯)

    文章介紹了如何使用Docker環(huán)境進行ngrok的編譯,并提供了一個詳細的Dockerfile和關(guān)鍵編譯腳本
    2024-12-12
  • Docker命令行入門大全(這18條,你不得不知)

    Docker命令行入門大全(這18條,你不得不知)

    Docker有成千上百萬的命令行。因此Docker文檔內(nèi)容十分豐富,同時又讓剛?cè)腴T的新手感到不知所措。在本文中,我將重點介紹運行Docker的關(guān)鍵命令。
    2019-09-09
  • 關(guān)于Dockerfile鏡像制作完整實例

    關(guān)于Dockerfile鏡像制作完整實例

    本文詳細介紹了如何使用Docker制作鏡像,并通過實際應用發(fā)版展示了制作過程,主要內(nèi)容包括創(chuàng)建和啟動Docker容器的腳本(init.sh、start.sh、stop.sh、restart.sh),以及配置目錄,文章還討論了Docker容器IP地址的作用,并總結(jié)了制作新鏡像的基本步驟
    2024-11-11

最新評論