news 2026/7/15 14:34:05

Linux内网使用docker启动nginx或者直接使用nginx

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux内网使用docker启动nginx或者直接使用nginx

使用docker启动nginx

1、在服务器上安装docker

  1. 在有网环境下,下载 docker 安装包,包名为docker-xx.x.x.tgz。下载地址:Index of linux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/
  2. 将下载的包上传到服务器并解压
    # 解压命令 tar -zxvf docker-xx.x.x.tgz
  3. 将解压的docker目录拷贝到/usr/bin目录下
    # 拷贝,移动请用 mv 命令 cp docker/* /usr/bin/
  4. 将docker注册为系统服务,便于启动。创建文件 /etc/systemd/system/docker.service并添加如下内容:
    [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com [Service] ExecStart=/usr/bin/dockerd Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target
  5. 给docker.service添加可执行权限,并重新加载systemd配置,使新创建的docker服务立即生效
    # 给 docker.service 添加可执行权限 chmod 777 docker.service # 重新加载配置文件 systemctl daemon-reload
  6. 启动docker服务并查看服务状态

    Tip:第4、5步成功了才可以使用下面这些命令
    # 启动docker systemctl start docker # 查看docker状态 systemctl status docker # docker 重启 systemctl restart docker # 停止 docker systemctl stop docker # docker 开机自启 systemctl enable docker
  7. 安装完成,执行如下命令可验证是否成功安装
    #查看 Docker 客户端和服务器的版本信息 docker -v #查看 Docker 系统的详细信息,包括容器、镜像、存储驱动、网络等的配置和统计信息 docker info

2、准备nginx镜像文件(有网环境)

  1. 使用docker拉取nginx镜像
    # 拉取 nginx 的最新版本 docker pull nginx # 查询指定版本 ## 未启动容器时 docker image inspect nginx:latest | grep -i version ## 启动容器时,nginx-cms 是容器名称 docker exec nginx-cms nginx -v # 拉取指定版本的 nginx docker pull nginx:1.21.1
  2. 使用docker打包nginx镜像文件
    # 参数说明 -o :输出到的文件(nginx.tar) docker save nginx:1.24.0 -o nginx.tar ## 如果拉取时未指定版本,那么执行以下任意一条命令 docker save nginx -o nginx.tar docker save nginx:latest -o nginx.tar

3、在服务器上安装nginx

  1. 将镜像文件nginx.tar上传到服务器,使用docker加载镜像文件
    # 导入镜像 参数说明 --input , -i : 指定导入的文件 docker load -i nginx.tar
  2. 查看是否有nginx镜像
    # 查看当前docker装好的镜像 docker images

4、在服务器上运行nginx并配置挂载点

  1. 随便取个容器名启动nginx,用于将容器内的nginx配置拷贝到宿主机
    # 运行。-d 在后台运行 -p 端口映射 宿主机端口:容器端口 --name 容器名称 docker run -d -p 80:80 --name nginx-test nginx # PS # 查看当前运行的容器 docker ps # 查看当前创建的容器,包含运行、停止的容器等 docker ps -a
  2. 进入容器内部,查看配置文件路径,然后退出容器开始拷贝
    # nginx-test 容器名称 /bin/bash 敲命令的方式,类似未进入容器前一样 docker exec -it nginx-test /bin/bash # PS nginx # 配置文件默认存放在 /etc/nginx # 日志文件默认存放在 /var/log/nginx # 项目文件默认存放在 /usr/share/nginx/html # 退出容器 exit # 拷贝目录至宿主机 nginx-test 容器名称 /etc/nginx 容器路径 /data/nginx 宿主机路径 docker cp nginx-test:/etc/nginx /data/nginx docker cp nginx-test:/var/log/nginx /data/logs docker cp nginx-test:/usr/share/nginx/html /data/html # Tips # 配置文件若不想拷贝nginx目录,也可以拷贝 conf.d 目录,此处拷贝只是想拷贝全看的舒服些
  3. 将自定义的nginx配置文件上传到服务器的 /data/nginx/conf.d 目录下,如图:

  4. 删除先前创建的容器,创建新的容器,并配置挂载点,以及容器自启
    # 删除容器 nginx-test 容器名称 docker rm -f nginx-test # 创建容器并设置挂载点 # -p 配置映射端口 宿主机端口:容器端口,若有多个配置文件,要暴露多个端口,则重复几遍,如下即可 # --restart always docker启动,容器则自启 # -v 配置挂载点 宿主机目录:容器目录 docker run -d -p 80:80 -p 8080:8080 --restart always --name nginx -v /data/nginx:/etc/nginx -v /data/html:/usr/share/nginx/html -v /data/logs:/var/log/nginx nginx # 若是 docker run 时忘了设置自启,则执行以下命令 # nginx-test 容器名称 docker update --restart=always nginx-test
  5. 使用 docker ps 如下图所示,表示成功。或者访问页面即可

5、注意点

  1. 所有配置均已容器中路径、端口为主,宿主机的配置只是为了便于操作和访问,比如:
    例1:-p 8083:8080 自定义配置文件 custom.conf listen 配置就是 8080,页面访问就是 8083 例2:/data/html:/usr/share/nginx/html 自定义配置文件 custom.conf root 配置就是 /usr/share/nginx/html/dist, 千万不能配置 /data/html,/data/html就是给存放项目文件的,例如dist包等
  2. 若有多个端口需要映射,如:-p 80:80 -p 81:81 ;需要几个重复几个即可。由于容器互相都是独立的,所以容器端口可以重复,但宿主机只有一个,所以宿主机端口不能与其他容器映射的端口重复
  3. 只有第一次创建容器时用 docker run 命令,后续启动可用以下命令
    # 启动容器 docker start nginx-test # 重启容器 docker restart nginx-test # 停止容器 docker stop nginx-test
  4. 只有docker run 时才能配置端口映射和挂载点等,若是配置少了或是后续更新增加了,则需先查看挂载点,然后删除,再docker run 配置相同挂载点并增加所需的配置
    # 查看容器挂载点 # docker inspect 容器名称 查看容器信息 # | grep Mounts -A 20 只查看挂载信息并且只展示20行 docker inspect nginx-test| grep Mounts -A 20

6、命令总结

# 解压命令 tar -zxvf docker-xx.x.x.tgz # 拷贝命令 cp 拷贝的文件/目录 粘贴的文件/目录 # 移动命令 mv 移动的文件/目录 存放移动文件/目录的位置 # 授权命令 -R 可选,将目录下的所有文件(子目录,子子目录等)全部授权 chmod 777 -R 目录/文件 # 重新加载系统服务文件 systemctl daemon-reload # 启动docker命令 systemctl start docker # 查看docker状念 systemctl status docker # 重启docker systemctl restart docker # 停止 docker systemctl stop docker # docker 开机自启 systemctl enable docker # 查看docker版本 docker -v # 拉取nginx镜像 docker pull nginx # 查看nginx版本号 docker image inspect nginx | grep -i version # 启动容器后也可以这样查看nginx版本,nginx-test 容器名称 docker exec nginx-test nginx -v # 打包nginx的镜像文件 docker save nginx:版本号 -o 文件名.tar # 若拉取时未指定版本 docker save nginx -o 文件名.tar # 加载nginx镜像文件 docker load -i 文件名.tar # 将容器打成镜像文件 new-nginx-test 是镜像名字,tag是镜像标签,如latest docker commit nginx-test new-nignx-test:tag # 将文件打成镜像文件 如 dockerfile new-image-dockerfile 镜像名 . 表示当前目录 -t 指定镜像的名称和标签 tag同上,可省略 docker build -t new-image-dockerfile:tag . # 查看当前docker安装的镜像 docker images # 删除镜像 docker rmi [镜像名 | 镜像ID] # 查看当前docker运行的容器 docker ps # 查看当前docker创建的容器,包含启动、停止等容器 docker ps -a # 查看容器日志 docker logs nginx-test # 创建并启动容器 -d 后台运行 -p 映射端口 宿主机端口:容器端口 --name 容器名称 docker run -d -p 80:80 --name nginx-test nginx # 创建并启动容器,以及开启自启动 # --restart 一共4个值,如下: # no:不自动重启容器(默认值) # always:容器退出时总是重启 # on-failure[:max-retries]:容器以非零状态码退出时重启,可指定最大重试次数(若不指定,则无限重试) # unless-stopped:无论退出状态如何,总是重启容器,但当容器被手动停止时不重启 docker run -d -p 80:80 --restart always --name nginx-test nginx # 创建并启动容器,以及开启自启动和配置挂载点 -v 配置挂载点 宿主机目录:容器目录 docker run -d -p 80:80 -p 8080:8080 --restart always --name nginx -v /data/nginx:/etc/nginx -v /data/html:/usr/share/nginx/html -v /data/logs:/var/log/nginx nginx # 创建容器时未开启自启,则使用这一条命令 nginx-test 容器名称 docker update --restart=always nginx-test # 进入容器 docker exec -it nginx-test /bin/bash # 退出容器 exit # 删除容器 docker rm -f nginx-test # 将容器目录拷贝到宿主机目录 docker cp nginx-test:/etc/nginx /data/nginx # 查看容器挂载点 docker inspect nginx-test | grep Mounts -A 20 # 导出指定数据库,回车输入密码即可 mysql-container 容器名 mysqldump 固定参数 root 用户名 dataname 数据库名 dataname.sql 导出的名称 docker exec -it mysql-container mysqldump -u root -p dataname > dataname.sql # 导入指定数据库 docker exec -i mysql-container mysql -u root -p dataname < dataname.sql ## 补充docker pull拉取源配置 # vi /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://mirror.ccs.tencentyun.com" ] }

7、编写一个基本的dockerfile文件

# Version 1.0.0 # 镜像 FROM nginx # 将宿主机的conf文件拷贝到容器中,所有宿主文件路径以dockerfile路径为准,只能顺位,不能 ../ 和绝对路径,下同 COPY nginx/ /data/nginx # 将 dist 文件拷贝到容器中 COPY front/ /data/front # 创建挂载点,不过此处只是提取创建了一个容器的挂载点,跟宿主机没什么关系,仍然需docker run 的时候执行挂载 VOLUME /data/nginx VOLUME /data/front # 暴露端口,此处暴露的端口指conf中配置的端口 EXPOSE 8088 EXPOSE 80 # 启动 Nginx CMD ["nginx", "-g", "daemon off;"]

写好dockerfile后,执行如下命令,将dockerfile打成镜像

docker build -t dockerfile-test .

执行 docker run 启动镜像

docker run -d -p 8099:8088 --name test-dcokerfile -v /data/front:/data/front dockerfile-test

直接使用nginx部署项目

1、准备安装所需包

将 nginx_package.zip 下载下来,上传到服务器 /opt 目录下,并解压

cd /opt unzip nginx_package.zip

2、安装 gcc

# 先查看是否有 gcc 版本,有东西打印版本信息表示有 gcc -v # 没有则执行以下步骤安装 # 1、进入到 gcc 目录 cd /opt/nginx_package/gcc # 2、执行安装命令 rpm -ivh *.rpm --nodeps --force # 3、查看是否安装成功,有打印版本信息表示成功 gcc -v

3、安装 g++

# 先查看是否有 g++ 版本,有东西打印版本信息表示有 g++ -v # 没有则执行以下步骤安装 # 1、进入到 g++ 目录 cd /opt/nginx_package/g++ # 2、执行安装命令 rpm -ivh *.rpm --nodeps --force # 3、查看是否安装成功,有打印版本信息表示成功 g++ -v

4、安装 zlib

注:必须在安装 openssl 之前,因为 openssl 编译用到了 zlib

# 1、进入到 nginx_package 目录 cd /usr/local/nginx_package # 2、解压 zlib-1.2.11.tar.gz tar -zxvf zlib-1.2.11.tar.gz # 3、进入到解压目录 cd zlib-1.2.11 # 4、开始编译 ./configure # 5、编译成功后进行安装 make && make install

5、安装 openssl

注:若无需keepalived,则步骤4,编译命令执行 ./config 即可

prefix:安装目录

openssldir:配置文件和默认证书存储路径

shared: 生成动态库,keepalived环境必需参数

# 1、进入到 nginx_package 目录 cd /usr/local/nginx_package # 2、解压 openssl-1.1.1k.tar.gz tar -zxvf openssl-1.1.1k.tar.gz # 3、进入到解压目录 cd openssl-1.1.1k # 4、开始编译 openssldir 配置文件和默认证书存储路径 shared 必须:生成动态库 zlib 启用压缩 # --openssldir=/etc/ssl ./config --prefix=/usr/local/ssl shared zlib # 5、编译成功后开始安装 make && make install

6、安装 pcre

# 1、进入到 nginx_package 目录 cd /usr/local/nginx_package # 2、解压 pcre-8.44.tar.gz tar -zxvf pcre-8.44.tar.gz # 3、进入到解压目录 cd pcre-8.44 # 4、开始编译 ./configure # 5、编译成功后开始安装 make && make install

7、安装 nginx

注:之所以安装前面那些库,是因为安装 nginx 需要用到这库

# 1、进入到 nginx_package 目录 cd /usr/local/nginx_package # 2、解压 nginx-1.18.0.tar.gz tar -zxvf nginx-1.18.0.tar.gz # 3、进入到解压目录 cd nginx-1.18.0 # 4、创建 nginx 安装目录 mkdir /usr/local/nginx # 5、开始编译 静态链接各库,将各库编译进 Nginx 二进制文件中,哪怕这些openssl、pcre等卸载了也不影响nginx ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre=../pcre-8.44 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.1k --with-http_v2_module # 6、编译成功后开始安装 make && make install

8、检测 nginx 是否安装成功

# 1、进入到 nginx 安装目录 cd /usr/local/nginx/sbin # 2、执行检查配置命令 输出显示含有 successful 表示安装成功 ./nginx -t # nginx 配置文件目录 cd /usr/local/nginx/conf

9、将 nginx 启动命令注册成系统服务

  1. 首先创建 nginx.service 系统服务文件
    # 进入系统服务目录 cd /lib/systemd/system/ # 创建nginx服务文件 touch nginx.service # 编辑nginx服务文件 vim nginx.service
  2. 填入以下内容,并保存
    [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target

    3、执行以下命令,看是否能用

    # 启动nginx服务 systemctl start nginx.service # 停止nginx服务 systemctl stop nginx.service # 设置开机自启动 systemctl enable nginx.service # 停止开机自启动 systemctl disable nginx.service # 查看服务当前状态 systemctl status nginx.service # 重新启动服务 systemctl restart nginx.service

    注:如果命令不能用,就重新加载一下系统服务

    # 重新加载一遍系统服务文件 systemctl daemon-reload
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 14:33:59

OpenNMT数据预处理完全攻略:从原始文本到训练数据的完整流程

OpenNMT数据预处理完全攻略&#xff1a;从原始文本到训练数据的完整流程 OpenNMT是一个功能强大的开源神经机器翻译框架&#xff0c;而数据预处理是构建高质量翻译模型的关键第一步。本指南将带你了解如何使用OpenNMT的preprocess.lua工具将原始文本转换为适合模型训练的格式&…

作者头像 李华
网站建设 2026/7/15 14:33:15

kkFileView:企业级文件在线预览解决方案的技术突破与实践指南

kkFileView&#xff1a;企业级文件在线预览解决方案的技术突破与实践指南 【免费下载链接】kkFileView Universal File Online Preview Project based on Spring-Boot 项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView 在现代企业数字化转型浪潮中&#xf…

作者头像 李华
网站建设 2026/7/15 14:31:26

SingGuard-4b-GGUF部署指南:从本地测试到生产环境的完整流程

SingGuard-4b-GGUF部署指南&#xff1a;从本地测试到生产环境的完整流程 【免费下载链接】SingGuard-4b-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/SingGuard-4b-GGUF SingGuard-4b-GGUF是一款强大的多模态安全护栏模型&#xff0c;专为AI内容安全…

作者头像 李华
网站建设 2026/7/15 14:31:06

java中函数式接口

Comparator 是函数式接口&#xff0c;虽然里面有多个方法。解释&#xff1a; 函数式接口的特点 1.接口有且仅有一个抽象方法&#xff0c;如抽象方法compare 2.允许出现java.lang.Object中的public方法&#xff0c;如方法equals。 3.允许定义静态非抽象方法 4.允许定义默认defal…

作者头像 李华
网站建设 2026/7/15 14:30:10

3分钟上手!用Bilivideoinfo轻松获取B站视频完整数据

3分钟上手&#xff01;用Bilivideoinfo轻松获取B站视频完整数据 【免费下载链接】Bilivideoinfo Bilibili视频数据爬虫 精确爬取完整的b站视频数据&#xff0c;包括标题、up主、up主id、精确播放数、历史累计弹幕数、点赞数、投硬币枚数、收藏人数、转发人数、发布时间、视频时…

作者头像 李华