代码改变世界

docker安装nginx

2020-05-31 21:09  youxin  阅读(438)  评论(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

链接:https://juejin.cn/post/7250383386183319589