天天看點

Docker下部署php mysql nginx

前幾天在騰訊購買了域名和雲主機,嘗試在docker容器内部署php+mysql+nginx,參考了https://notemi.cn/docker-quickly-set-up-php-nginx-mysql-environment.html,經過一番折騰,總算是成功了。這裡把詳細的過程寫下來,供今後參考。

系統環境:

CentOS Linux release 7.7.1908 (Core)

Docker 19.03.2

安裝docker

1. 添加repo

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
           

2. 檢視所有倉庫中所有docker版本,并選擇特定版本安裝

$ yum list docker-ce --showduplicates | sort -r
           

3.推薦安裝docker的最新穩定版本

$ sudo yum install docker-ce
           

4.安裝好後使用下面指令檢查确認docker版本

$ docker --version
           
Docker下部署php mysql nginx

建立資源檔案夾

Docker安裝好之後,我們可以建立一些檔案夾,映射一些配置檔案或網站程式檔案到主控端。

/data
  /mysql  存放資料庫備份
  /nginx  nginx配置檔案
    /conf
    /rewrite 僞靜态
  /wwwroot  網站檔案
  /wwwlogs  日志
  /source  程式源代碼
  /download 下載下傳目錄
           

部署Mysql

1. 拉取鏡像

2 建立mysql容器,為了便于今後的管理和指令的重複使用,直接把指令放在sh腳本檔案中

create_mysql.sh

echo "create mysql container"
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name m_mysql mysql:5.7
           

參數說明:

-d 容器背景運作

-p 添加主機到容器的端口映射,前面是映射到主控端的本地端口,後面是容器内需要映射的端口

-e 設定環境變量, MYSQL_ROOT_PASSWORD這裡設定了mysql的root使用者初始密碼

--name 容器的名字

之後需要進入容器執行mysql允許遠端連接配接

3. 進入容器:

$ docker exec -it m_mysql /bin/bash
           

4. 開啟Mysql遠端連接配接

# 進入MySQL
$ MySQL -uroot -p123456
# 選擇資料庫
> use mysql
# 開啟遠端連接配接
> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
> FLUSH PRIVILEGES;
# 重新開機
$ service mysql restart
           

部署PHP

這裡使用bitnami/php-fpm:7.1的鏡像,比原生的php-fpm相比,預設安裝了mysqli和pod擴充。

1. 拉取鏡像

docker pull bitnami/php-fpm:7.1
           

2. 建立容器。下面給出建立php容器的腳本create_php_container.sh

echo "create php container"
docker run \
  -d \
  -p 9000:9000 \
  -v /data/wwwroot:/usr/share/nginx/html \
  --link m_mysql:mysql \
  --name m_phpfpm bitnami/php-fpm:7.1
           

參數說明: 

-d 讓容器在背景運作

-p 添加主機到容器的端口映射

-v 添加目錄映射

--name 容器的名字,随便取,但是必須唯一

--link link 是在兩個contain之間建立一種父子關系,父container中的web,可以得到子container db上的資訊。

通過link的方式建立容器,我們可以使用被Link容器的别名進行通路,而不是通過IP,解除了對IP的依賴。

部署NGINX

1.首先使用指令拉取鏡像并運作容器

$ docker pull nginx:1.11.0
$ docker run -d -p 80:80 --name m_nginx nginx:1.11.0
           

2. 之後用docker cp指令複制配置檔案到主控端

# docker cp m_nginx:/etc/nginx/nginx.conf /data/nginx
# docker cp m_nginx:/etc/nginx/conf.d/default.conf /data/nginx/conf
           

3. 删除之前運作的nginx

$ docker stop m_nginx && docker rm m_nginx
           

4. 重新運作nginx容器,這一步跟以前一樣,建議儲存為create_nginx_container.sh腳本

docker run -d -p 80:80 --name m_nginx \
  -v /data/wwwroot:/usr/share/nginx/html \
  -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /data/nginx/conf:/etc/nginx/conf.d \
  -v /data/wwwlogs:/var/log/nginx \
  --link m_phpfpm:phpfpm \
  nginx
           

5. 編輯配置檔案

修改

/data/nginx/conf/default.conf

server {
    listen       80;
    server_name  _;

    #charset koi8-r;
    access_log  /var/log/nginx/default_nginx.log  main;

    location / {
        root   /usr/share/nginx/html/default;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html/default;
        fastcgi_pass   phpfpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
           

部署phpmyadmin

1. 拉取鏡像

$ docker pull phpmyadmin/phpmyadmin
           

2. 建立容器

docker run -d -p 8080:80 \
  --name m_phpmyadmin \
  --link m_mysql:db \ 
  phpmyadmin/phpmyadmin
           

注意:這一步我們把主控端的8080端口映射到容器的80端口上。

最後測試

浏覽器裡輸入http://主機位址:8080,使用者名和密碼需要跟mysql一緻。

Docker下部署php mysql nginx

OK,成功

Docker下部署php mysql nginx