【docker專題(5)】安裝Lnmp(多PHP版本與寶塔)

[info] 稍微瞭解一下即可,實際上不會這樣操作,都是通過docker-compose來進行編排的。

安裝Lnmp(多PHP版本)

下載對應的鏡像版本

https://hub.docker.com/ 搜索鏡像

docker pull mysql:8.0
docker pull mysql:5.7
docker pull php:7.2-fpm
docker pull php:5.6-fpm
docker pull nginx:1.15

創建容器,映射工作目錄和端口

# 創建php:5.6-fpm的容器並命名php56,將容器的9000端口映射到主機的9000端口。
# 注意:左邊是宿主機,右邊是docker
# 注意:掛載的目錄要和nginx配置的root目錄一致
docker run -d -p 9000:9000 --name php56 -v /home/docker/wwwroot:/usr/share/nginx/html php:5.6-fpm

# 停止上面版本之後再創建其他版本的PHP
# 進入容器後再通過docker-php-ext-install來安裝對應的擴展 docker-php-ext-install mysqli
docker run -d -p 9000:9000 --name php72 -v /home/docker/wwwroot:/usr/share/nginx/html php:7.2-fpm

# 創建mysql容器,同一個鏡像可以創建多容器(鏡像就像是類,容器就像是實例)
docker run -d -p 3307:3306 --name mysql57-master  -e  MYSQL_ROOT_PASSWORD=123456  mysql:5.7
docker run -d -p 3308:3306 --name mysql57-slave  -e  MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 創建nginx容器
# 1. 第一個“-v”,是項目位置,把項目放到掛載到的目錄下即可
# 2. 第二個“-v”,是掛載的主配置文件"nginx.conf",注意"nginx.conf"文件內有一行
#    "include /etc/nginx/conf.d/*.conf;" ,
#     這個include指向了子配置文件的路徑,此處注意include後所跟的路徑一定不能出錯
# 3. 第三個“-v”,把docker內子配置文件的路徑也掛載了出來,注意要與 “2.” 中include指向路徑一致
# 4. nginx.conf是掛載了一個文件(docker是不推薦這樣用的),conf.d掛載的是一個目錄
# 注意,一定要先創建目錄再掛載
docker run \
    --name nginx115 \
    -d -p 80:80  \
    -v /home/docker/wwwroot:/usr/share/nginx/html  \
    -v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
    -v /home/docker/nginx/vhost:/etc/nginx/conf.d  \
nginx:1.15

[info] 1. 掛載的目錄可以用nsenter命令進入容器中查看,注意,不要用docker attach。 甚至還可以用 docker exec -i -t container_name /bin/bash

  1. 要理解映射目錄,宿主目錄只是映射到容器目錄,要站在容器目錄的角度來做相應的配置!
  2. 注意,php的掛載目錄要與nginx的掛載目錄要一致,否則會出現File not found.錯誤!

配置

[danger] 注意,所有的配置是以容器根目錄開始;不要設置成映射的宿主機目錄。

nginx.conf

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

hello_world.conf

server {

  listen 80;
  server_name  localhost;

  # 這裏是容器的位置!
  root  /usr/share/nginx/html;
  index index.php index.html;

  location / {
    index index.php index.html index.htm;
    if (!-e $request_filename) {
      rewrite ^/(.*)$ /index.php?$1 last;
      break;
    }
  }

  location ~ \.php$ {
    # 這裏的ip是對應PHP版本的容器的ip地址
    # docker inspect -f '{{.NetworkSettings.IPAddress}}'  容器名
    # 版本切換的話,就是停止和啓動對應版本的容器即可
    fastcgi_pass 172.17.0.2:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

安裝PHP擴展

docker exec -it php5.6 /bin/bash
docker-php-ext-install mysqli (mysql,gd,curl,...)

安裝鏡像中非自帶的php擴展:例如 php-redis擴展:
php-redis擴展下載地址:https://github.com/phpredis/p... (選擇適合的版本下載)
可以在php容器內使用wget下載,也可以在ubuntu中下載後拷貝到容器中。

#將ubuntu中的/data/phpredis3.1.2拷貝到容器的/usr/src/php/ext/目錄下並重命名爲redis 。
docker cp /data/phpredis3.1.2 php5.6:/usr/src/php/ext/redis

PHP鏈接其他容器的mysql

<?php
$dbms='mysql';     //數據庫類型
$host='172.17.0.3'; //容器ip
$port=3306;
/*
$host='172.28.3.199'; //宿主機ip
$port=3307;

注意:
端口映射: 3307:3306
容器ip:172.17.0.3
宿主機ip:172.28.3.199
如果要通過容器ip來鏈接的話,端口要填寫容器ip的端口3306。
而不是映射到宿主機的3307端口。
如果要通過宿主機ip來鏈接的話,端口要寫映射到宿主機的端口3307。
*/

$dbName='test';    //使用的數據庫
$user='root';      //數據庫連接用戶名
$pass='123456';          //對應的密碼
$dsn="$dbms:host=$host;port=$port;dbname=$dbName";
try {
    $dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象
    echo "連接成功<br/>";
    foreach ($dbh->query('SELECT * from test') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");
}

docker寶塔面板安裝(不建議,做測試可以用)

docker pull centos:7

# 因爲要用於swoole開發,所以開的端口比較多
# 只用在開發環境
docker run -it -p 20:20 -p 21:21 -p 80:80 -p 8080:8080 -p 443:443 -p 3366:3306 -p 6399:6379 -p 888:888 -p 8888:8888 -p 9500:9500 -p 9501:9501 -p 9502:9502 -p 9503:9503 -p 9504:9504 -p 9505:9505 --name bt_panel  -v /home/docker/wwwroot:/home/wwwroot centos:7

# 下載必要工具
yum -y update  && yum -y install initscripts screen wget

# 防止網絡掉線或意外退出,可以使用screen工具
screen -S install_bt

# 安裝寶塔面板
wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安裝完輸出以下內容

==================================================================
Congratulations! Installed successfully!
==================================================================
# 自行替換成內網ip
Bt-Panel: http://180.168.76.242:8888/6a863329
username: vzsybxji
password: 455e4a2a

# 寶塔命令
https://www.bt.cn/btcode.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章