一、获取 nginx 镜像
1.获取 nginx 镜像列表
docker search nginx
2.拉取 nginx 镜像到本地(注:默认选取官方最新镜像),其它版本可以去 DockerHub 查询
docker pull nginx
3.查看镜像库,获取本地的 nginx 镜像信息
docker images nginx
二、启动容器,部署 nginx 并修改配置文件
首先测试下 nginx 镜像是否可用
使用:
docker run -d --name nginx -p 80:80 0839
创建并启动nginx容器
-d 指定容器以守护进程方式在后台运行
–name 指定容器名称,此处我指定的是nginx
-p 指定主机与容器内部的端口号映射关系,格式 -p [宿主机端口号]:[容器内部端口],此处我使用了主机80端口,映射容器80端口
命令执行后返回了容器 ID,此时我们已经成功创建了 nginx 容器
到这里我们已经完成了 nginx 容器的搭建,但是此时还有个问题,我们如何修改 nginx 的配置文件?
三、修改nginx的配置文件
这里有两种方式解决这个问题
方式一:每次都进入到nginx容器内部修改
每次都进入到nginx容器内部修改。适合改动少,简单使用的情况
1.执行·docker exec -it ef /bin/bash
·进入到nginx容器内部,
exec 命令代表附着到运行着的容器内部
-it 是 -i 与 -t两个参数合并写法,-i -t 标志着为我们指定的容器创建了TTY并捕捉了STDIN
ef 是我们要进入的容器Id
/bin/bash 指定了执行命令的shell
2.进入到 nginx 容器内部后,我们可以 cd /etc/nginx,可以看到相关的 nginx 配置文件都在/etc/nginx 目录下
而 nginx 容器内的默认首页 html 文件目录为/usr/share/nginx/html
日志文件位于/var/log/nginx
3.执行 exit 命令我们可以从容器内部退出。
方式二:将 nginx 容器内部配置文件挂载到主机
将 nginx 容器内部配置文件挂载到主机,之后就可以在主机对应目录修改即可。适合频繁修改,复杂使用的情况
1.在主机/mnt 目录下执行 mkdir -p ./nginx/{html,logs,conf}
创建挂载目录
将容器中的相应文件 copy 到刚创建的管理目录中
docker cp dbc:/etc/nginx/nginx.conf /docker-work/nginx/
docker cp dbc:/etc/nginx/conf.d /docker-work/nginx/conf/
docker cp dbc:/usr/share/nginx/html/ /docker-work/nginx/html/
docker cp dbc:/var/log/nginx/ /docker-work/nginx/logs/
注:docker cp dbc 中的 "dbc" 为容器ID前缀,只要唯一就好了
停止并移除容器
命令:
停止容器:docker stop dbc
移除容器:docker rm dbc
再次启动容器并作目录挂载命令,重新创建 nginx 容器
docker run --name nginx -m 200m -p 80:80 \
-v /docker-work/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker-work/nginx/logs:/var/log/nginx \
-v /docker-work/nginx/html:/usr/share/nginx/html \
-v /docker-work/nginx/conf:/etc/nginx/conf.d \
-e TZ=Asia/Shanghai \
--privileged=true -d nginx
参数说明
-name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定
-v 挂载文件用的,
-m 200m 分配内存空间
-e TZ=Asia/Shanghai 设置时区
第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,
第二个-v 表示将日志文件进行挂载,就是把nginx服务器的日志写到你docker宿主机的/home/docker-nginx/log/下面
第三个-v 表示的和第一个-v意思一样的。
-d 表示启动的是哪个镜像
到这里就大功告成了!
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream spider_server {
server 150.158.34.127:3001;
}
#触发条件,所有访问ip 限制每秒10个请求
limit_req_zone $binary_remote_addr zone=one:20m rate=50r/s;
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;
server {
listen 80;
server_name blogfile.itspeeding.com;
root /var/www/oneblog/upload/;
autoindex off;
autoindex_exact_size off;
autoindex_localtime off;
location ^~ / {
proxy_set_header Host $host:$server_port;
}
}
server {
listen 80;
server_name blogd.itspeeding.com;
location /{
proxy_pass http://150.158.34.127:8443;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
client_max_body_size 10m;
}
}
server {
listen 80;
server_name blogdadmin.itspeeding.com;
location /{
proxy_pass http://150.158.34.127:8085;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
client_max_body_size 10m;
}
}
}