介绍
当涉及到处理对Web应用程序服务器和服务静态内容的请求时,长期尝试和测试Nginx是当今非常受欢迎的选择。 当你一起工作的Docker和containerize您的应用程序,有Nginx的服务他们同样使得大多数情况下的感觉。 毕竟,这些容器使您能够轻松地端口应用程序,扩展快速,并添加另一层到您的主机(即Droplet)安全。
在这篇DigitalOcean文章中,我们将学习如何快速设置docker,从基础镜像创建docker容器,并构建它以逐层运行Nginx。 然后,从一开始我们的步骤,我们将创建一个Dockerfile来自动化整个过程。 最后,使用这个Nginx docker镜像,你将能够创建运行Nginx的自包含沙盒,可以用来服务你的“dockerised”应用程序。
词汇表
Docker简介
Nginx简介
3.在Ubuntu上安装Docker
4.基本Docker命令
- 运行docker守护程序和CLI用法
- Docker命令
5.安装Nginx构建Docker容器
- 从Ubuntu创建基本Docker容器
- 准备Nginx安装的基本容器
- 安装Nginx
- 配置Nginx
6.创建Dockerfile以自动构建映像
- Dockerfile基础
- Dockerfile命令概述
- 创建Dockerfile
- 定义基础
- Nginx的安装说明
- 引导
- 最终Dockerfile
- 使用Dockerfile自动构建Nginx容器
Docker简介
该项目Docker提供了更高级别的工具,一起工作,这是建立在某些Linux内核特性之上。 我们的目标是帮助开发人员和系统管理员移植应用-与它们的依赖关系的共同地-并让他们在系统和机器上运行- 免费头疼 。
Docker通过为称为“docker容器”的应用程序创建安全的基于LXC(即Linux容器)的环境来实现这一点。 这些容器在使用搬运工图像,这可以通过Dockerfiles手动或自动执行命令建立创建。
注意:要了解更多关于Docker及零部件(如Docker守护进程,CLI,图像等),看看我们的介绍性文章,以项目: Docker解释 :入门 。
Nginx简介
Nginx是一个非常高性能的Web服务器/(反向)-proxy)。 它已经达到其受欢迎程度是由于重量轻,相对容易使用,并且易于扩展(与附加/插件)。 由于它的结构,它能够处理大量的哪些请求(几乎不受限制)的-这取决于你的应用程序或网站负载-可能是真的很难使用旧的替代品来解决。 它可以被认为是提供静态文件,如图片,脚本或样式表来选择工具。
在Ubuntu上安装Docker(最新)
凭借其最新的版本(0.7.1。约会12月5日),Docker可以部署在各种Linux操作系统,包括Ubuntu / Debian的和CentOS / RHEL。
记住,你可以快速开始使用DigitalOcean的即用型Docker镜像建立在Ubuntu 13.04上。
我们将快速完成Ubuntu的安装过程(最新)。
Ubuntu的安装说明
更新您的Droplet:
sudo aptitude update
sudo aptitude -y upgrade
确保aufs支持可用:
sudo aptitude install linux-image-extra-`uname -r`
将docker repository key添加到apt-key以进行包验证:
sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
将docker资源库添加到aptitude资源:
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
使用新增内容更新存储库:
sudo aptitude update
最后,下载并安装docker:
sudo aptitude install lxc-docker
Ubuntu的默认防火墙(UFW:单纯性防火墙)默认情况下,它是由Docker需要拒绝所有转发流量。
使用UFW启用转发:
使用nano文本编辑器编辑UFW配置。
sudo nano /etc/default/ufw
向下滚动并找到DEFAULT 提出政策开头的行。
更换:
DEFAULT_FORWARD_POLICY="DROP"
使用:
DEFAULT_FORWARD_POLICY="ACCEPT"
按CTRL + X和批准与Y保存并关闭。
最后,重新加载UFW:
sudo ufw reload
基本Docker命令
我们开始与Docker的工作之前,让我们赶紧去了其可用的命令,从我们第一次刷新我们的记忆入门文章。
运行docker守护程序和CLI用法
安装后,docker守护程序应该在后台运行,准备接受docker CLI发送的命令。 对于可能需要手动运行docker的某些情况,请使用以下命令:
运行docker守护进程:
sudo docker -d &
docker CLI用法:
sudo docker [option] [command] [arguments]
注:Docker需要为了工作sudo的特权。
Docker命令
下面是目前可用的(0.7.1版本)Docker命令的摘要:
attach: Attach to a running container
build: Build a container from a Dockerfile
commit: Create a new image from a container's changes
cp: Copy files/folders from the containers filesystem to the host path
diff: Inspect changes on a container's filesystem
events: Get real time events from the server
export: Stream the contents of a container as a tar archive
history: Show the history of an image
images: List images
import: Create a new filesystem image from the contents of a tarball
info: Display system-wide information
insert: Insert a file in an image
inspect: Return low-level information on a container
kill: Kill a running container
load: Load an image from a tar archive
login: Register or Login to the docker registry server
logs: Fetch the logs of a container
port: Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
ps: List containers
pull: Pull an image or a repository from the docker registry server
push: Push an image or a repository to the docker registry server
restart: Restart a running container
rm: Remove one or more containers
rmi: Remove one or more images
run: Run a command in a new container
save: Save an image to a tar archive
search: Search for an image in the docker index
start: Start a stopped container
stop: Stop a running container
tag: Tag an image into a repository
top: Lookup the running processes of a container
version: Show the docker version information
让我们开始!
===
使用Nginx构建Docker容器
在我们的VPS上安装docker并快速完成其命令后,我们准备开始实际工作,创建运行Nginx的docker容器。
注意:虽然下面这部分后,安装Nginx的,我们将有一个正在运行的Docker的容器,它绝对不是推荐的方法,因为它的复杂性。 但是,在这里为您提供了一个机会,学习如何使用一个活的容器,并熟悉我们将需要定义以后的自动化过程的命令。 要创建安装在一个更好的方式与Nginx的一个Docker的形象,请参阅下一节:创建Dockerfile为自动生成的图像Nginx的 。
从Ubuntu创建基本Docker容器
使用Docker的RUN命令,我们将从基于Ubuntu映像创建一个新容器开始。 我们将使用“-t”标志附加一个终端。
sudo docker run -i -t -p 80:80 ubuntu /bin/bash
注:在执行此命令后,Docker可能需要为您创造一个新的容器之前拉 Ubuntu的形象。
记住:你将被连接到您所创建的容器。 为了分离自己并返回到您的主终端接入点,运行转义序列:CTRL + P后跟CTRL + Q。 附加到docker容器就像连接到另一个内部的一个新的Droplet。
要将自己重新添加到此容器中:
- 列出使用sudoDockerPS所有正在运行的容器
- 查找其ID
- 使用sudoDocker附加[ID]向后连接到其终端
重要提示:请不要忘记,因为我们是在一个容器,下面所有的命令将被那里执行,不影响主机。
准备Nginx安装的基本容器
为了安装Nginx和我们将需要的工具,相关的应用程序存储库必须可用于下载。
让我们Ubuntu的宇宙追加到基本图像的默认列表。
echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
使用新添加的源更新列表。
apt-get update
在我们继续安装Nginx之前,有一些工具,我们应该安装,如纳米 - 以防万一。
apt-get install -y nano \
wget \
dialog \
net-tools
安装Nginx
感谢它在存储库中可用,我们可以简单地使用apt-get下载并安装nginx。
apt-get install -y nginx
配置Nginx
使用我们在上一步中安装的文本编辑器nano,让我们创建一个示例Nginx配置来代理与应用程序服务器的连接。
# Delete the default configuration
rm -v /etc/nginx/nginx.conf
# Create a blank one using nano text editor
nano /etc/nginx/nginx.conf
首先,在文件的顶端,行必须被添加到不具有Nginx的产卵其进程,然后退出。
我们不能允许这种情况发生的原因是因为docker依赖于单个进程运行(甚至可以是一个进程管理器),当进程停止时(即在产生worker后退出),容器停止。
开始与以下作为第一线nginx.conf
:
daemon off;
我们将使用一个简单的示例配置让Nginx作为逆向代理运行。 复制并粘贴后,下面的daemon off;
指令。
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length 500;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/xml text/css
text/comma-separated-values
text/javascript
application/x-javascript
application/atom+xml;
# List of application servers
upstream app_servers {
server 127.0.0.1:8080;
}
# Configuration for the server
server {
# Running port
listen 80;
# Proxying the connections connections
location / {
proxy_pass http://app_servers;
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_set_header X-Forwarded-Host $server_name;
}
}
}
保存并退出,按CTRL + X并用Y确认。
要运行Nginx,可以执行以下命令:
service nginx start
就这样! 我们现在有Nginx的一个Docker的容器中,来自外部世界的80端口访问运行当我们开始使用-p 80:80
标志。
请记住:这Nginx的文件,尽管配置正确,不会做任何事情,因为目前有在服务器上运行的任何应用程序服务器。 而不是这个,你可以复制和使用另一个示例,它只是作为一个转发代理测试HTTP头,直到你的应用程序服务器的安装和工作。
创建Dockerfile以自动构建映像
正如我们在上一步中提到的,它肯定不是推荐的方式来创建容器这种方式为可扩展的生产。 正确的做法可以被认为是使用Dockerfiles以一种结构化的方式自动化构建过程。
在经过用于在容器中下载和安装Nginx的必要命令之后,我们可以使用相同的知识来构建Docker可以用来构建映像的Dockerfile,然后可以轻松地运行Nginx实例。
在我们开始处理Dockerfile之前,让我们快速阅读一些基础知识。
Dockerfile基础
Dockerfiles是含有这些都是由搬运工顺序来自动创建新的搬运工图像要执行依次声明命令的脚本。 他们非常有助于部署。
这些文件始终定义使用的基本映像开始FROM
命令。 从那里, 生成过程开始,每个下面的操作采取的形式,这将在主机上犯下的最终图像。
用法:
# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *nginx*)
# Example: sudo docker build -t [name] .
sudo docker build -t nginx_img .
注意:要了解更多有关Dockerfiles,看看我们的文章: Docker解释:使用Dockerfiles到自动图像大厦 。
Dockerfile命令概述
- ADD:将文件从主机复制到容器中
- CMD:设置要执行的默认命令,或传递到ENTRYPOINT
- ENTRYPOINT:设置容器内的默认入口点应用程序
- ENV:设置环境变量(例如key = value)
- EXPOSE:将端口暴露给外部
- FROM:设置要使用的基本映像
- MAINTAINER:设置Dockerfile的作者/所有者数据
- RUN:运行命令并提交结果结果(容器)图像
- USER:设置用户从映像运行容器
- VOLUME:从主机挂载到容器的目录
- WORKDIR:设置CMD的指示的目录要执行
创建Dockerfile
要使用nano文本编辑器在当前位置创建Dockerfile,请执行以下命令:
sudo nano Dockerfile
注意:追加所有下列行一前一后,形成Dockerfile被保存并用于建筑。
定义基础
让我们通过定义基础知识(基础知识)如开始我们Dockerfile FROM
图像(即Ubuntu的)和MAINTAINER
。
############################################################
# Dockerfile to build Nginx Installed Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
FROM ubuntu
# File Author / Maintainer
MAINTAINER Maintaner Name
Nginx的安装说明
按照上一节中的步骤,让我们形成安装Nginx的块。
# Install Nginx
# Add application repository URL to the default sources
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
# Update the repository
RUN apt-get update
# Install necessary tools
RUN apt-get install -y nano wget dialog net-tools
# Download and Install Nginx
RUN apt-get install -y nginx
引导
添加Nginx安装说明后,让我们完成配置Nginx和获取Dockerfile来替换默认配置文件,我们在构建期间提供。
# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf
# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/
# Append "daemon off;" to the beginning of the configuration
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
CMD service nginx start
最终Dockerfile
最后,这是Dockerfile应该是什么样子:
############################################################
# Dockerfile to build Nginx Installed Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
FROM ubuntu
# File Author / Maintainer
MAINTAINER Maintaner Name
# Install Nginx
# Add application repository URL to the default sources
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
# Update the repository
RUN apt-get update
# Install necessary tools
RUN apt-get install -y nano wget dialog net-tools
# Download and Install Nginx
RUN apt-get install -y nginx
# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf
# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/
# Append "daemon off;" to the beginning of the configuration
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
CMD service nginx start
再次通过按CTRL + X并使用Y确认保存并退出文件。
使用Dockerfile自动构建Nginx容器
当我们第一次在“基础”部分讨论时,Dockerfiles的用法包括使用“docker build”命令调用它们。
因为我们指示docker从当前目录复制一个配置(即nginx.conf)来替换默认配置,所以我们需要确保在开始构建过程之前将它放在这个Dockerfile旁边。
注: 在 Nginx的配置拷贝的上面解释的过程可以让你极大的灵活性和不处理安装和拆卸货柜自己创建配置文件节省了大量的时间。 现在你可以直接使用一个直接构建和运行图像。
创建示例nginx.conf
使用文本编辑器nano:
sudo nano nginx.conf
并替换其内容以将其用作测试的转发代理:
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
server {
listen 80;
location / {
proxy_pass http://httpstat.us/;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
让我们保存并退出nginx.conf,同样按CTRL + X并用Y确认。
这个docker映像将允许我们移植所有我们的进度,并用一个命令快速创建运行Nginx的容器。
要开始使用它,请使用以下内容构建新的容器图像:
sudo docker build -t nginx_img_1 .
并使用图像-我们已被标签为nginx的图 1 -我们可以运行一个新的容器:
sudo docker run -name nginx_cont_1 -p 80:80 -i -t nginx_img_1
现在您可以访问您的Droplet的IP地址,并且您的Nginx运行docker容器将执行其工作,将您转发到HTTP状态测试页。
例:
# Usage: Visit http://[my droplet's ip]
http://95.85.10.236/200
示例响应:
200 OK
有关完整的指令集来安装Docker(包括其他操作系统),检查了在docker.ioDocker安装文档 。