如果您想了解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)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- docker php 容器中 curl nginx 容器域名?
- Docker容器中运行nginx
- linux – 如何在docker容器中运行cron作业
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
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>-></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" >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 容器中 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
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作业
我试图在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 容器中运行 Nginx和docker使用nginx的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、docker php 容器中 curl nginx 容器域名?、Docker容器中运行nginx、linux – 如何在docker容器中运行cron作业等相关内容,可以在本站寻找。
本文标签: