Mac下Docker配置LNMP開發環境的方法:1、安裝Docker;2、配置安裝環境;3、安裝Mysql5.7;4、安裝php7.4.5;5、安裝nginx1.16.1;6、配置docker-compose。

本文操作環境:macOS10.15系統、php7.4.5版,MacBook Air 2019電腦
Mac下Docker設定LNMP開發環境
前言:
1.Docker的標準用法是每個docker容器只提供一個服務。
所以應該是mysql單獨一個容器,php-fpm單獨一個容器,nginx單獨一個容器。
2.Docker的設計理念是在容器裡面不運行後台服務,容器本身就是宿主機上的一個獨立的主進程,也可以間接的理解為就是容器裡運行服務的應用進程。一個容器的生命週期是圍繞著這個主程序存在的,所以正確的使用容器方法是將裡面的服務運行在前台。
1.安裝Docker
下載安裝
下載位址 https://download.docker.com/mac/stable/Docker.dmg
配置映像加速
Preferences >> Docker Engine
1 2 3 4 5 6 7 | {
"registry-mirrors" : [
"https://registry.docker-cn.com" ,
"http://hub-mirror.c.163.com" ,
"https://docker.mirrors.ustc.edu.cn"
]
}
|
登入後複製
檢視設定狀態
docker info
2.設定安裝環境
安裝centos (可跳過)
查看鏡像版本https://hub.docker.com/_/centos?tab=tags
拉取映像
1 | docker pull centos:centos7.8.2003
|
登入後複製
查看鏡像
建立容器
1 2 3 4 5 6 7 | docker run -v /data:/docker_data -p 80:80 -itd --privileged=true centos:v0.0.1 /usr/sbin/init
|
登入後複製
查看容器
進入容器
1 | docker exec -it 46e9810a35e6 bash
|
登入後複製
更新映像(提交容器副本)
1 | docker commit -m "test update" 21e09cfcc692 centos:test
|
登入後複製
刪除鏡像
問題1:unable to remove repository reference "centos:test" (must force) - container 46e9810a35e6 is using its referenced image 5b5eb956a405
##
1 2 | docker ps -l
docker rm 46e9810a35e6
|
登入後複製
安裝Mysql5.7
拉取鏡像
建立容器
1 | docker run -p 3306:3306 --name mysql_test -v ~/Docker/mysql/data:/ var /lib/mysql -e MYSQL_ROOT_PASSWORD=root -d --privileged=true mysql:5.7
|
登入後複製
指令說明
1 2 3 4 5 6 | -p 3306:3306:将容器的3306端口映射到主机的3306端口
-v PWD/mysql/data:/ var /lib/mysql:将主机当前目录下的mysql/data文件夹挂载到容器的/ var /lib/mysql 下,在mysql容器中产生的数据就会保存在本机mysql/data目录下(路径会自动创建)
-e MYSQL_ROOT_PASSWORD=passwd:初始化root用户的密码
-d 后台运行容器
--name 给容器指定别名
--privileged=true centos7 可能会碰到权限问题,需要加参数
|
登入後複製
進入容器
1 | docker exec -it mysql_test /bin/bash
|
登入後複製
docker加上sudo的方法
1 2 3 4 | 1.创建docker组:sudo groupadd docker
2.将当前用户加入docker组:sudo gpasswd -a ${USER} docker
3.重启服务:sudo service docker restart
4.刷新docker成员:newgrp - docker
|
登入後複製
Mac下
1 2 3 4 5 6 | #查看用户组:
dscl . list /groups
#添加用户组:
sudo dscl . -create /Groups/docker
添加user到group:
sudo dscl . -append /Groups/docker GroupMembership username
|
登入後複製
安裝php7.4.5
拉取映像
1 | docker pull php:7.4.5-fpm
|
登入後複製
建立Dockerfile
1 2 3 4 5 6 7 8 9 10 | vim Dockerfile
FROM php:7.4.5-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng12*-dev \
&& docker-php-ext-enable opcache \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install gd \
|
登入後複製
建構映像
1 | docker build -t= "php:7.4.5v2" .
|
登入後複製
啟動
1 | docker run -d -p 9000:9000 -v / var /www/html/:/ var /www/html/ --name php-with-mysql --link mysql_test:mysql --volumes-from mysql_test --privileged=true php-fpm5.6/v2
|
登入後複製
指令說明
1 2 3 4 | -v 将本地磁盘上的php代码挂载到docker 环境中,对应docker的目录是 / var /www/html/
--name 新建的容器名称 php-with-mysql
--link 链接的容器,链接的容器名称:在该容器中的别名,运行这个容器是,docker中会自动添加一个host识别被链接的容器ip
--privileged=true 权限问题
|
登入後複製
備註
1 2 | nproc内核参数,是系统上的最大进程数。
$(nproc)是获取安装系统的该内核参数。常用的还有获取文件路径的命令$(pwd)
|
登入後複製
擴充相關
1 2 3 4 5 6 7 | # 查看已开启扩展
php -m
# 查看现有可以启动的扩展
ls /usr/local/lib/php/extensions/no-debug-non-zts-20190902/
# 启动扩展
docker-php-ext-enable opcache
# 安装并启动扩展
|
登入後複製
參考Docker php安裝擴充步驟詳解
安裝nginx1.16.1
拉取鏡像
建立容器
1 | docker run -d --link php-with-mysql:phpfpm --volumes-from php-with-mysql -p 80:80 -v / var /www/nginx/conf/ default .conf:/etc/nginx/conf.d/ default .conf --name nginx-php --privileged=true nginx
|
登入後複製
指令說明
1 2 3 | --link php-with-mysql:phpfpm 将php容器链接到nginx容器里来,phpfpm是nginx容器里的别名。
--volumes-from php-with-mysql 将php-with-mysql 容器挂载的文件也同样挂载到nginx容器中
-v / var /www/nginx/conf/ default .conf:/etc/nginx/conf.d/ default .conf 将nginx 的配置文件替换,挂载本地编写的配置文件
|
登入後複製
預設配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | vim default .conf
server {
listen 80;
server_name localhost;
location / {
root / var /www/html;
index index.html index.htm index.php; # 增加index.php
}
#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 / var /www/html;
}
location ~ \.php$ {
root / var /www/html; # 代码目录
fastcgi_pass phpfpm:9000; # 修改为phpfpm容器
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; # 修改为 $document_root
include fastcgi_params;
}
}
|
登入後複製
設定docker-compose
檔案結構tree
1 2 3 4 5 6 7 8 9 10 11 12 | .
├── docker-compose.yml
├── mysql
│ └── Dockerfile
├── nginx
│ ├── Dockerfile
│ └── conf
│ └── default .conf
├── phpfpm
│ └── Dockerfile
└── res
└── index.php
|
登入後複製
YAML設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | vim docker-compose.yml
nginx:
build: ./nginx
ports:
- "80:80"
links:
- "phpfpm"
volumes:
- /Users/majun/docker/res:/ var /www/html
- /Users/majun/docker/nginx/conf:/etc/nginx/conf.d
phpfpm:
build: ./phpfpm
ports:
- "9000:9000"
volumes:
- /Users/majun/docker/res:/ var /www/html
links:
- "mysql"
mysql:
build: ./mysql
ports:
- "3306:3306"
volumes:
- /Users/majun/docker/mysql/data:/ var /lib/mysql
environment:
MYSQL_ROOT_PASSWORD : root
|
登入後複製
Mysql Dockerfile
Nginx Dockerfile
PHPFPM Dockerfile (這裡直接用上面build過的映像了)
PHP連線Mysql測試
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | vim index.php
header( "Content-type:text/html;charset=utf-8" );
try {
$pdo = new PDO(
"mysql:host=mysql;dbname=test" ,
"root" ,
"root"
);
} catch (PDOException $pe ){
die ( "PDO实例失败!原因:" . $pe ->getMessage());
}
$sql = "select * from test" ;
$stmt = $pdo ->prepare( $sql );
$stmt ->execute();
$res = $stmt ->fetchAll(PDO::FETCH_ASSOC);
var_dump( $res );
|
登入後複製
備註
host需要寫mysql容器名稱
#運行
其他
安裝redis
拉取鏡像
建立容器
1 | docker run -itd -p 6379:6379 redis
|
登入後複製
進入容器偵錯
1 2 3 4 5 | # redis-cli
127.0.0.1:6379> set name 1
OK
127.0.0.1:6379> get name
"1"
|
登入後複製
推薦學習:《
PHP影片教學》
以上是Mac下Docker配置LNMP開發環境的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!