`
郑云飞
  • 浏览: 813834 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nginx in Docker

 
阅读更多

首先,系统(3.8以上内核的linux)中安装好 Docker 这个运用程序。由于网络原因,我们下载一个Docker官方的镜像需要很长的时间,甚至下载失败。为此,阿里云容器镜像服务提供了官方的镜像站点,从而加速官方镜像的下载速度。 [ 不会的可以参考我之前的文章:Docker <一> 架构简介与Linux上安装 https://my.oschina.net/u/3375733/blog/1582281]。

 

一、Docker pull 安装 Nginx 

    1、查看docker仓库中的 nginx 命令


# 使用 docker search 命令搜索存放在 Docker Hub 中的镜像
docker search nginx

    以看到下图所示的信息:

        

    2、为选定需要pull到系统中的官方 Nginx 镜像

# docker pull nginx -------- nginx 为选定需要pull到系统中的官方 nginx 镜像

docker pull nginx

        

    整个pull过程需要花费一些时间,耐心等待。

    若见下图证明pull成功。 

        

二、查看并启动Docker 镜像

    1、列出已下载的镜像

# 使用 docker images 命令即可列出已下载的镜像

docker images

    执行命令后,可看到类似于如下的表格:

        

    2、列出运行中的容器


# 使用 docker ps 命令即可列出运行中的容器
docker ps


# 使用 docker ps -a 命令即可列出所有(包括已停止的)的容器
docker ps -a

    执行命令后,可看到类似于如下的表格:

        

    可以发现,目前没有运行的 nginx 容器。故,接下来我们新建并启动一个 nginx 容器。

        

三、启动容器,部署nginx并修改配置文件

    1、启动跑个静态网页,测试下 nginx 容器

# 启动一个名为nginx81(名字自己根据需求起名字,一般见名知意即可) 的容器 
docker run --name nginx81 -d -p 80:80 -v /usr/docker/nginx/html:/usr/share/nginx/html nginx


# 默认容器对这个目录有可读写权限,可以通过指定ro,将权限改为只读(readonly)
# docker run --name my-nginx -d -p 80:80 -v /usr/docker/nginx/html:/usr/share/nginx/html:ro -d nginx

        

    访问 http://Docker宿主机IP:指定的Docker宿主机端口 ,可以访问说明

        

    2、部署nginx 项目并修改配置文件

    一般情况下docker启动时进行配置,只要把配置文件的目录挂载出来就可以,但是nginx却是先加载一个主配置文件nginx.conf,在nginx.conf里再加载conf.d目录下的子配置文件(一般最少一个default.conf文件)。 

# 普通的挂载方式
docker run --name mynginx2 --mount source=/var/www,target==/usr/share/nginx/html,readonly \
--mount source=/var/nginx/conf,target=/etc/nginx/conf,readonly -p 80:80 -d nginx

    docker 启动 nginx 加载自定义配置:


# 1. 第一个“-v”,是项目位置,把项目放到挂载到的目录下即可 
# 2. 第二个“-v”,是挂载的主配置文件"nginx.conf",注意"nginx.conf"文件内有一行 
#    "include /etc/nginx/conf.d/*.conf;" ,
#    这个include指向了子配置文件的路径,此处注意include后所跟的路径一定不能出错
# 3. 第三个“-v”,把docker内子配置文件的路径也挂载了出来,注意要与 “2.” 中include指向路径一致
# 4. nginx.conf是挂载了一个文件(docker是不推荐这样用的),conf.d挂载的是一个目录

docker run \
  --name nginx81 \
  -d -p 81:80 \
  -v /usr/docker/nginx81/html:/usr/share/nginx/html \
  -v /etc/docker/nginx81/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v /etc/docker/nginx81/conf.d:/etc/nginx/conf.d \
  nginx

    准备挂载的 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;
}

        准备挂载的 default.conf :

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;
    }

    location /api{
        proxy_pass http://192.168.1.1:9999/api;
        # access_log "logs/test.log";
    }
   


}

    

    上述的依然不够灵活,可以直接进入容器操作:

    1) 启动

# 启动一个名 nginx81 的 nginx 容器
docker run --name nginx81 -d -p 81:80 -v \
/usr/docker/nginx81/html/:/usr/share/nginx/html:ro -d nginx

 

# 添加日志记录启动
docker run --name nginx81 -d -p 81:80 -v /usr/docker/nginx81/html/:/usr/share/nginx/html:ro \
 -v /logs:/var/log/nginx -d nginx

        

    2)拷贝容器内的配置文件到本地,进行个性化配置等操作


docker cp nginx:/etc/nginx/nginx.conf /usr/docker/nginx81/nginx.conf

    3)重新指定配置文件启动


docker run --name nginx81 -d -p 81:80 -v /usr/docker/nginx81/html:/usr/share/nginx/html:ro 
-v $PWD/logs:/var/log/nginx -v /usr/docker/nginx81/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

    4)进入容器


sudo docker exec -it d3a86da6fad1 /bin/bash

# 退出容器:Ctrl+P+Q

四、通过 Dockerfile 构建 Nginx 

 

 

相关链接

   · docker 官网 Nginx 安装文档: https://docs.docker.com/samples/library/nginx/#hosting-some-simple-static-content

    · Nginx 官网文档:https://www.nginx.com/blog/deploying-nginx-nginx-plus-docker/

分享到:
评论

相关推荐

    docker下载nginx镜像并配置,然后通过公网ip访问

    docker pull nginx //从docker自带的源把nginx的镜像下载下来 docker images //查看刚才下载的镜像文件 docker run -itd --name nginx -p 5555:80 nginx //运行刚刚下载nginx的镜像,现在这个镜像是一个容器。...

    jenkins-nginx-docker:Docker中具有Nginx反向代理的Jenkins LTS-包括Jenkins的docker-in-docker

    Jenkins LTS-Nginx-Docker中的Docker 詹金斯是什么? Jenkins提供了一种简单的方法,可以使用管道为语言和源代码存储库的几乎任何组合设置持续集成或持续交付环境,并自动执行其他常规开发任务。 虽然Jenkins并...

    nginx-docker-letsencrypt:基本模板结合起来,让我们在Docker环境中使用Nginx进行加密

    nginx-docker-letsencrypt 在docker-compose环境中结合使用certbot和nginx进行自动续订的方式,从letscrypt为主机创建SSL证书的基本样板。 此存储库旨在与使用docker-compose和nginx的项目一起使用。 检查80端口...

    Docker 安装 Nginx

    Docker 安装 Nginx Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 。 1、查看可用的 Nginx 版本 访问 Nginx 镜像库地址: https://hub.docker.com/_/nginx?tab=tags。 可以...

    详解利用nginx和docker实现一个简易的负载均衡

    2.在docker中从源中拉一下nginx的官方镜像,docker pull nginx,留着备用 3.在本地目录新建两个文件夹,我这里的新建在/mydata/test1,/mydata/test2/ 4.分别在两个test文件夹中新建index.html来标志,在第一个html...

    docker-jenkins-nginx:在 nginx 服务器后面为 Jenkins 构建 Docker

    用于在 nginx 后面运行 jenkins 服务器的 Docker 构建(使用 google oAuth 作为身份验证)docker-in-docker 可用,因此 Jenkins 可以启动 dockerized 构建 容器设置 导师 docker 容器将在启动时运行 supervisor ...

    docker-proxy:NGINX for Docker应用程序的反向代理

    Docker反向代理NGINX for Docker应用程序的反向代理。产生SSL openssl genrsa -out ssl/[app-name].key 2048 openssl req -new -key ssl/[app-name].key -sha256 -out ssl/[app-name].csr -subj "/CN=[app-domain]" ...

    nginx在docker容器中自动生成配置文件

    公司在搭建docker自动化部署时,需要制作一个nginx镜像在其docker run时通过外部指定环境变量使得容器中的配置文件自动生成,不需要再到容器里改配置文件。 实现思路 最后运行的命令大概是这样: docker run -d -p...

    Docker - Clustering Payara Server in Docker

    ### Docker - Clustering Payara Server in Docker #### Introduction Docker is an open-source platform designed to streamline the process of creating, deploying, and managing containerized applications...

    Docker Nginx Log 三者的处理详解

    因为公司的同事需要Nginx日志标准输出,也...docker run --name docker_nginx -d -p 80:80\ -v /var/log/nginx/log:/var/log/nginx\ --!-v:挂载日志目录 2.第二种就是落地到日志文件,然后导向标准输出: RUN \ ln

    基于docker启动nginxssl配置

    下载最新的nginx的docker image docker pull nginx:latest 创建目录 nginx, 用于存放后面的相关东西 mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf 把我们的静态HTML页面放到 /home/nginx/www ...

    Docker构建python Flask+ nginx+uwsgi容器

    安装Nginx 首先拉下centos镜像docker pull centos ...docker cp nginx-1.19.0.tar.gz 10e87af84c05:/root(10e87af84c05为centos容器id) 安装nginx前先装一些依赖: yum -y install gcc gcc-c++ autoconf autom

    主机Nginx + Docker WordPress Mysql搭建的详细步骤

    Docker version 18.09.0 docker-compose version 1.17.0 安装 安装 docker 所需依赖 $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 安装 docker-ce $ sudo yum-config-manager --add-...

    docker安装nginx并配置通过https访问的方法

    1. 下载最新的nginx的docker image $ docker pull nginx:latest 2. 启动nginx容器 运行如下命令来启动nginx container docker run --detach \ --name wx-nginx \ -p 443:443\ -p 80:80 \ -v /home/evan/...

    centos7 docker 修改Nginx文件过程详解

    1.docker 安装 nginx : docker安装Nginx还是很简单的,可以参考百度文章 ,或者参照docker安装mysql : https://www.jb51.net/article/144426.htm 2.安装完后进入到docker容器: 执行命令:docker exec -it 容器...

    Nginx安装+nginx_upstream_check_module后端健康检查

    underscores_in_headers on; # 允许下划线出现在头部 charset utf-8; # 字符集 client_max_body_size 8m; # 请求体最大大小 server_names_hash_bucket_size 128; # 服务器名称哈希表大小 server_tokens off; # ...

    docker nginx 运行后无法访问的问题解决

    最近在学docker部署,一开始打算将nginx先docker化的。 对照官方的docker镜像介绍说明,进行自定义配置 将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是屏蔽了default.conf,以及include文件夹 sites-...

Global site tag (gtag.js) - Google Analytics