[info] 稍微瞭解一下即可,實際上不會這樣操作,都是通過docker-compose來進行編排的。
安裝Lnmp(多PHP版本)
下載對應的鏡像版本
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
- 要理解映射目錄,宿主目錄只是映射到容器目錄,要站在容器目錄的角度來做相應的配置!
- 注意,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