GVKun编程网logo

容器 (docker) 内运行 Nginx(docker启动nginx容器)

21

想了解容器(docker)内运行Nginx的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于docker启动nginx容器的相关问题,此外,我们还将为您介绍关于167dockerdocker构

想了解容器 (docker) 内运行 Nginx的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于docker启动nginx容器的相关问题,此外,我们还将为您介绍关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、5 分钟教程:如何在 Docker 容器中运行 Nginx、bash – 如何从容器内运行的脚本访问docker容器的元数据?、centos – 在docker容器内运行docker?的新知识。

本文目录一览:

容器 (docker) 内运行 Nginx(docker启动nginx容器)

容器 (docker) 内运行 Nginx(docker启动nginx容器)

容器内运行 nginx 其实很简单,但是一开始还是浪费了我很多时间。这里写下来给大家省点时间。

 

1、创建 nginx 文件夹,放置各种配置及日志等。

mkdir /docker/nginx

docker 文件夹是我存放所有基础设施容器的地方。

2、创建 nginx 配置文件

cd /docker/nginx
vim nginx.conf

nginx.conf 为主配置文件

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ''$remote_addr - $remote_user [$time_local] "$request" ''
                      ''$status $body_bytes_sent "$http_referer" ''
                      ''"$http_user_agent" "$http_x_forwarded_for"'';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
View Code

最后一句 include /etc/nginx/conf.d/*.conf;

这里的 *.conf 就是子配置。我只创建了一个 default.conf

mkdir /docker/nginx/conf.d
cd /docker/nginx/conf.d
vim default.conf

在 default.conf 里面加入你的 server 级别的配置。

我这里只是监听了 80 端口,并反向代理到了 5000 端口

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:5000;      # 这里设置你要代理的ip+端口
    }
}
View Code

3、创建 docker-compose.yml 容器编排

vim /docker/nginx/docker-compose.yml

docker-compose 对格式要求很严格注意里面的空格。

解释下我的设置

restart  永远重启

image 从 nginx 镜像拉取

ports 输出使用 80,443 端口

volumes 挂载外部卷到 docker 内部。这样就可以使用我们刚才创建好的配置了。

(这里面:ro 的意思是只读的意思,表示第一第二个卷只能被容器读取不能写入)

docker-compose 文件内容如下方便大家 copy

version: ''3.0''

services:
  nginx:
    restart: always
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - /docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - /docker/nginx/conf.d:/etc/nginx/conf.d:ro
      - /docker/nginx/log:/var/log/nginx
View Code

4、运行

要保证在我们刚才创建的目录里

cd /docker/nginx

docker-compose up -d

加 - d 的意思是后台运行。大家可以试试不加 -d

 

5、其他 

  • 如果你的 nginx 版本跟你的配置不一致,你可以进入到容器内看看。
docker exec -it 容器id /bin/bash
  • 停止镜像 
docker-compose down

 

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教程有兴趣的朋友有所帮助。

5 分钟教程:如何在 Docker 容器中运行 Nginx

5 分钟教程:如何在 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 容器。现在,您还知道如何在容器和主机文件系统之间共享信息。

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

bash – 如何从容器内运行的脚本访问docker容器的元数据?

bash – 如何从容器内运行的脚本访问docker容器的元数据?

我试图了解是否可以使用bash脚本读取容器的元数据(特别是Labels)属性.

例如,如果有一个Dockerfile,如:

FROM busyBox
LABEL abc = abc_value1

而且,如果我基于上面的文件构建并运行图像,如下所示:

docker build . -t image1
docker run -ti image1 /bin/bash

有没有办法访问bash shell中“abc”标签的值?如果是这样,怎么样?

最佳答案
要获取标签(以及远程API中的任何内容),您可以将套接字传递到容器中并使用curl> = 7.40(它是支持–unix-socket标志的最小版本)从容器中访问远程API通过套接字:

Dockerfile:

FROM ubuntu:16.04 
RUN apt-get update \
    && apt-get install curl -y
LABEL abc = abc_value1

建立并运行

docker build -t image1 .
docker run -v /var/run/docker.sock:/var/run/docker.sock -it image1 /bin/bash

从容器内部

curl --unix-socket /var/run/docker.sock http:/containers/$(hostname)/json

从这里你将拥有一大块JSON(类似于docker inspect).然后,您可以使用jq之类的CLI工具来拔出标签.

有关docker网站的更多信息,请访问:https://docs.docker.com/engine/reference/api/docker_remote_api/#/docker-remote-api

所有这一切 – 这不是很安全,环境变量可能是一个更好的选择.

centos – 在docker容器内运行docker?

centos – 在docker容器内运行docker?

我使用docker容器来构建和部署我的软件到ec2的集合。在部署脚本中,我构建我的软件,然后将其打包到docker镜像中。图像被推送到我的私人注册表,由我的生产ec2的拉,然后运行。所以基本上我需要在docker容器中运行docker。

问题是,我实际上不能在我的容器上启动docker。如果我试试

service docker start

我得到

bash: service: command not found

如果我试试

docker -d

我得到

2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver:
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock)
[e2feb6f9] +job initserver()
[e2feb6f9.initserver()] Creating server
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock)
[error] attach_loopback.go:42 There are no more loopback device available.
loopback mounting Failed
[e2feb6f9] -job initserver() = ERR (1)
2014/10/07 15:54:35 loopback mounting Failed

服务命令不存在docker容器,所以我不能启动docker。我不知道我应该做什么现在开始docker,所以我有点卡在这里,任何帮助是赞赏。

更多信息

主机运行fedora 20(最终将在ec2上运行amazon linux)

Docker容器正在运行centos 7.0

主机正在运行Docker版本1.2.0,构建fa7b24f / 1.2.0

容器正在运行docker-0.11.1-22.el7.centos.x86_64

如何不运行“docker里面的docker”和运行docker在您的主机,但从您的docker容器内?只是挂载你的docker.sock和docker二进制:

docker run -v /var/run/docker.sock:/run/docker.sock -v $(其中docker):/ bin / docker [your image]

https://github.com/sameersbn/docker-gitlab使用这种方法来旋转docker容器,看看这个图像。

你也可以看看:https://registry.hub.docker.com/u/mattgruter/doubledocker/

更新于2016年7月

最新的方法是使用docker:dind image,如下所述:
https://hub.docker.com/_/docker/

简短的摘要:

$ docker run –privileged –name some-docker -d docker:dind

接着:

$ docker run –rm –link some-docker:docker docker info

今天关于容器 (docker) 内运行 Nginxdocker启动nginx容器的介绍到此结束,谢谢您的阅读,有关167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、5 分钟教程:如何在 Docker 容器中运行 Nginx、bash – 如何从容器内运行的脚本访问docker容器的元数据?、centos – 在docker容器内运行docker?等更多相关知识的信息可以在本站进行查询。

本文标签: