運行docker:
sudo systemctl start docker
0.創建docker網絡:
docker network create --subnet=172.18.0.0/24 mxd
1. 復制配置文件到宿主機:
# 創建宿主機目錄結構 mkdir -p /www/docker/nginx/logs mkdir -p /www/docker/php/php74 mkdir -p /www/web # 創建 nginx 容器 docker run -d --name nginx --network mxd nginx # 復制 nginx 配置文件 docker cp nginx:/etc/nginx/conf.d /www/docker/nginx docker cp nginx:/etc/nginx/nginx.conf /www/docker/nginx # 創建 php 容器 docker run -d --name php74 --network mxd php:7.4-fpm # 復制 php 配置文件 docker cp php74:/usr/local/etc/php-fpm.d/www.conf /www/docker/php/php74 docker cp php74:/usr/local/etc/php/php.ini-development /www/docker/php/php74/php.ini # 復制完成后銷毀容器 docker rm -vf nginx php74
2. 創建容器, 掛載目錄:
# 創建 nginx 容器 # -v 說明: # 第1個: 掛載 nginx 主配置文件 # 第2個: 掛載 nginx 站點配置目錄 # 第3個: 掛載日志 # 第4個: 掛載 html 文件目錄 docker run -d --name nginx -p 80:80 -p 443:443 --network mxd --ip 172.18.0.2 \ -v /www/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /www/docker/nginx/conf.d:/etc/nginx/conf.d \ -v /www/docker/nginx/logs:/var/log/nginx \ -v /www/web:/www/web \ nginx # 創建 php 容器 # -v 說明: # 第1個: 掛載 php-fpm 配置文件 # 第2個: 掛載 php 配置文件 # 第3個: 掛載 html 文件目錄 docker run -d --name php74 -p 9000:9000 --network mxd --ip 172.18.0.4 \ -v /www/docker/php/php74/www.conf:/usr/local/etc/php-fpm.d/www.conf \ -v /www/docker/php/php74/php.ini:/usr/local/etc/php/php.ini \ -v /www/web:/www/web \ php:7.4-fpm
3. 安裝php擴展gd iconv pdo_mysql
參考:https://hub.docker.com/_/php
https://blog.csdn.net/lggirls/article/details/89395827
https://www.jianshu.com/p/20fcca06e27e
# 進入容器 docker exec -it php74 bash # 安裝`pdo_mysql`擴展: docker-php-ext-install pdo_mysql # 單獨安裝`gd`擴展 apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd # 安裝`gd`和`iconv`擴展(如果失敗, 請去官網復制): apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd # 安裝`zip`擴展: apt-get update && apt-get install -y --no-install-recommends libzip-dev \ && rm -r /var/lib/apt/lists/* \ && docker-php-ext-install -j$(nproc) zip # 安裝`intl`擴展: apt-get update && apt-get install -y zlib1g-dev libicu-dev g++ \ && docker-php-ext-configure intl \ && docker-php-ext-install intl # 大一統命令(安裝`pdo_mysql`,`gd`,`iconv`,`zip`,`intl`): apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev --no-install-recommends libzip-dev zlib1g-dev libicu-dev g++ \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install -j$(nproc) zip \ && docker-php-ext-configure intl \ && docker-php-ext-install intl # 退出容器 exit
4. 配置站點:
4.1. 默認站點:
cd /www/docker/nginx/conf.d vi default.conf
完整代碼:
server { listen 80; listen [::]:80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; root /www/web; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { # root html; fastcgi_pass php74:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #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 html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } #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 html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$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; #} }
4.2. 默認其它站點:
在/www/docker/nginx/conf.d創建xxx.conf文件,修改為對應內容即可
4.3. 上傳網站代碼;
4.4. 重啟nginx:
docker restart nginx # 測試配置文件是否正確 docker exec nginx nginx -t # 重載配置文件 docker exec nginx nginx -s reload
4.5 訪問網站 ip/index.php
5. 安裝mysql
5.1. 復制配置文件到宿主機:
# 創建目錄(該目錄在啟動鏡像之前要保證為空, 否則密碼可能錯誤) mkdir -p /www/docker/mysql/mysql57/data # 創建容器 docker run -d --name mysql57 --network mxd -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 復制配置文件 docker cp mysql57:/etc/mysql/conf.d /www/docker/mysql/mysql57 docker cp mysql57:/etc/mysql/mysql.conf.d /www/docker/mysql/mysql57 # 刪除容器 docker rm -vf mysql57
5.2. 創建mysql容器,掛載目錄:
docker run -d --name mysql57 --network mxd --ip 172.18.0.5 \ -v /www/docker/mysql/mysql57/data:/var/lib/mysql \ -v /www/docker/mysql/mysql57/conf.d:/etc/mysql/conf.d \ -v /www/docker/mysql/mysql57/mysql.conf.d:/etc/mysql/mysql.conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
5.3. 測試連接(密碼:123456):
docker exec -it mysql57 mysql -uroot -p
6. 安裝redis
6.1. 創建宿主機目錄:
# 創建宿主機目錄結構 mkdir -p /www/docker/redis50/data mkdir -p /www/docker/redis50/conf
6.2. 創建redis.conf文件:
# 創建 redis.conf文件 touch /www/docker/redis50/confredis.conf
或
cd /www/docker/redis50/ wget https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf
修改redis.conf
注釋符號 # 1. 注釋 bind 127.0.0.1 2. protected-mode yes 修改成 protected-mode no 3. 添加 requirepass yourpassword (注:不添加則可以無密碼訪問) 注: 步驟1和步驟的2目的是為了遠程連接redis,如果只需本地訪問就無需修改
6.3. 創建redis容器,掛載目錄:
docker run -d --name redis50 -p 6379:6379 --network mxd --ip 172.18.0.6 \ -v /www/docker/redis50/conf/redis.conf:/etc/redis/redis.conf \ -v /www/docker/redis50/data:/data \ redis:5.0.7 \ redis-server /etc/redis/redis.conf --appendonly yes
-d 后台運行
-p 端口映射到主機的端口
-v 將主機目錄掛載到容器的目錄
redis-server --appendonly yes : 在容器執行redis-server啟動命令,並打開redis持久化配置
6.4. 測試連接:
docker exec -it redis50 bash redis-cli