Docker使用手册
大纲
1、拉取nginx mysql php的镜像
2、创建本地自定义网络
3、三个镜像在同一个网络内产生容器
4、三个容器就可以互相通信了
4.1、nginx连接fpm
4.2、fpm连接mysqld
5、fpm内安装php扩展
5.1、进入fpm的容器内
5.2 执行 docker-php-ext-install pdo pdo_mysql
5.3 安装redis扩展,详情在下面
6、至此,三个容器之间互相都打通了,可以写一个index.php文件,输出phpinfo或者做一个sql查询,都是可以打通的。
拉取镜像
docker pull nginx
docker pull php:7.2.34-fpm-alpine3.12
docker pull mysql:5.6.35
生成自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 lnmp
查看网络
docker network ls
产生容器
docker run --name my_nginx -p 80:80 -v /var/www:/var/www -v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d -dit --net lnmp --privileged=true 605c77e624dd
docker run -p 9000:9000 --name my_php -v /var/www:/var/www -dit --net lnmp --privileged=true a63e75145178
docker run -p 3306:3306 --name my_mysql -v /usr/local/mysql:/etc/mysql/sqlinit -e MYSQL_ROOT_PASSWORD=123456 -dit --net lnmp --privileged=true a0f5d7301767
进入容器
docker exec -it my_nginx /bin/bash
docker exec -it my_php sh
docker exec -it my_mysql /bin/bash
重启所有容器
要注意启动顺序,php要比nginx先启动才可以
docker restart `docker ps -qa`
查看某个容器的ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' my_php
docker inspect --format='{{.NetworkSettings.IPAddress}}' my_mysql
nginx内设置通信到fpm的方式
1、在conf文件内找到代码块:
location ~ \.php {
····
# my_php 是你的fpm的容器的名字
fastcgi_pass my_php:9000;
····
}
fpm连接mysql时,也是用同样的方式
<?php
header("Content-type:text/html;charset=utf8");
$config = [
'host' => 'my_mysql',
'user' => 'root',
'password' => '123456',
'database' => 'mysql',
'charset' => 'utf8'
];
$dsn = sprintf(
"mysql:host=%s;dbname=%s;charset=%s",
$config['host'],
$config['database'],
$config['charset']
);
$pdo = new PDO($dsn, $config['user'], $config['password'], [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]);
$query = $pdo->query("SELECT version();");
print_r($query->fetchAll());
安装fpm内的redis扩展
docker exec -it my_php sh
curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/5.3.6.tar.gz
tar xfz /tmp/redis.tar.gz
rm -r /tmp/redis.tar.gz
mkdir -p /usr/src/php/ext
mv phpredis-5.3.6 /usr/src/php/ext/redis
docker-php-ext-install redis