简介
本文介绍使用Docker安装Nginx的方法。
需求:使用Docker部署Nginx并成功访问.html静态文件。
实例1(Docker外部配置Nginx)
1.获取Nginx镜像
- 搜索镜像
docker search nginx
- 可以发现有很多镜像。第一个镜像是官方的,我们选择一个版本:1.23.3
- 拉取镜像
docker pull nginx:1.23.3
- 查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE nginx 1.23.3 3964ce7b8458 2 weeks ago 142MB
2.拷贝配置到外部
- 创建外部配置目录(放到:/work/middle/nginx下边)
mkdir -p /work/middle/nginx/{config,logs,html}
- 创建并启动nginx容器(以生成默认的配置文件)
- 创建nginx容器
docker run --name nginx1.23.3 -P -d nginx:1.23.3
- 查看容器的id
- docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 793431c0c200 nginx:1.23.3 "/docker-entrypoint.…" 24 hours ago Up 29 minutes xxx nginx1.23.3
- 创建nginx容器
- 将内部配置文件拷贝到外部
docker cp 7934:/etc/nginx/nginx.conf /work/middle/nginx/config/nginx.conf docker cp 7934:/etc/nginx/conf.d/ /work/middle/nginx/config/conf.d/ docker cp 7934:/var/log/nginx/ /work/middle/nginx/logs/ docker cp 7934:/usr/share/nginx/html/ /work/middle/nginx/html
//注意:使用CONTAINER ID的前几位就可以。此处也可以用NAMES。
3.修改配置文件
简介
假设:我们想通过10000端口来访问index.html
原来的配置文件(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; }
修改之后(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; server{ listen 10000; server_name _; root /usr/share/nginx/html/; index index.html; } }
注意
所有的配置路径都是docker内部的路径,不要写:/home/docker-config/xxx这种。我们后边会通过路径映射的方式启动,docker会自动从外部路径获得数据。
4.关闭并删除原先的nginx容器
关闭
docker stop nginx1.23.3
删除
docker rm nginx1.23.3
5.以外部配置启动容器
命令
sudo docker run --name nginx1.23.3 -d -p 10000:10000 \ -v /work/middle/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /work/middle/nginx/conf.d:/etc/nginx/conf.d \ -v /work/middle/nginx/logs:/var/log/nginx \ -v /work/middle/nginx/share/html:/usr/share/nginx/html \ nginx:1.23.3
说明
这样通过创建映射的方式启动,当我们用docker exec -it xxx /bin/bash 进去查看配置时可以发现,它所有配置跟外部配置是一样的。
这里,我猜测,有以下两种可能。
- docker先把外部配置拷贝到内部容器,然后启动
- docker在我们访问内部配置的时候,实际访问的还是外部的配置,它相当于一个快捷方式一样的一个链接。
6.测试
访问:ip:10000
实例2(Docker内部配置Nginx)
1.获取Nginx镜像
跟上边一样。
2.创建并启动容器
- 创建nginx容器
- docker run –name nginx1.23.3 -p 10000:10000 -d nginx:1.23.3
- 关闭:docker stop nginx1.23.3
3.修改配置文件
简介
假设:我们想通过10000端口来访问index.html
原来的配置文件(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; }
修改之后(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; server{ listen 10000; server_name _; root /usr/share/nginx/html/; index index.html; } }
4.再次启动
docker start nginx1.23.3
请先
!