nginx-docker在搭建静态页面方面的使用

背景

一直以来都想使用docker做点什么,
此次以使用nginx的docker来搭建静态网页博客一事练手.

背景

假设已经存在一个临时的文件夹,
结构是

1
2
3
blog-nginx-docker-test
├── Dockerfile (之后用到)
└── public/ (存放待发布的网页)

方法一

直接运行nginx的docker,通过指定卷映射的方式让里面的nginx得到文件.

1
2
3
4
5
docker run --name some-nginx --rm
-p 8181:80
-v /path/to/public:/usr/share/nginx/html
-v /path/to/test.conf:/etc/nginx/conf.d/default.conf
nginx:latest

此方法相当于将nginx的docker当作一个nginx的软件来用,没有太多现实意义.
能装上docker环境的系统应该都能装上nginx吧.
(马上打脸,mac上通过brew安装的nginx连用都不想用,直接换了docker来跑)

等效的 docker-compose 文件

1
2
3
4
5
6
7
8
9
10
11
web:
image: nginx:latest
container_name: some-nginx
volumes:
- /path/to/public:/usr/share/nginx/html
- /path/to/test.conf:/etc/nginx/conf.d/default.conf
ports:
- "8181:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80

方法二

docker hub上nginx的官方使用说明很全面,
可以将待发布的页面打包在docker镜像中使用.
相比使用卷,该方法更加’干净’,使用者也不用准备网页文件了.
Dockerfile 中写:

1
2
FROM nginx
COPY ./public /usr/share/nginx/html

然后使用

1
2
3
docker image build -t some-nginx . # 打包
docker images # 确认
docker run --name some-nginx -d some-nginx # 启动

方法三

可以在nginx的docker运行时将文件拷贝进去,
然后中途用commit制作一个镜像

1
2
3
4
docker cp public/. nginx:/usr/share/nginx/html  # 拷贝文件
docker commit -m 'put some file into docker' nginx new-nginx # 打包镜像
docker images # 确认
docker run --name new-nginx -d new-nginx # 运行

注意此处如果只写了 public, 就会造成 /usr/share/nginx/html/public/ 的效果,
docker的官方文档有说明

参考

  1. docker~hub上nginx的官方使用说明~
  2. docker cp文件夹相关