docker创建自定义网络代替--link 让容器互通     


创建网络

#--privileged=true --restart=always 
docker network create --subnet=172.18.0.0/16 mynetwork  
docker network ls   
#docker network rm mynetwork

安装php、nginx

docker run --name php7.4.22-fpm -v /d/docker/docker-php/nginx/www:/www --network mynetwork --ip 172.18.0.2 -d php:7.4.22-fpm    
docker run --name php-nginx -p 8888:80 -v /d/docker/docker-php/nginx/www:/usr/share/nginx/html -v /d/docker/docker-php/nginx/conf:/etc/nginx/conf.d -v /d/docker/docker-php/nginx/logs:/var/log/nginx --network mynetwork --ip 172.18.0.3 -d nginx  
    
server {    
    listen       80;    
    server_name  localhost; 
    
    location / {    
        root   /usr/share/nginx/html;   
        index  index.html index.htm index.php;  
    }   
    
    
    error_page   500 502 503 504  /50x.html;    
    location = /50x.html {  
        root   /usr/share/nginx/html;   
    }   
    
    location ~ \.php$ { 
        fastcgi_pass   172.18.0.2:9000;#注意如果是network方式这里需要写php容器的IP 
        fastcgi_index  index.php;   
        fastcgi_param  SCRIPT_FILENAME  /www/www1/$fastcgi_script_name;#这里的路径也需要注意  
        include        fastcgi_params;  
    }   
}

安装redis、mysql

docker run --name redis6 -p6379:6379 -v /d/docker/docker-php/redis6/data:/data -v /d/docker/docker-php/redis6/redis.conf:/usr/local/etc/redis/redis.conf --network mynetwork --ip 172.18.0.5 -d redis:latest redis-server /usr/local/etc/redis/redis.conf --appendonly yes  
#docker run --name mysql57 -p3307:3307 -e MYSQL_ROOT_PASSWORD=root --network mynetwork --ip 172.18.0.4 -d mysql:5.7.35  
docker run --name mysql57 -p3307:3306 -e MYSQL_ROOT_PASSWORD=root --network mynetwork --ip 172.18.0.4 -d mysql:5.7.35   
#注意上面用的-p3307:3307外部宿主机不能连接,容器内还是用默认端口吧,宿主机端口随便  
use mysql
select host,user from user;
alter user 'root'@'%' identified with mysql_native_password by 'root';
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
flush privileges;

#注意mysql有个坑,连接数据库不能使用127.0.0.1:3307,	
#控制器中写查询就会报SQLSTATE[HY000] [2002] Connection refused	

DB_CONNECTION=mysql
DB_HOST=mysql57
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

#要改成容器的名字mysql57端口号是容器内的端口号,或者将host设置成mysql容器的ip:172.18.0.4端口3306

php多版本共存

docker run --name php8 -v /d/docker/docker-php/php8:/www -p 9100:9000 --network mynetwork --ip 172.18.0.6 -d php:8.0.9-fpm	

server {
    listen       80;
    server_name  local-www3.com;

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



    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   172.18.0.6:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
#php8目录下创建php文件即可访问	

swoole扩展

curl -L -o swoole.tgz https://pecl.php.net/get/swoole-4.7.0.tgz
tar -zxvf swoole-4.7.0.tgz
mkdir -p /usr/src/php/ext
mv swoole-4.7.0/ /usr/src/php/ext/swoole
docker-php-ext-install swoole