docker-nginx
新建目录
mkdir -p nginx/{log,conf,html}
切换到nginx目录下
cd nginx
你会看到3个文件夹conf,html,log
他们分别对应着容器中的文件目录,如下
宿主机下目录 | 容器中的文件目录 | 容器文件目录说明 |
---|---|---|
conf | /etc/nginx/conf.d | 默认配置文件目录 |
html | /usr/share/nginx/html | 静态文件目录 |
log | /var/log/nginx | 日志目录 |
简单启动
直接制作容器
docker run -p 80:80 --name sample-nginx -v $(pwd)/html:/usr/share/nginx/html:ro -d nginx
在html下创建一个index.html,设置一个简单内容
<!doctype html>
<title>Hello from Docker Nginx</title>
<h1>Hello World</h1>
<h1>Hello from Docker Nginx</h1>
你访问你的服务器ip会发现,页面显示了你的内容.
Dockerfile制作容器
将dockerfile文件放在第一步新建的nginx目录下(也可自己重新创建一个目录)
FROM nginx
COPY html /usr/share/nginx/html
执行该命令
docker build -t some-content-nginx .
注意:其中.表示当前Dockerfile的目录
运行你的容器
docker run --name some-nginx -d some-content-nginx
暴露对外端口
docker run --name some-nginx -d -p 8080:80 some-content-nginx
-p指令
复杂配置
获取一个默认的配置文件,方法如下
docker run --name tmp-nginx-container -d nginx
docker cp tmp-nginx-container:/etc/nginx/nginx.conf $(pwd)/nginx.conf
docker rm -f tmp-nginx-container
有了nginx.conf后,可以进行自定义编辑,编辑完然后使用如下命令
直接启动方式
docker run --name pkuer_nginx -d -p 80:80 \
-v $(pwd)/log:/var/log/nginx \
-v $(pwd)/conf:/etc/nginx/conf.d \
-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf \
-v $(pwd)/html:/usr/share/nginx/html nginx
- 第一个-v:挂载日志目录
- 第二个-v:挂载配置目录
- 第三个-v:挂载主配置文件
- 第四个-v:挂载项目目录
Dockerfile方式
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
#EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。
#在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;
#另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
EXPOSE 80
#entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。
#但是可以通过参数传递的方法影响到container内部,每个Dockerfile只能够包含一个entrypoint
#当定义了entrypoint以后,CMD只能够作为参数进行传递
ENTRYPOINT ["nginx"]
#相当于在容器执行:nginx -g "daemon off;"
CMD ["-g","daemon off;"]
执行该命令
docker build -t complex_nginx .
运行你的容器
docker run --name my-complex-nginx -d complex_nginx