1. 下载nginx的Docker镜像
在Docker Hub有很多Nginx镜像,可以通过 docker search nginx
查看,如下:
[.. docker_nginx]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL
nginx Official build of Nginx. 13490 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1840
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 780
linuxserver/nginx An Nginx container, brought to you by LinuxS… 122
bitnami/nginx Bitnami nginx Docker Image 87
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 84
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 71
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 70
...
可以看到各种功能的nginx镜像和每个镜像的星级,并有一个是否为官方提供的镜像的标识。我这里下载官方镜像来使用。
通过 docker pull nginx
命令可以将nginx官方镜像下载下来,下载成功,通过 docker images
进行查看,如下:
[.. docker_nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 0901fa9da894 9 days ago 132MB
下载成功后,可以看到该镜像的各种信息,下面就可以开始使用了。
2. 部署nginx工程
现在nginx可以直接通过 docker run
跑起来,但使用的都是官方默认的配置文件、日志路径等。如果想在现实中使用,需要在本地配置 nginx.conf
文件、在本地放好证书(如果搭建HTTPS服务)和并在本地准备好日志目录。下面是我建的一个工程如下:
[.. docker_nginx]# tree
/usr/local/docker_nginx/
├── conf
│ └── nginx.conf
├── html
│ └── index.html
├── logs
│ ├── error.log
│ ├── http.log
│ └── https.log
└── ssl
├── certs.key
└── certs.pem
nginx.conf 的配置如下:
server {
listen 80;
server_name xxx
access_log logs/http.log main;
location / {
root html;
index index.html index.htm;
}
}
# HTTPS server
#
server {
listen 443 ssl;
server_name xx;
access_log logs/https.log main;
ssl_certificate /etc/ssl/cert/certs.pem;
ssl_certificate_key /etc/ssl/cert/certs.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
配置好这些后,就可以通过docker启动nginx了。
在运行docker之前,我们要了解nginx根目录的路径,这样方便准确将本地文件绑定到docker文件系统中。官方提供的nginx根目录是/etc/nginx/
,因此运行docker的命令为:
docker run -p 80:80 -p 443:443 -v /usr/local/docker_nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/docker_nginx/ssl:/etc/ssl/cert -v /usr/local/docker_nginx/logs:/etc/nginx/logs -v /usr/local/docker_nginx/html:/etc/nginx/html --name fengshenyun -d nginx
该命令简单解释下:
-v 80:80
:对外开放80端口-v 443:443
:对外开放443端口-v /usr/local/docker_nginx/conf/nginx.conf:/etc/nginx/nginx.conf
:将本地的nginx.conf文件绑定到docker对应的文件上,最后运行的是本地这个文件,后面几个-v
都是如此。-d nginx
:启动nginx镜像,这个镜像名就是通过docker images
命令看到的名字。
3. 验证
通过 docker ps
命令可以看到正在运行的nginx,如下:
[.. docker_nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd66ab32d468 nginx "/docker-e.." 25 minutes ago Up 25 minutes 0.0.0.0... fengshenyun
请求HTTP服务:
[.. docker_nginx]# curl "http://xx/index.html"
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
请求HTTPS服务:
[.. docker_nginx]# curl "https://xx/index.html"
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
验证成功、