网上搜了很多 ,但是很多都是抄来抄去, 少了很多重要环节,导致走了很多弯路。
我的环境是 CentOS, 服务器上已经部署了nginx和php ,所以在docker配置的时候经常和容器中的nginx和php搞混了,这次记录下免得又忘了
参照的 https://www.runoob.com/docker/centos-docker-install.html
安装docker
1,设置仓库 。安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2,使用以下命令来设置稳定的仓库。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3,安装最新版本的 Docker Engine-Community 和 containerd
yum install docker-ce docker-ce-cli containerd.io
三步操作完 docker就安装成功了
4,启动docker
sudo systemctl start docker
配置nginx和php
这部分参考了 https://www.jb51.net/article/113296.htm
1,下载相关镜像
docker pull nginx
docker pull php:7.1.0-fpm
2,
建立相关目录
mkdir -p /docker/www
mkdir -p /docker/nginx/conf.d
重点说明下
/docker/www 是映射到容器docker内部的应用目录,名称随意,可以是/test/docker 等等。。 ,跟你本机已有环境中nginx指向的目录没有半毛关系,到时候docker部署完毕,你直接在本机/docker/www目录修改文件,docker容器就会生效
/docker/nginx/conf.d 是映射到容器docker内部的nginx配置目录,修改该文件夹下的配置,那么docker中的nginx也会发生改变,跟你本机的nginx配置目录也没有半毛关系
3,在 /docker/nginx/conf.d 中新建一个文件 default.conf,将以下内容拷贝进去
server {
listen 80 default_server;
server_name _;
root /usr/share/nginx/html;
location / {
index index.html index.htm index.php;
autoindex off;
}
location ~ \.php(.*)$ {
root /var/www/html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
4,启动php镜像
docker run -p 9000:9000 --name myphp \
-v /docker/www/:/var/www/html/ \
--privileged=true \
-d php:7.1.0-fpm
#查看php镜像的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' myphp
172.17.0.2
#修改/docker/nginx/conf.d/default.conf配置文件,使fastcgi_pass的值为 172.17.0.2:9000
#我刚开始也懵逼该配置中 “/usr/share/nginx/html”,“/var/www/html/”指向哪里,其实他就是容器内部的目录 ,无需理会;
vim /docker/nginx/conf.d/default.conf
fastcgi_pass 172.17.0.2:9000;
5,启动nginx镜像
docker run -p 8083:80 --name mynginx \
-v /docker/www:/usr/share/nginx/html \
-v /docker/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-d nginx
"/usr/share/nginx/html" 就是/docker/nginx/conf.d/default.conf里的目录
“/etc/nginx/conf.d” 是docker 容器中nginx的配置的目录 ,反正跟你本地环境没关系
我将本机服务器8083端口映射到docker容器中的80端口,阿里的服务器记得开启安全策略组,将8083端口加入白名单
6,验证