总体思路:在有网络的环境上制作Nginx的镜像包,导出并上传至无网络的环境上,启动Nginx即可。

   在上一篇 《无网环境Docker Rpm离线安装》 里面,已经在联网的机器上安装好了干净的docker环境,接下来就可以安装自己需要的软件镜像了。

docker镜像保存成 tar 归档文件(导出nginx离线镜像包)

  • 1,通过docker search : 从Docker Hub查找需要的镜像。

从 Docker Hub 查找所有镜像名包含 nginx,并且收藏数大于 10 的镜像:sudo docker search -f stars=10 nginx如下:



图中第一行列出的是官方发布的nginx镜像。

列字段说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

  • 2,拉取镜像。

通过docker pull : 从镜像仓库中拉取或者更新指定镜像:sudo docker pull nginx 如下:



说明: 如果:后不写版本号,则默认拉取最新的。如图实际拉取的是标签为tag: latest的nginx:latest镜像。

  • 3,创建容器并启动nginx

拉取下来镜像后还需要创建容器并启动nginx才能使用。

# 创建nginx容器并指定映射端口
sudo docker run -d --name nginx_docker -p 8080:80 nginx:latest

说明:

-d: 后台运行容器

-p :指定容器暴露的端口,映射宿主机端口号和容器端口号

--name:指定容器名字,后续可以通过名字进行容器管理

如图:

如果想删除docker容器可以执行:sudo docker rm -f nginx_docker 后面的参数可以是镜像ID或名称。

  • 4,访问测试nginx

浏览器中输入你的ip地址 + 端口号,如下图所示:(成功状态)

  • 5,创建宿主机配置文件(用于后续挂载nginx配置文件)
 cd /usr/local/
mkdir nginx
cd nginx/
mkdir -vp data html logs ssl conf/conf.d
ll

如图:

说明:

data:资源数据

html:静态资源,一般前端页面

logs:nginx日志

ssl:SSL证书(https)

conf:nginx配置,一般配置缓存、限流在这个里面

conf.d: nginx配置,代理、转发、负载、集群

  • 5.1,编辑html文件夹下的index.html

cd /usr/local/nginx/html/

sudo vi index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>成功访问nginx</title>
</head>
<body>
<h1>这是用docker启动的</h1>
</body>
</html>
  • 5.2,编辑conf文件夹下的nginx.conf

cd /usr/local/nginx/conf/

sudo vi nginx.conf

user  nginx;
worker_processes 1; error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; events {
worker_connections 1024;
} http {
include /etc/nginx/mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"'; access_log /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on; keepalive_timeout 65; #gzip on; map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
} include /etc/nginx/conf.d/*.conf;
}
  • 5.3,编辑conf.d文件夹下的host.conf

cd /usr/local/nginx/conf/conf.d/

sudo vi host.conf

# http转发到后端http
server {
listen 8081;
server_name 10.90.5.70; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto "http";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade; location / {
proxy_redirect off;
proxy_pass http://10.90.5.70:8081/;
} }
  • 6,创建新的容器并挂载宿主机配置文件启动nginx(开一个相同的服务,端口号不同)

    创建新的nginx容器并启动后验证。
# 创建nginx容器并指定映射端口
sudo docker run -d -p 8081:80 --name nginx_docker_2 --restart=always --privileged=true -v /usr/local/nginx/html:/usr/share/nginx/html nginx:latest

如图:



说明:

-d: 后台运行容器

-p :指定容器暴露的端口,映射宿主机端口号和容器端口号

--name:指定容器名字,后续可以通过名字进行容器管理

--restart=always:使容器自动启动

--privileged=true:开启特权模式(如遇到权限问题错误,可加此参数)

-v:挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录

  • 7,测试(挂载宿主机配置文件)

浏览器中输入你的ip地址 + 端口号,如下图所示:(成功状态)

  • 7.1,进入nginx容器查看版本
# 进入nginx容器
sudo docker exec -it nginx_docker_2 bash
# 查看版本
nginx -v

如图:

  • 8,停止并删除容器(测试完废弃了就可以删除)
# 停止并删除容器(容器ID或名称都行)
sudo docker rm -f 97c4b81efbc8
sudo docker rm -f nginx_docker_2
  • 9,docker镜像保存成 tar 归档文件(导出nginx离线镜像包)
# 进入nginx容器
sudo docker save -o nginx-v1.23.2-dockerimage.tar nginx:latest

如图:

将镜像包.tar上传至无网络的环境上创建并启动

  • 1,将镜像包nginx.tar上传至无网络的环境上执行导入。

    docker load : 导入使用 docker save 命令导出的镜像。执行:
# 在.tar所在位置执行
sudo docker load -i nginx-v1.23.2-dockerimage.tar
# 检查本地镜像仓库
sudo docker images

如图(成功):

  • 2,直接创建并启动nginx

    命令:
# 建议提前创建本地映射目录及配置文件,前面讲过这里不再赘述。
sudo docker run -dit --name nginx_docker -p 8080:80 -p 8081:8081 -p 8443:443 --add-host web1.test.com:10.90.3.101 --add-host web2.test.com:10.90.3.102 --restart=always --privileged=true -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/conf/conf.d/:/etc/nginx/conf.d -v /usr/local/nginx/log:/var/log/nginx -v /usr/local/nginx/html:/usr/share/nginx/html -v /usr/local/nginx/ssl:/etc/nginx/cert nginx:latest # 上面那一行命令太长不方便阅读,可以改成多行形式(每行末尾反转义换行符),效果是一样的。
sudo docker run -dit --name nginx_docker \
-p 8080:80 \
-p 8081:8081 \
-p 8443:443 \
--add-host web1.test.com:10.90.3.101 \
--add-host web2.test.com:10.90.3.102 \
--restart=always \
--privileged=true \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d/:/etc/nginx/conf.d \
-v /usr/local/nginx/log:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/ssl:/etc/nginx/cert \
nginx:latest # 检查容器运行状态
sudo docker ps -a

如图:



查看容器日志:

说明:

-d: 后台运行容器

-i: 以交互模式运行容器,通常与 -t 同时使用;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

-p :指定容器暴露的端口,映射宿主机端口号和容器端口号。指定端口映射,格式为:主机(宿主)端口:容器端口

--volume , -v: 绑定一个卷(本地路径或文件映射)

--name:指定容器名字,后续可以通过名字进行容器管理

--restart=always:使容器自动启动

--privileged=true:开启特权模式(如遇到权限问题错误,可加此参数)

--add-host:使用docker run的--add-host命令选项,将要访问的其他服务器的host和ip加入到/etc/hosts文件。--add-host命令选项表示,在启动容器时,向/etc/hosts文件添加一个host:ip的映射。

  • 3,测试

浏览器中输入你的ip地址 + 端口号,如下图所示:(成功状态)

重启docker容器里的nginx服务

如果修改了nginx配置文件,需要重启服务才能生效。

方法一:通过docker命令重启

sudo docker exec nginx_docker sh -c "nginx -t"
sudo docker exec nginx_docker sh -c "nginx -s reload"

如图:

方法二:进入docker容器内执行nginx命令重启

sudo docker exec -it nginx_docker sh
nginx -t
nginx -s reload

Docker离线部署Nginx的更多相关文章

  1. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  2. Docker Compose部署 nginx代理Tomcat集群

    一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...

  3. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  4. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...

  5. Docker应用部署(Nginx、Tomcat)

    Docker hub官方链接: https://hub.docker.com 部署Nginx 官方已经给出了方法: https://hub.docker.com/_/nginx 运行容器 $ dock ...

  6. Linux运维之docker虚拟化部署nginx

    一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  7. docker stack 部署nginx

    =============================================== 2018/7/29_第1次修改                       ccb_warlock == ...

  8. Docker(二)-在Docker中部署Nginx实现负载均衡(视频教程)

    本教程介绍利用Docker部署Nginx服务实现负载均衡. (双击全屏播放)

  9. docker - compose 部署 Nginx

    主要介绍 docker 中 Nginx 的部署及项目目录挂载券的方法.docker 中部署一个服务,有三种方法,分别是 docker run.Dockerfile.docker-compose . 下 ...

  10. Docker 06 部署Nginx

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

随机推荐

  1. 编写一个基础的dockerfile

    编写简单的dockerfile FROM GaohongYu/centos7.5-yum:latest MAINTAINER GaoHongYu COPY *.repo /etc/yum.repos. ...

  2. 基于Java+SpringBoot心理测评心理测试系统功能实现五

    一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...

  3. pycharm配置默认镜像地址

    使用pycharm编写接口自动化测试时,需要下载很多安装包,不指定镜像时下载可能很慢,可以设置默认镜像 命令:pip config set global.index-url 镜像地址 查看已设置的默认 ...

  4. git 阻止在某个分支上面提交commit

    比如在开发中不希望master分支被commit做提交,那么我们可以这样做 找到 .git/hook/文件夹 然后在里面复制一个 pre-commit出来 cd .git/hooks/ cp pre- ...

  5. python之常用方法(精)

    查找列表中出现最频繁的元素 使用 max() 函数可以快速查找出一个列表中出现频率最高的某个元素. >>> a = [1, 2, 3, 4, 3, 4, 5, 4, 4, 2] &g ...

  6. Linux终端命令之screen

    screen的功能 screen的功能大体有三个: 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复.这一点对于远程登录的用户特别有用--即使网络连接中断,用户也不会失去对已经打开 ...

  7. Linux之搭建sftp

    0.查看openssh的版本 ssh -V #使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级.   1.创建sftp组 groupadd sftp   ...

  8. uniapp+vue3酒店预订|vite5+uniapp预约订房系统模板(h5+小程序+App端)

    自研uni-app+vue3+uv-ui跨三端仿同程/携程酒店预订系统Uni-Vue3-WeTrip. uniapp-vue3-wetrip原创基于vite5+uniapp+pinia2+uni-ui ...

  9. vue3和elements创建应用

    一. 创建环境 1. 创建D:\code\vue 文件夹 2. vscode打开文件夹 3. 打开终端,输入 npm install -g @vue/cli 4. 配置环境变量 终端输入:npm co ...

  10. 【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径

    步骤1:设置文本框属性 设置文本框属性,将属性AllowDrop改为True 使其允许拖拽文件 步骤2: 在控件事件管理中双击DragEnter,添加事件 private void Form_sett ...