docker安装nginx
2020-05-31 21:09 youxin 阅读(449) 评论(0) 编辑 收藏 举报
创建挂载目录
我们这里需要挂载可手动修改配置文件的nginx,而不是全部封装在docker容器中运行的。
mkdir -p /opt/nginx/{conf,conf.d,html,logs}
安装完成之后进行测试:
sudo docker run --name nginx-test -p 8081:80 -d nginx
‘
随便创建一个 Nginx 容器,并拷贝 Nginx 的默认配置:
创建容器:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ docker run -d --name nginx nginx 从容器中拷贝配置文件至本地: # 查看 ==> 获取容器ID $ docker container ls # 在当前目录下创建目录:conf $ mkdir conf # 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录 $ docker cp a89b2c5f3dd1: /etc/nginx/nginx .conf $PWD /conf 删除容器: # 停止容器 $ docker container stop a89b2c5f3dd1 # 删除容器 $ docker container rm a89b2c5f3dd1 |
’
查看docker 镜像进程
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f77f78d2228d nginx "nginx -g 'daemon of…" 12 seconds ago Up 11 seconds 0.0.0.0:8081->80/tcp nginx-test
————————————————
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列:
sudo docker cp f77f78d2228d:/etc/nginx/nginx.conf ~/nginx/conf
docker cp 也可以是容器名。
docker run --name mynginx -p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
-d nginx
https://www.runoob.com/docker/docker-install-nginx.html
有个问题:
运行容器
安装完成后,我们可以使用以下命令来运行 nginx 容器:
$ docker run --name mynginx -p 8080:80 -d nginx
我用上面的运行容器,访问80就ok。
用配置命令始终连不上80端口。为什么?
用下面的命令可以:
docker run --name mynginx -p 8888:80 \
-v $PWD/html:/usr/share/nginx/html \
-d nginx
原因暂时未知。
最后找到原因,要运行:
/etc/init.d/network restart
- 如果容器已经被创建,我们想要修改容器的重启策略
docker update --restart always mynginx
注意:
-
容器只有在成功启动后restart policy才能生效。这里的"成功启动"是指容器处于up至少10秒且已经处于docker监管。这是避免没有成功启动的容器陷入restart的死循环。
-
如果手动stop一个容器,容器设置的restart policy将会被忽略,除非Docker守护进程重启或者容器手动重启;这是避免了如果重启策略设置了always,如果不忽略policy那么容器无法手动停止。
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算
1.第一步 先拉取镜像
docker pull nginx:latest]
2. nginx 容器内部一般地址配置如下:
日志位置:/var/log/nginx/ 配置文件位置:/etc/nginx/ 项目位置:/usr/share/nginx/html
为了我们开发方便,还是把配置项映射到本地
再本机上创建容器内对应的目录,为接下来启动容器做准备
创建 conf , html. logs文件夹 ,然后用docker cp 把容器内对应的配置项复制到刚才的目录下
docker cp nginx:/etc/nginx/conf.d/default.conf F:\Docker\dockerContainer\nginx\conf\conf.d
docker cp nginx:/etc/nginx/nginx.conf F:\Docker\dockerContainer\nginx\conf
docker cp nginx:/usr/share/nginx/html/index.html F:\Docker\dockerContainer\nginx\html
删除旧的容器重新创建
docker stop nginx
docker rm nginx
docker run --name nginx -p 8001:80 -v F:\Docker\dockerContainer\nginx\conf:/etc/nginx/conf -v F:\Docker\dockerContainer\nginx\conf\conf.d:/etc/nginx/conf.d -v F:\Docker\dockerContainer\nginx\logs:/var/log/nginx -v F:\Docker\dockerContainer\nginx\html:/usr/share/nginx/html -d nginx
参数说明:
--name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。
参考:https://blog.csdn.net/qq_21051999/article/details/109691995
Nginx的Docker镜像读取配置通过default.conf.template
一.提前:在nginx 1.19之后的版本中
首先在新建个default.conf.template文件配置nginx的模板
然后在DockerFile
FROM nginx:1.20.1
USER root
COPY ./ /usr/share/nginx/html/
ADD ./templates /etc/nginx/templates
COPY ./default.conf.template /etc/nginx/templates/
RUN chmod 777 -R /usr/share/nginx/html/ && \
chmod 775 -R /etc/nginx
EXPOSE 80
通过生成中镜像中docker-entrypoint.sh来执行docker-entrypoint.d的文件夹下面的20-envsubst-on-template.sh来实现配置
二.在nginx 1.19之后的版本中,nginx的Docker镜像可以读取环境变量的值,具体方式如下:
1、在/etc/nginx/templates/目录下创建一个*.template文件,比如default.conf.template(可以通过挂载的形式,或者直接修改容器保存为新的镜像)
2、在default.conf.template文件中,使用${}将环境变量包含起来,比如:
listen ${NGINX_PORT};
3、启动docker的时候,使用如下的方式为环境变量赋值:
docker run -d --name nginx -e NGINX_PORT=80 nginx:latest
在容器启动前会读取/etc/nginx/templates/*.template模板文件,并将执行envsubst的结果输出到/etc/nginx/conf.d/default.conf,比如上面的配置,最终会输出如下内容到/etc/nginx/conf.d/default.conf文件中:
listen 80;
https://hub.docker.com/_/nginx
原文链接:https://blog.csdn.net/zzy7075/article/details/130388339
Dockerfile
其中主要为通过ENV配置默认环境变量,其次将配置文件添加至镜像中nginx目录下的templates,并将文件名改为default.conf.template
,
当容器启动后,nginx会将模版文件转化为conf文件并放置于conf.d目录中
nginx
镜像中自 1.19
开始已支持环境变量。只需要将 Dockerfile
中的 Nginx
配置地址放在 /etc/nginx/templates/*.template
中,并且 nginx.conf
的配置中使用 $ENV_NAME
指定对应的环境变量即可。
修改 Dockerfile
+ COPY ./docker/nginx.conf /etc/nginx/templates/default.conf.template
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2017-05-31 tomcat优化和JVM修改内存
2013-05-31 转: java传值or传引用