实现一个自定义的web容器服务
拉取nginx镜像并运行
docker pull nginx
sudo docker run --name some-nginx -d -p 8000:80 nginx
更改默认Web目录的思路
尝试使用了官方readme中提供的
sudo docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
但是似乎没啥用(也可能是我写错了),菜鸟教程也没有,就去网上找了篇教程:更改nginx网站根目录 - irisrain - 博客园。
根据教程,只要修改/usr/local/nginx/conf/nginx.conf
中指定的路径就可以了。但在Dockerfile中修改文件似乎有点麻烦。于是想了个办法:把配置文件复制出来,在外面改好了再用COPY
命令直接覆盖原文件。
提取nginx配置文件
用容器中复制文件的命令:docker cp container:filepath destpath
,尝试复制
sudo docker cp some-nginx:/usr/local/nginx/conf/nginx.conf .
然而报错了
Error: No such container:path: some-nginx:/usr/local/nginx/conf/nginx.conf
用docker exec -it some-nginx /bin/bash
进容器看了下,确实不存在这个文件……找了半天才发现是在/etc/nginx
下
然而这个文件里面并没有server{}
。但是最后一行里有个include
,去这里看看。
这个文件里包含了server{}
,那它就是我们的目标了,把他复制到宿主机里。
sudo docker cp some-nginx:/etc/nginx/conf.d/default.conf .
listen
监听端口值,这里修改为2420
root
为Web默认目录,这里修改为/usr/share/nginx/my_web_dir
index
访问容器时默认展示的页面
Dockerfile
FROM nginx
COPY default.conf /etc/nginx/conf.d/ # 替换nginx配置文件
COPY my_web_dir/ /usr/share/nginx/my_web_dir/ # 复制Web文件到容器中
EXPOSE 8000 # 声明对外暴露的端口号
- 项目目录结构
构建并运行
sudo docker rm --force some-nginx # 之前的容器还占用着8000端口,先把它停掉
sudo docker build -t mynginx . # 构建镜像
sudo docker run --name myweb -d -p 8000:2420 mynginx # 运行容器
在浏览器访问localhost:8000