第一步,上http://hub.docker.com查找最新nginx发布版本
第二步,拉取镜像,简单运行镜像,进入容器查看需要外挂的文件。
# 拉取版本号为1.20.1的nginx镜像
docker pull nginx:1.20.1
# 以拉取的镜像运行一个配置了80:80的容器,容器名字为 nginx
docker run --name nginx -p 80:80 nginx:1.20.1
# 进入名字为nginx的容器查看容器目录,
docker exec -it nginx /bin/bash
ls
先根据别的容器使用经验,先去/usr/share/nginx下面看下。找到nginx默认的html路径。确定该路径需要外挂
/usr/share/nginx下面没有找到配置文件,回根路径,在/etc里面找到nginx配置路径,同时发现了module文件夹。
在使用https://cn.bing.com搜索一下别人的外挂文件经验确定下来,需要外挂的有两个文件夹。
第三步,退出容器,复制指定文件至宿主机目录
# 退出容器
exit
docker cp nginx:/etc/nginx /data
docker cp nginx:/usr/share/nginx/html /data/nginx
# 进入宿主机外挂文件夹下看下文件,发现modules指向无效引用。还好我宿主机**/usr/lib/nginx/modules**下没有东西
cd /data/nginx && ll
# 复制**modules**文件夹至宿主机
# 这里报错 cannot overwrite non-directory "/data/nginx/modules" with directory "/data/nginx",需要先删除宿主机现在的modules引用才行
rm -r /data/nginx/modules
# 复制实际文件夹出来
docker cp nginx:/usr/lib/nginx/modules /data/nginx
第四步:关闭容器并删除容器,指定外挂文件夹启动容器
# 关闭容器名(或者容器id)为nginx的容器
docker stop nginx
# 删除容器
docker rm nginx
# 指定外挂文件夹启动容器
docker run --name nginx
-p 80:80
-v /data/nginx/html:/usr/share/nginx/html
-v /data/nginx/modules:/usr/lib/nginx/modules
-v /data/nginx:/etc/nginx
nginx:1.20.1
看到启动成功,使用curl测试一下
扩展
初始启动指令只配置了一个端口映射,而nginx作为一个代理软件,后续肯定回新增端口代理的。所以需要为容器新增端口映射
docker 新增容器端口映射
配置文件代理,顺便验证stream流模块是否正常
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
server {
listen 8090;
proxy_pass 127.0.0.1:8080;
}
}
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 8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
autoindex on;
}
}
}