; 创建自定义网络 micro 如果有多个容器实例
docker network create --subnet=172.18.0.0/16 micro
使用 MySQL
先手动建库(库名 pipe
,字符集使用 utf8mb4
,排序规则 utf8mb4_general_ci
),然后启动容器:
; mysql docker
docker run -dit -v /www/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /www/mysql/logs:/logs -v /www/mysql/data:/mysql_data \
-p 3306:3306 --net alpine-net -e MYSQL_ROOT_PASSWORD=123123 \
--name mysql mysql:5.7
获取最新镜像:
docker pull b3log/pipe
运行镜像
docker run -dit -p 5897:5897 --name pipe --network micro --ip 172.18.0.3 \
b3log/pipe --mysql="mysql_user:mysql_passwd@(172.18.0.1:3306)/pipe?charset=utf8mb4&parseTime=True&loc=Local" \
--runtime_mode=prod --server=http://server_ip:port
说明一下遇到的问题:p 5897 是宿主机和容器通信的端口,并非 blog 项目端口
go blog 项目端口 --server=http://server_ip:port
需要开通对应的云服务器 管理防火墙的端口 和 linux firewall 端口
例如 8811 是 web 访问端口,宿主机和容器是 5897,容器中的 blog 应该也是 8811 端口 因为--server 这个地址在访问后会 使用--server=http://server_ip:port 设置的域名/ip+port
upstream pipe{
# pipe blog #这个端口是服务器可通信端口
server 172.18.0.3:5897;
}
server {
# 监听端口
listen 8811;
server_name xxx.xxx.xxx.xxx;
error_log /www/logs/blog.log;
location / {
proxy_pass http://pipe$request_uri;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
}
}
; NGINX Docker
指定容器外部配置 指定配置文件,日志文件,servers,外部端口,连接,网络配置 名称等
docker run -dit -v /www/dockerconf/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /www/dockerconf/nginx/servers:/etc/nginx/servers \
-v /www:/www -p 80:80 -p 8811:8811 --link pipe \
--net micro --ip 172.18.0.5 --name nginx nginx:1.15
docker 安装 PHP
docker pull php:7.1-fpm
docker run -dit -p 9000:9000 \
-v /www/dockerconf/php/php.ini:/usr/local/etc/php/php.ini \
-v /www:/www --link nginx \
-w /www/test \
--net micro --ip 172.18.0.2 \
--name php php:7.3-fpm
编辑对应的nginx
server {
listen 80;
server_name algo.test.com;
root /home/algorithm;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log error;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
fastcgi_pass 172.17.0.3:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
关于`fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name`这个配置,如果你想用`$document_root`变量,那就必须把nginx容器的数据目录与php容器的数据目录弄成一致的,比如我的nginx容器的数据目录是/home/algorithm,在php容器中依然是这个,如果php容器中的目录改变了,不是这个了,那么php容器就会找不到请求的这个文件的。
因为两个容器相当于两套文件系统,路径有可能是不一样的。但是呢,如果你偏要设置成不一样的,那么只能写死地址了,比如弄成这样:`fastcgi_param SCRIPT_FILENAME /home/algorithm/$fastcgi_script_name`,就可以让php容器访问到相应的文件了
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于