docker搭建nginx

一、安装Docker
1、安装:

yum install docker 


2、启动/停止/重启docker服务

systemctl docker start 
systemctl docker stop 
systemctl docker restart
#开机自启动 
systemctl enable docker
#设置容器自启动
1.创建容器时设置
docker run -d --restart=always --name 设置容器名 使用的镜像
(上面命令  --name后面两个参数根据实际情况自行修改)# Docker 容器的重启策略如下:--restart具体参数值详细信息:no        // 默认策略,容器退出时不重启容器;on-failure    // 在容器非正常退出时(退出状态非0)才重新启动容器;on-failure:3    // 在容器非正常退出时重启容器,最多重启3次;always      // 无论退出状态是如何,都重启容器;unless-stopped  // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。2.修改已有容器,使用update
#如果创建时未指定 --restart=always,可通过update 命令设置
docker update --restart=always 容器ID(或者容器名)
(容器ID或者容器名根据实际情况修改)


3、查看docker版本信息

docker version


4、查看所有docker镜像

docker images


二、安装Nginx
1、拉取Nginx镜像文件

docker pull [镜像名]:[版本号]  //版本号可省略,省略会下载最新版本
例如:
docker pull nginx //下载最新的Nginx镜像


2、查看下载好的镜像文件  

docker images


3、创建并运行Nginx容器

docker run -d --name nginx01 -p 8050:80 nginx
命令详解:
# docker run 启动一个镜像
# -d 表示后台允许
# --name nginx01  表示为当前容器起一个别名
# -p 8050:80 表示将本机的8050端口映射到nginx镜像的80端口
4、查看正在运行的容器
docker ps


5、查看Nginx是否部署成功

curl localhost:8050


 

1、进入Nginx容器当中

docker exec -it nginx /bin/bash
命令详解:
# docker exec 在运行的容器中执行命令
# -i 以交互模式运行容器,通常与 -t 同时使用;例如-it
# -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;例如-it
# nginx 容器名
# /bin/bash 其实就是表示载入容器后运行bash(命令语言解释程序), 因为docker中必须要保持一个进程(运行的程序)的运行,要不然整个容器就会退出,所以说,bash就担任起了docker中运行的那个进程的角色!
#而/bin/bash则是bash在linux下的位置



2、在容器中查询出nginx的相关配置文件存放位置

whereis nginx


3、退出容器,回到本地linux系统

exit


4、停止并移除Nginx容器

docker stop ff6fc #停止容器,容器id可不用写全,只要写到能识别到唯一一条就可以
docker rm ff6fc #移除容器
# bedfd2a72585表示容器的ID,即:CONTAINER ID


5、本地创建管理目录

mkdir -p /usr/local/nginx
mkdir -p /usr/local/nginx/html 
mkdir -p /usr/local/nginx/conf
mkdir -p /usr/local/nginx/logs


6、将容器中的相应文件copy到刚创建的管理目录中

docker cp ff6fc:/etc/nginx/nginx.conf /usr/local/nginx/
docker cp ff6fc:/etc/nginx/conf.d /usr/local/nginx/conf/
docker cp ff6fc:/usr/share/nginx/html/ /usr/local/nginx/html/
docker cp ff6fc:/var/log/nginx/ /usr/local/nginx/logs/
注:docker cp ff6fc中的 "ff6fc" 为容器ID(docker ps可查看),也可换成容器名,例如上面容器名是nginx,可写成 docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/  ,但是要区分唯一性


7、再次启动容器并作目录挂载

docker run --name nginx -p 8050:80 -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/www/:/usr/share/nginx/html/ -v /usr/local/nginx/logs/:/var/log/nginx/ -v /usr/local/nginx/conf/:/etc/nginx/conf.d --privileged=true -d nginx
docker run --name nginx -p 8050:80 -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/www/:/usr/share/nginx/html/ -v /usr/local/nginx/logs/:/var/log/nginx/ -v /usr/local/nginx/conf/:/etc/nginx/conf.d --privileged=true -d nginx
这里挂载的路径和端口要明白,不然配置conf文件会乱
就是
端口:宿主机8050端口映射docker里nginx容器的80端口,所以我们访问宿主机ip+8050端口,就会映射到docker里nginx容器里的80端口,所以nginx配置文件listen是监听80端口,这个千万不要搞错了
页面:打包的页面文件夹是build,宿主机页面路径/usr/local/nginx/www/,映射的是docker里nginx容器的/usr/share/nginx/html/路径,所以nginx配置文件
里的location的/usr/share/nginx/html这个路径不用调整,只需在后面加上部署的前端页面路径,下面就是加上了build,然后前端打包的页面build文件夹放在宿主机的/usr/local/nginx/www/就可以了
location / {root   /usr/share/nginx/html/build;try_files $uri $uri/ /index.html;index  index.html index.htm;}所以流程是这样,我们输入网址宿主机+8050端口会映射到nginx配置文件80端口,然后nginx80端口是监听的,于是就会走到“localtion / ”这个位置,然后会定位到/usr/share/nginx/html/build这个路径,又因为/usr/share/nginx/html/相当于宿主机/usr/local/nginx/www/,所以最终会去宿主机/usr/local/nginx/www/build找到页面,所以我们的页面文件夹build需要放在/usr/local/nginx/www/这里

 后端服务:因为现在nginx是部署在docker容器里,后台服务部署在宿主机里,基于docker和宿主机通信是通过搭建新的网关桥docker0网桥,我们可以通过docker inspect nginx(容器名或容器id)看到nginx的ip是172.17.0.4

 查看宿主机在docker0网桥下的所属ip是172.17.0.1

 基于docker和宿主机通信是通过搭建新的网关桥docker0网桥

需要注意的一点就是,即使ping通了,docker里nginx的容器最好进行telnet测试一下能否连通宿主机的后端端口

若不通,就要看看宿主机是否防火墙是否开放这个端口

所以nginx配置后端服务需要这样配置,需要代理到172.17.0.1的后台服务所部署的宿主机在docker0网桥下的ip

location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://172.17.0.1:8081/;}

最后附上nginx配置文件

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;charset utf-8;location / {root   /usr/share/nginx/html/build;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://172.17.0.1:8081/;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到1ES集群搭建实践

ES集群搭建实践 虚拟机安装 下载地址 Windows & Linux:WMware Workstation 16 Pro MacOS:WMware Fusion 构建CentOS镜像 下载系统镜像 下载地址:https://centos.org/download/ 选择符合符合你电脑的指令集版本,比如我的…

6月琐碎但值得的事情

6月份又过了,又到了每月总结的的时间,说实话我还挺喜欢这种方式,每个月固定的事情做。 老规矩分享一些自己每个月的一些琐碎经历,不一定对也不高大上,但是如果对你有一些启发就最好不过了。 6月主要两件事:…

SpringBoot项目做成Docker 镜像

1.使用Xshell5使用 put指令上传到Centos put D:\git\repository_idea\emsms\target\emsms-0.0.1-SNAPSHOT.jar 2.编辑文件 vim spring ROM java:8 ADD emsms-0.0.1-SNAPSHOT.jar dd.jar CMD java -jar dd.jar 示例: 3.退出并保存编辑 4.将文件打包成镜像 dock…

技术讨论:我心中TOP1的编程语言

欢迎关注博主 六月暴雪飞梨花 或加入【六月暴雪飞梨花】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术…

03双向链表

双向链表 单向链表的缺点 单向链表,只能是一个方向来查找,而双向链表可以向前或者向后查找。单向链表不能自我删除,需要靠辅助结点。而双向链表可以自我删除。所以我们单链表删除结点的时候,总要找到temp(待删除结点…

空间曲线的切线和法平面与曲面的切平面和法线

(一)空间曲线的切线和法平面 1. 参数方程的形式 理解和记忆如下公式: 参数方程在知道偏导数的情况下,得到该点的切线以及法平面的公式,笔者可以理解但是无法证明。 2. 可以转换为参数方程的第二种形式&#xff1a…

从入门到精通:解锁Linux开发工具和编译器的力量

目录 一.编辑器vim的使用1.vim的基本概念2.vim的使用二.编译器gcc/g1.编译器的使用2.编译器是如何完成的?3.动态库与静态库 一.编辑器vim的使用 1.vim的基本概念 vim是一个方便编程的功能特别丰富的文本编辑器,凭借他简洁的三种模式以及丰富的快捷键操…

MySQL进阶SQL语句(二)

MySQL进阶SQL语句(二) 一、MySQL进阶SQL语句1.1 连接查询1.2 CREATE VIEW视图,可以被当作是虚拟表或存储查询1.3 UNION 联集1.4 CASE1.5 空值(NULL) 和 无值() 的区别1.6 正则表达式 二、存储过程2.1 存储过程定义2.2 存储过程的优点2.3 存储…

PySpark如何输入数据到Spark中?【RDD对象】

PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类的对象RDD全称为弹性分布式数据集(Resilient Distributed Datasets),PySpark针对数据的处理,都是以RDD对象作为载体,即: •数据存储…

java面试Day13

1. 有哪些注解可以注入 Bean?Autowired 和 Resource 的区别? 在 Spring 框架中,常用的注入 Bean 的注解包括: Autowired:自动注入,按照类型自动装配,如果有多个同类型的 Bean,则需要…

手撕code(3)

文章目录 迷宫最短路径和输出深度优先广度优先 48 旋转矩阵图像大数加减法146 LRU 缓存算法460 LFU 缓存算法 迷宫最短路径和输出 给定一个 n m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1 ,其中 0 表示可以走的路,1…

软考A计划-系统集成项目管理工程师-项目整体管理-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…