总体思路:在有网络的环境上制作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. 研发LLM模型,如何用数值表示人类自然语言?

    上一篇:<人工智能--自然语言处理简介> 序言:人工智能大语言模型(LLM)如何理解人类的自然语言?这个过程的核心在于将文本转化为计算机能处理的数值形式,经过计算,最终达到对语言的理解.起 ...

  2. 知识分享:Air780E软件之UDP应用示例

    一.UDP概述 UDP(用户数据报协议,UserDatagramProtocol)是一种无连接的.不可靠的传输层协议,主要用于实现网络中的快速通讯.以下是UDP通讯的主要特点: 1.1 无连接通讯: ...

  3. 基于nginx的tomcat负载均衡和集群(超简单)

    今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点. 略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群t ...

  4. 使用gulp 压缩js

    js 编写后文件太大,可以使用gulp 来进行压缩. 具体步骤如下: 1.创建一个工作目录 在该目录下安装 gulp npm install gulp 安装gulp-uglify 模块 npm ins ...

  5. Vue.js 文本行滚动

    1.前言 文本行滚动组件,效果如图 2.封装思路 封装一个组件,接收一个数组,每个数组元素就是一个段文本 组件使用httpVueLoader进行封装加载 使用css位移,配合过渡效果才展示动画 滚动逻 ...

  6. 零基础学习人工智能—Python—Pytorch学习(十一)

    前言 本文主要介绍tensorboard的使用. tensorboard是一个可视化的,支持人工智能学习的一个工具. tensorboard的官方地址:https://www.tensorflow.o ...

  7. 关于 Span 的一切:探索新的 .NET 明星: 3.什么是 Memory<T>,以及为什么你需要它?

    3. 什么是 Memory<T>,以及为什么你需要它? 1. Span<T> 是什么? 2. Span<T> 是如何实现的? 3. 什么是 Memory<T& ...

  8. ORM框架与数据库交互

    title: ORM框架与数据库交互 date: 2024/12/22 updated: 2024/12/22 author: cmdragon excerpt: 对象关系映射(Object-Rela ...

  9. sed 删除 替换 文件内容

      sed添加一行内容 使用sed命令添加一行内容有多种实现方法,下面是几种不同的实现方法: 方法一:使用sed命令在指定行前添加一行内容     sed '2i This is a new line ...

  10. Linux查找某个大小范围内的文件

    查找大小在某个范围内的文件使用-size参数,-size +n表示大于n单位的范围,-size –n表示小于n单位的范围.例如,查找大于100k且小于400k的文件: find . -type f - ...