GVKun编程网logo

5 分钟教程:如何在 Docker 容器中运行 Nginx(docker使用nginx)

7

如果您想了解5分钟教程:如何在Docker容器中运行Nginx的相关知识,那么本文是一篇不可错过的文章,我们将对docker使用nginx进行全面详尽的解释,并且为您提供关于167dockerdock

如果您想了解5 分钟教程:如何在 Docker 容器中运行 Nginx的相关知识,那么本文是一篇不可错过的文章,我们将对docker使用nginx进行全面详尽的解释,并且为您提供关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker php 容器中 curl nginx 容器域名?、Docker容器中运行nginx、linux – 如何在docker容器中运行cron作业的有价值的信息。

本文目录一览:

5 分钟教程:如何在 Docker 容器中运行 Nginx(docker使用nginx)

5 分钟教程:如何在 Docker 容器中运行 Nginx(docker使用nginx)

在本教程中,您将学习如何将 Nginx 作为 Docker 容器运行,并将其公开给您的本地网络。此外,您将学习如何创建 Docker 数据卷以在容器和主机文件系统之间共享信息。

Nginx 是一种流行的开源软件,用于 Web 服务、反向代理、缓存、负载平衡等。它非常流行并在当今许多高流量网站上使用。Docker 最常见的工作负载之一是使用它来容器化 Web 服务器。我们将向您展示如何使用 Nginx 进行设置。因此,让我们带您完成整个过程。
Docker 是一个容器化平台,用于将您的应用程序打包成一个易于管理的容器映像。
先决条件
您必须满足以下要求才能完成本教程:
Docker 应该已安装并在您的系统上本地运行。

您需要一个 root 帐户,或者用户可以运行 sudo 命令。

在 Docker 中设置 Nginx
拉取镜像
首先,我们将拉取官方的 Nginx 镜像。在您的 docker 主机上,在终端上运行以下 Docker pull 命令以从 Docker hub 下载 Nginx 最新镜像。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker pull nginx

输出如下:

Using default tag: latest
latest: Pulling from library/nginx
e1acddbe380c: Pull complete
e21006f71c6f: Pull complete
f3341cc17e58: Pull complete
2a53fa598ee2: Pull complete
12455f71a9b5: Pull complete
b86f2ba62d17: Pull complete
Digest: sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

运行 Nginx Docker 容器
现在,我们已准备好运行 Nginx Docker 容器并将其端口公开给您的本地网络。为此,我们使用以下命令运行镜像:

linuxmi@linuxmi:~/www.linuxmi.com$ docker run -d -p 80:80 --name my-nginx-server nginx

输出如下:
f204ea685629dbc1d09b4a2d5f6fb64f5ef84be7d58a1b7449cc144c65c90c92
docker: Error response from daemon: driver failed programming external connectivity on endpoint my-nginx-server (27d91a249b151ea87841c46775647d7af43d12c3e753061531173f05016e485b): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use.

-d – 以分离模式启动容器(容器在后台运行)。

-p – 将一个端口从容器绑定到主机(将主机流量端口 80 路由到容器端口 80)。

-name – 我们的 Docker 容器的名称。

最后一个参数 “nginx” 告诉 Docker 容器使用哪个镜像。

现在打开浏览器访问 http://localhost,您应该会看到一个 Nginx Web 服务器提供其默认网页。

就是这样。你有一个 NGINX 的工作实例,通过 Docker 容器。

列出 Docker 容器
要列出所有正在运行的 Docker 容器,请执行以下命令:

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker container ls -all

根据上面的输出,我们可以使用以下两种方法的其中一种停止我们的 Nginx Docker 容器:

linuxmi@linuxmi:~/www.linuxmi.com$ docker stop f204ea685629
f204ea685629
linuxmi@linuxmi:~/www.linuxmi.com$ docker stop my-nginx-server
my-nginx-server

要查看所有容器,甚至那些未运行的容器,您需要添加 -a 标志。

linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker container ls -a

在 Nginx Docker 容器和主机之间共享数据
Docker 容器是短暂的。默认情况下,在容器内创建的任何数据仅在容器内且仅在容器运行时可用。

因此,让我们向您展示如何在主机上访问容器内部的数据。我们的目标是创建一个简单的 HTML 文件,将其托管在容器中,并使用 Nginx Docker 容器将其提供给外部。此设置允许我们拥有在容器外部托管的持久网站内容。

为了实现这个功能,我们将使用 Docker 中的绑定挂载功能。使用绑定挂载时,主机上的文件或目录会挂载到容器中。

因此,让我们首先在主目录中为您的网站内容创建一个新目录。

linuxmi@linuxmi:~/www.linuxmi.com$ mkdir ~/www

现在让我们创建一个简单的 HTML 文件并在您的索引页面上放置一些文本。

linuxmi@linuxmi:~/www.linuxmi.com$ vim ~/www/index.html

编写 HTML 代码片段到里面。保存文件并退出 Vim。

接下来,我们将在容器上运行带有附加卷的 Nginx Docker 容器 /usr/share/nginx/html 到当前保存文件的主机 www 目录上 index.html。

linuxmi@linuxmi:~/www.linuxmi.com$ docker run -d -p 80:80 -v ~/www:/usr/share/nginx/html/ --name my-nginx-server nginx

Nginx 容器默认设置为在 /usr/share/nginx/html/. 在上面的命令中,该 - v 选项设置了一个绑定挂载卷,它将 Nginx Docker 容器内部的目录链接 到 主机上的目录。/usr/share/nginx/html/~/www

Docker 使用 a : 将主机路径与容器路径分开。主机路径始终排在第一位。

现在,如果您浏览 http://localhost,您将在显示窗口上看到下面给出的输出。

就这样。您现在有一个正在运行的 Nginx Docker 容器,它为自定义网页提供服务。

结论
Nginx 和 Docker 可以很好地协同工作。在本教程中,我们演示了如何设置和使用 Nginx Docker 容器。现在,您还知道如何在容器和主机文件系统之间共享信息。

如有疑问,请留下您的意见。

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

<span>//80端口被占用,so...</span>
$ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
<span>1801</span>a32aab54        nginx               <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago       Up <span>2</span> minutes        <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-&gt;</span><span>800</span>/tcp   berserk_kare
登录后复制

进入容器内部

<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash
root<span>@1801a32aab54</span><span>:/</span><span># </span>
登录后复制

查看nginx目录

<span># cd /etc/nginx/</span>
conf<span>.d</span>/         koi-utf         mime<span>.types</span>      nginx<span>.conf</span>      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  
登录后复制

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

<span># cat /conf.d/default.conf</span><span>server</span> {
    listen       <span>80</span>;
    server_name  localhost;

    <span>#charset koi8-r;</span><span>#access_log  /var/log/nginx/log/host.access.log  main;</span>    location / {
        root   /usr/share/nginx/html;
        <span>index</span><span>index</span>.html <span>index</span>.htm;
    }

    <span>#error_page  404              /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span>
    error_page   <span>500</span><span>502</span><span>503</span><span>504</span>  /<span>50</span>x.html;
    location = /<span>50</span>x.html {
        root   /usr/share/nginx/html;
    }
    <span>#...省略php-fpm配置,好长..</span>
}
登录后复制

根目录配置: root /usr/share/nginx/html;

测试

<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" &gt;index.html</span>
登录后复制

php-fpm配置相关

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

docker php 容器中 curl nginx 容器域名?

docker php 容器中 curl nginx 容器域名?

场景是这样的:

    在 docker 容器中 nginx 下部署了两个项目,分别为 a.com 和 b.com.

    nginx 配置文件部分如下:

    location ~ \.php(.*)$ {
              root           /var/www/html/ad-api/api/src/public/;
              fastcgi_pass   myphp:9000;

              fastcgi_index  index.php;

     }

     然后我在 a.com 项目中需要 curl  b.com 中的接口,会报如下错误:Failed to connect to b.com port 80: Connection refused

     我的解决方式是在 php-fpm 容器内绑定了 nginx 容器的 host:   nginx 容器 ip:b.com

     但由于容器的 ip 是变化的,所以想请问有没有其他更好的解决方式。

     docker-compose.yml

     

version: ''3''
services:
  myphp:
    build: ./php
    container_name: myphp
    extra_hosts:
      - "b.com: nginx容器ip"  //这里还没有nginx的ip,应该怎么写啊
    network_mode: my-bridge
    ports:
      - "9000:9000"
    volumes:
      - /Users/aa/learn/html:/var/www/html
      - /Users/aa/learn/php:/usr/local/etc/php
  nginx0717:
    image: nginx:latest
    container_name: nginx0717
    ports:
      - "80:80"
      - "443:443"
    network_mode: my-bridge
    volumes:
      - /Users/aa/learn/html:/usr/share/nginx/html
      - /Users/aa/learn/nginx:/etc/nginx

Docker容器中运行nginx

Docker容器中运行nginx

Nginx简介

Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。与旧版本(<=2.2)的Apache不同,Nginx不采用每客户机一线程的设计模型,而是充分使用异步逻辑,削减了上下文调度开销,所以并发服务能力更强。整体采用模块化设计,有丰富的模块库和第三方模块库,配置灵活。 在Linux操作系统下,Nginx使用epoll事件模型,得益于此,Nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件模型kqueue。

docker hub拉取

docker hub 是docker官方的镜像源,里面有做好的Nginx docker image,当然也可以发布自己的镜像到上面去。

如果官方镜像速度很慢,可以考虑用

阿里云的docker镜像仓库

主要步骤如下:

登录阿里云的docker镜像仓库
获取专属加速器地址
升级docker客户端(建议在1.6.0以上)
修改daemon配置文件(阿里已经给出了所有的命令,基本上只要copy paste即可)
然后使用

docker pull Nginx

就可以快速下载官方的Nginx docker image了。

基础的docker命令可以参看Docker初体验

Nginx docker image

在docker官方的页面上,有部分样例的说明。可以发现,网站的主目录是 /usr/share/Nginx/html ,这跟我搜到的一些文章的说明不同。

我的需求是实现Nginx搭建的文件浏览站。说白了就是下载站。实验室(or校园内)共享文件。原来采用的是 Python救急HttpServer和Ftpserver ,尽管后来采用了 python多线程启动httpserver ,但还是经常因为卡线程的问题,导致地址访问失败。所以那个方法作为临时应急工具还是可以的,但是如果想要长期共享文件,必须采用有完善功能的http server。

Nginx的配置文件都在 /etc/Nginx/ 下面,可以看到熟悉的 conf.d 文件夹,明显里面是用户自定义配置文件的位置。

修改自定义配置

default.conf文件内容如下:

server {
  listen    80;
  server_name localhost;

  #charset koi8-r;
  #access_log /var/log/Nginx/log/host.access.log main;
  root  /usr/share/Nginx/html;
  location / {
    root  /usr/share/Nginx/html;
    index index.html index.htm;
    ## 下面三行是添加的。
    autoindex on;
    autoindex_exact_size on;
    autoindex_localtime on;
  }

  #error_page 404       /404.html;

  # redirect server error pages to the static page /50x.html
  #
  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  /usr/share/Nginx/html;
  }

  # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  #
  #location ~ \.PHP$ {
  #  proxy_pass  http://127.0.0.1;
  #}

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  #
  #location ~ \.PHP$ {
  #  root      html;
  #  fastcgi_pass  127.0.0.1:9000;
  #  fastcgi_index index.PHP;
  #  fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  #  include    fastcgi_params;
  #}

  # deny access to .htaccess files,if Apache's document root
  # concurs with Nginx's one
  #
  #location ~ /\.ht {
  #  deny all;
  #}
}

只需要完整的复制出来,并添加

autoindex on;
autoindex_exact_size on;
autoindex_localtime on;

运行

docker run -p 8001:80 --name myNginx-v /home/embedded_310/haoyueming/2017:/usr/share/Nginx/html:ro -v /home/embedded_310/haoyueming/dockerfile/default.conf:/etc/Nginx/conf.d/default.conf -d --restart=always Nginx
run

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。新建并启动所需要的命令主要为 docker run 。

-p

端口绑定 外部端口 : 容器内端口

Cname

给容器制定一个特定的名字,而不是自动生成的一长串hex。

-v

使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去。 -v 本地文件夹:容器里的文件夹:读写权限

-d

更多的时候,需要让 Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

Crestart=always

运行容器时使用Crestart参数可以指定一个restart策略,来指示在退出时容器应该如何重启或不应该重启。

no C 容器退出时不要自动重启。这个是默认值。

on-failure[:max-retries] C 只在容器以非0状态码退出时重启。可选的,可以退出docker daemon尝试重启容器的次数。

always C 不管退出状态码是什么始终重启容器。当指定always时,docker daemon将无限次数地重启容器。容器也会在daemon启动时尝试重启,不管容器当时的状态如何。

unless-stopped C 不管退出状态码是什么始终重启容器,不过当daemon启动时,如果容器之前已经为停止状态,不要尝试启动它。

Nginx

镜像的名称,表示以什么镜像作为底包新建一个容器。

tips

我之前运行的时候,一般都采用交互式:

-i 保证容器的stdin开启 -t 为容器生成一个tty终端,在命令的最后加一个 /bin/bash 来保证可以交互。但是实际上,Nginx并没有运行,导致我以为容器的端口绑定不是持久化的。

以前的错误做法:

docker run -it Nginx /bin/bash

您可能感兴趣的文章:

  • Docker 给运行中的容器设置端口映射的方法
  • docker容器中crontab无法正常运行解决方案
  • 详解挂载运行的docker容器中如何挂载文件系统
  • Docker容器中运行flume及启动不输出运行日志问题

linux – 如何在docker容器中运行cron作业

linux – 如何在docker容器中运行cron作业

我试图在docker容器中运行一个cron作业

但没有什么对我有用

我的容器只有cron.daily和cron.weekly文件

crontab,cron.d,cron.hourly ……在我的容器中不存在

crontab -e也无法正常工作

我的容器用/ bin / bash运行

解决方法:

这是我如何运行我的一个cron容器.

Dockerfile:

FROM alpine:3.3

ADD crontab.txt /crontab.txt
ADD script.sh /script.sh
copY entry.sh /entry.sh
RUN chmod 755 /script.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt

CMD ["/entry.sh"]

crontab.txt

*/30 * * * * /script.sh >> /var/log/script.log

entry.sh

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8

script.sh

#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"

像这样构建

docker build -t mycron .

像这样跑

docker run -d mycron

添加自己的脚本并编辑crontab.txt,然后构建映像并运行.由于它是基于高山,因此图像非常小.

关于5 分钟教程:如何在 Docker 容器中运行 Nginxdocker使用nginx的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker php 容器中 curl nginx 容器域名?、Docker容器中运行nginx、linux – 如何在docker容器中运行cron作业等相关内容,可以在本站寻找。

本文标签: