当前位置:   article > 正文

docker搭建nginx_docker安装nginx

docker安装nginx

一、安装Docker
1、安装:

yum install docker 


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

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


3、查看docker版本信息

docker version


4、查看所有docker镜像

docker images


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

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


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

docker images


3、创建并运行Nginx容器

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


5、查看Nginx是否部署成功

curl localhost:8050


 

1、进入Nginx容器当中

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



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

whereis nginx


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

exit


4、停止并移除Nginx容器

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


5、本地创建管理目录

  1. mkdir -p /usr/local/nginx
  2. mkdir -p /usr/local/nginx/html 
  3. mkdir -p /usr/local/nginx/conf
  4. mkdir -p /usr/local/nginx/logs


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

  1. docker cp ff6fc:/etc/nginx/nginx.conf /usr/local/nginx/
  2. docker cp ff6fc:/etc/nginx/conf.d /usr/local/nginx/conf/
  3. docker cp ff6fc:/usr/share/nginx/html/ /usr/local/nginx/html/
  4. docker cp ff6fc:/var/log/nginx/ /usr/local/nginx/logs/
  5. 注: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
  1. 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
  2. 这里挂载的路径和端口要明白,不然配置conf文件会乱
  3. 就是
  4. 端口:宿主机8050端口映射docker里nginx容器的80端口,所以我们访问宿主机ip+8050端口,就会映射到docker里nginx容器里的80端口,所以nginx配置文件listen是监听80端口,这个千万不要搞错了
  5. 页面:打包的页面文件夹是build,宿主机页面路径/usr/local/nginx/www/,映射的是docker里nginx容器的/usr/share/nginx/html/路径,所以nginx配置文件
  6. 里的location的/usr/share/nginx/html这个路径不用调整,只需在后面加上部署的前端页面路径,下面就是加上了build,然后前端打包的页面build文件夹放在宿主机的/usr/local/nginx/www/就可以了
  7. location / {
  8. root /usr/share/nginx/html/build;
  9. try_files $uri $uri/ /index.html;
  10. index index.html index.htm;
  11. }
  12. 所以流程是这样,我们输入网址宿主机+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

 宿主机的wlan(使用wifi分配的ip) ip是192.168.1.106(使用网线的可以查看eth0分配的ip)

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

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

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

所以nginx配置后端服务需要这样配置,需要代理到docker0网桥分配的ip:172.17.0.1或者网线分配的ip或者wifi分配的ip:192.168.1.106的后台服务

  1. location /prod-api/ {
  2. proxy_set_header Host $http_host;
  3. proxy_set_header X-Real-IP $remote_addr;
  4. proxy_set_header REMOTE-HOST $remote_addr;
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6. proxy_pass http://172.17.0.1:8081/;
  7. #或 proxy_pass http://192.168.1.106:8081/;
  8. }

最后附上nginx配置文件

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. server {
  11. listen 80;
  12. server_name localhost;
  13. charset utf-8;
  14. location / {
  15. root /usr/share/nginx/html/build;
  16. try_files $uri $uri/ /index.html;
  17. index index.html index.htm;
  18. }
  19. location /prod-api/ {
  20. proxy_set_header Host $http_host;
  21. proxy_set_header X-Real-IP $remote_addr;
  22. proxy_set_header REMOTE-HOST $remote_addr;
  23. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  24. proxy_pass http://172.17.0.1:8081/;
  25. #或 proxy_pass http://192.168.1.106:8081/;
  26. }
  27. error_page 500 502 503 504 /50x.html;
  28. location = /50x.html {
  29. root html;
  30. }
  31. }
  32. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/174185
推荐阅读
相关标签
  

闽ICP备14008679号