Linux内网使用docker启动nginx或者直接使用nginx 使用docker启动nginx1、在服务器上安装docker在有网环境下下载 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/将下载的包上传到服务器并解压# 解压命令 tar -zxvf docker-xx.x.x.tgz将解压的docker目录拷贝到/usr/bin目录下# 拷贝移动请用 mv 命令 cp docker/* /usr/bin/将docker注册为系统服务便于启动。创建文件 /etc/systemd/system/docker.service并添加如下内容[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com [Service] ExecStart/usr/bin/dockerd Restartalways StartLimitInterval0 RestartSec10 [Install] WantedBymulti-user.target给docker.service添加可执行权限并重新加载systemd配置使新创建的docker服务立即生效# 给 docker.service 添加可执行权限 chmod 777 docker.service # 重新加载配置文件 systemctl daemon-reload启动docker服务并查看服务状态Tip第4、5步成功了才可以使用下面这些命令# 启动docker systemctl start docker # 查看docker状态 systemctl status docker # docker 重启 systemctl restart docker # 停止 docker systemctl stop docker # docker 开机自启 systemctl enable docker安装完成执行如下命令可验证是否成功安装#查看 Docker 客户端和服务器的版本信息 docker -v #查看 Docker 系统的详细信息包括容器、镜像、存储驱动、网络等的配置和统计信息 docker info2、准备nginx镜像文件有网环境使用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使用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.tar3、在服务器上安装nginx将镜像文件nginx.tar上传到服务器使用docker加载镜像文件# 导入镜像 参数说明 --input , -i : 指定导入的文件 docker load -i nginx.tar查看是否有nginx镜像# 查看当前docker装好的镜像 docker images4、在服务器上运行nginx并配置挂载点随便取个容器名启动nginx用于将容器内的nginx配置拷贝到宿主机# 运行。-d 在后台运行 -p 端口映射 宿主机端口:容器端口 --name 容器名称 docker run -d -p 80:80 --name nginx-test nginx # PS # 查看当前运行的容器 docker ps # 查看当前创建的容器包含运行、停止的容器等 docker ps -a进入容器内部查看配置文件路径然后退出容器开始拷贝# 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 目录此处拷贝只是想拷贝全看的舒服些将自定义的nginx配置文件上传到服务器的 /data/nginx/conf.d 目录下如图删除先前创建的容器创建新的容器并配置挂载点以及容器自启# 删除容器 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 --restartalways nginx-test使用 docker ps 如下图所示表示成功。或者访问页面即可5、注意点所有配置均已容器中路径、端口为主宿主机的配置只是为了便于操作和访问比如例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包等若有多个端口需要映射如-p 80:80 -p 81:81 需要几个重复几个即可。由于容器互相都是独立的所以容器端口可以重复但宿主机只有一个所以宿主机端口不能与其他容器映射的端口重复只有第一次创建容器时用 docker run 命令后续启动可用以下命令# 启动容器 docker start nginx-test # 重启容器 docker restart nginx-test # 停止容器 docker stop nginx-test只有docker run 时才能配置端口映射和挂载点等若是配置少了或是后续更新增加了则需先查看挂载点然后删除再docker run 配置相同挂载点并增加所需的配置# 查看容器挂载点 # docker inspect 容器名称 查看容器信息 # | grep Mounts -A 20 只查看挂载信息并且只展示20行 docker inspect nginx-test| grep Mounts -A 206、命令总结# 解压命令 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 --restartalways 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.zip2、安装 gcc# 先查看是否有 gcc 版本有东西打印版本信息表示有 gcc -v # 没有则执行以下步骤安装 # 1、进入到 gcc 目录 cd /opt/nginx_package/gcc # 2、执行安装命令 rpm -ivh *.rpm --nodeps --force # 3、查看是否安装成功有打印版本信息表示成功 gcc -v3、安装 g# 先查看是否有 g 版本有东西打印版本信息表示有 g -v # 没有则执行以下步骤安装 # 1、进入到 g 目录 cd /opt/nginx_package/g # 2、执行安装命令 rpm -ivh *.rpm --nodeps --force # 3、查看是否安装成功有打印版本信息表示成功 g -v4、安装 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 install5、安装 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 install6、安装 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 install7、安装 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 install8、检测 nginx 是否安装成功# 1、进入到 nginx 安装目录 cd /usr/local/nginx/sbin # 2、执行检查配置命令 输出显示含有 successful 表示安装成功 ./nginx -t # nginx 配置文件目录 cd /usr/local/nginx/conf9、将 nginx 启动命令注册成系统服务首先创建 nginx.service 系统服务文件# 进入系统服务目录 cd /lib/systemd/system/ # 创建nginx服务文件 touch nginx.service # 编辑nginx服务文件 vim nginx.service填入以下内容并保存[Unit] Descriptionnginx Afternetwork.target [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/usr/local/nginx/sbin/nginx -s quit PrivateTmptrue [Install] WantedBymulti-user.target3、执行以下命令看是否能用# 启动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