docker yum php mysql_Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本)
Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本)
2年前
閱讀 6556
評論 0
喜歡 0
### 一、先安裝Dokcer:
1、安裝一些必要的系統(tǒng)工具:
`sudo yum install -y yum-utils device-mapper-persistent-data lvm2`
2、添加軟件源信息:
`sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo`
3、更新 yum 緩存:
`sudo yum makecache fast`
4、安裝 Docker-ce:
`sudo yum -y install docker-ce`
5、啟動 Docker 后臺服務(wù)
`sudo systemctl start docker`
6、讓 Docker 隨系統(tǒng)自動啟動
`sudo systemctl enable docker`
### 二、配置NMP容器:
1、下載相應(yīng)鏡像到本地
```
docker pull php:7.2-fpm
docker pull php:7.2-cli
docker pull mysql:5.7
docker pull nginx:1.11
```
2、創(chuàng)建相應(yīng)容器
首先,我們來創(chuàng)建`php:7.2-fpm`的容器并命名為`php7.2fpm`,并將容器的`9000`端口映射到主機的`9000`端口。
把主機的`/home/ubuntu/nginx/www`目錄掛載到容器的`/www`目錄(這個目錄用于存放php腳本文件)
`docker run -d -p 9000:9000 --name php7.2-fpm -v /test/nginx/www:/www php:7.2-fpm`
在創(chuàng)建這個容器之前要先把前面創(chuàng)建的`php7.2fpm`停止,不然`9000`端口會出現(xiàn)沖突。
`docker run -d -p 9000:9000 --name php7.2-cli -v /test/nginx/www:/www php:7.2-cli`
注意1:不能同時運行多個php容器,要使用不同版本時,必須先`stop`正則運行的php容器,在`start`另一個版本的php容器
注意2:如果你想同時在線運行多個PHP容器,可以分別配置不同的端口號,這樣就不會產(chǎn)生端口沖突了
3、創(chuàng)建nginx容器
把配置主機的`/test/nginx/conf`目錄掛載到容器的`/etc/nginx/conf.d`目錄,用于處理`nginx`的配置文件,文件根目錄與PHP的指向同一個。
`docker run -d -p 80:80 --name nginx1.11 -v /test/nginx/conf:/etc/nginx/conf.d -v /test/nginx/www:/www nginx:1.11`
4、創(chuàng)建mysql容器,-e MYSQL_ROOT_PASSWORD=123456將mysql容器的root密碼初始化為123456
`docker run -d -p 3306:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7`
5、創(chuàng)建infobright容器,與MySQL容器的創(chuàng)建方法類似
`docker run -d -p 5029:5029 --name myinfobright -e MYSQL_ROOT_PASSWORD=root meatcar/infobright`
6、創(chuàng)建redis3.2容器,redis-server --apendonly yes 表示在容器執(zhí)行redis-server啟動命令,并打開redis持久化配置
`docker run -d -p 6379:6379 --name redis3.2 -v /test/redis/data:/data redis:3.2 redis-server --appendonly yes`
7、創(chuàng)建memcached容器
`docker run -d -p 11211:11211 --name memcached -v /test/memcached/data:/memcached memcached:latest`
### 三、nginx配置文件與php文件存放
1、在`/test/nginx/conf/`目錄中新建一個`default.conf`文件,寫入以下內(nèi)容:
```
server {
# 端口號
listen 80;
# 本機IP地址,這個一般都不用改
server_name localhost;
# 你需要綁定到哪個文件夾
root /www/;
location / {
# 默認加載文件
index index.html index.php;
# 開啟路由規(guī)則偽靜態(tài)
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
# 500 404的錯誤文件
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php {
# 這里的ip是對應(yīng)PHP版本的容器的ip地址,查看容器IPAddress地址可以使用docker inspect命令
fastcgi_pass 172.17.0.2:9000;
fastcgi_index index.php;
client_max_body_size 22m;
# 這兩句也是用于開啟路由規(guī)則偽靜態(tài)
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
2、上傳完成nginx的配置文件后,我們一定要記得重啟下nginx的容器,否則是不會生效的。
`docker restart nginx1.11`
3、上傳項目文件
在docker中,我們一般會將本地宿主機的目錄掛載到容器目錄中,通過映射的方式可以讓容器直接運行宿主機的代碼,
例如下面的新建容器命令:
`docker run -d -p 9000:9000 --name php7.2-fpm -v /test/nginx/www:/www php:7.2-fpm`
實際上我們是將本地`/test/nginx/www`中的文件,共享給了docker的`php7.2-fpm`容器運行,而容器的虛擬目錄則是`/www`,
這里注意,我們說的虛擬目錄是這個目錄在你用服務(wù)器中是看不到的,因為目前為止docker還不支持我們直接操作容器目錄,只能操作宿主機目錄。
所以現(xiàn)在我們在`/test/nginx/www/`目錄中新建一個`index.php`文件,然后隨便寫入以下內(nèi)容。
最后在瀏覽器中,訪問你的服務(wù)器IP即可成功運行這個PHP文件了。
### 四、安裝PHP擴展
默認情況下,PHP的容器都是空白的,對應(yīng)的擴展需要執(zhí)行安裝,
我們使用`docker exec -it php7.2-fpm /bin/bash`命令進行該容器。
然后執(zhí)行下面的代碼安裝擴展:
```
# 普通擴展安裝
docker-php-ext-install mysqli
docker-php-ext-install pdo
docker-php-ext-install gd2
docker-php-ext-install gd
docker-php-ext-install curl
docker-php-ext-install sockets
# 安裝redis擴展
curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.1.0.tar.gz
tar xfz /tmp/redis.tar.gz
rm -r /tmp/redis.tar.gz
mkdir -p /usr/src/php/ext
mv phpredis-3.1.0 /usr/src/php/ext/redis
docker-php-ext-install redis
# 安裝memcached擴展
# 我也失敗了,沒找到,大神說要用dockerfile,但小牛還沒學(xué)到那里,先放棄了
```
最后使用`exit`命令對出容器,然后再使用`docker restart php7.2-fpm`命令重啟PHP容器,使擴展生效。
### 五、通過Navicat連接數(shù)據(jù)庫
使用`docker exec -it mysql5.7 /bin/bash`命令進入容器。
再通過`mysql -uroot -p`命令,輸入密碼`123456`后進入mysql命令行。
再輸入`GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;`進行外部登錄授權(quán)
再輸入`flush privileges;`使命令生效,最后使用`exit;`命令退出mysql命令行。
最終輸入`exit`退出容器。
這時候我們使用Navicat就能夠連接數(shù)據(jù)庫了。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的docker yum php mysql_Centos下 使用Docker, 配置PHP+Nginx+Mysql(多PHP版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python列表切片得到的是列表还是字符
- 下一篇: redis 读取mysql数据类型_认识