继上一篇文章:linux下安装docker 本篇为在linux的docker下安装nginx,并完成反向代理到项目。 整个效果如下:

docker中拉取nginx并简单启动运行

//docker拉取ngnix

docker pull nginx

//运行nginx 以80端口运行

docker run --name=nginx -p 80:80 -itd nginx:latest

//查看正在运行的镜像

docker ps

//使用curl访问 由于是80端口 直接访问宿主机ip即可

curl 宿主机ip

出现此画面表示nginx已经运行ok了。

修改nginx配置文件添加server节点来反向代理项目

在容器内部修改nginx配置

//通过模糊查找命令获取nginx配置文件所在路径

find / -name 'nginx.conf'

//进入nginx容器内部 如果需要退出来使用exit

docker exec -it nginx /bin/bash

//修改配置 vim命令容器内部安装有点问题源不能访问配置镜像也不太行

vim /etc/nginx/nginx.conf

容器内部vim命令安装

//更新源

apt update

//安装vim 如果源无法访问重新修改一下镜像源 再执行 如果还不行就采用把文件从容器拷贝到宿主机修改

apt-get install vim

出现异常:

修改镜像源

//备份

mv /etc/apt/sources.list /etc/apt/sources.list.bak

echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list

echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list

echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list

修改后仍然不行放弃吧

把容器内部的nginx配置拷贝到宿主机修改

//创建多个文件夹

mkdir -p \

/tmp/docker-nginx/html \

/tmp/docker-nginx/conf \

/tmp/docker-nginx/ \

/tmp/docker-nginx/logs/

//通过cp命令从容器中拷贝文件到宿主机 放在/tmp下面

docker cp nginx:/etc/nginx/nginx.conf /tmp/docker-nginx/

docker cp nginx:/etc/nginx/conf.d/ /tmp/docker-nginx/conf/

docker cp nginx:/usr/share/nginx/html/ /tmp/docker-nginx/html/

docker cp nginx:/var/log/nginx/ /tmp/docker-nginx/logs/

删除nginx容器镜像 并以外部配置文件运行

删除nginx镜像

//查看运行的容器

docker ps

//删除容器

docker rm -vf nginx

//查看镜像

docker images

//删除镜像

docker rmi nginx

以外部配置文件运行nginx

// -v 后面 外部文件地址:docker容器nginx内部文件地址 参考上面拷贝到宿主机的地址一一对应 这里最容易出错误

docker run -d --name nginx -p 80:80 -v /tmp/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /tmp/docker-nginx/logs:/var/log/nginx -v /tmp/docker-nginx/html:/usr/share/nginx/html -v /tmp/docker-nginx/conf:/etc/nginx/conf.d nginx

//curl 宿主机地址

运行正常但是拒绝访问 这时候我们需要修改配置文件nginx.conf 添加server 80节点,nginx部署的docker这里面没有80节点,这一步非常重要!!!

server {

listen 80;

location / {

index index.html index.htm;

}

}

//重启docker服务

docker restart 容器id

再次使用curl命令,出现404反馈表示nginx已经部署完成,由于是随便配置的对应页面找不到所以反馈404,具体对应的页面自己参考nginx如何配置,这里不讲解

修改nginx.conf配置项目转发的节点并为nginx增加多个端口映射

//查看docker容器ip 找到docker0即可

ifconfig

在nginx中添加转发节点

upstream ods

{

server 172.17.0.1:8888;//172.17.0.1表示docker容器的ip 你也可以使用对应项目容器名称 如果使用宿主机ip会出现502异常

}

server

{

listen 7776;

location /

{

proxy_pass http://ods;//这里对应upstream ods

proxy_set_header Host $host:$server_port;

}

}

按照上面的删除nginx镜像,指定多端口启动

//-p 宿主机端口:nginx的server节点监听端口

docker run -d --name nginx -p 80:80 -p 7776:7776 -v /tmp/docker-nginx/nginx.conf:/etc/nginx/nginx.conf -v /tmp/docker-nginx/logs:/var/log/nginx -v /tmp/docker-nginx/html:/usr/share/nginx/html -v /tmp/docker-nginx/conf:/etc/nginx/conf.d nginx

如果出现访问不了,建议向防火墙添加端口 并重启防火墙即可

至此docker里面配置nginx在代理简单项目结束。

查看原文