DockerFile创建一个nginx容器的全过程

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

首先,随便建立一个文件夹,比如我先# mkdir sample,然后我在这个sample里建立一个Dockerfile,内容如下:

1
2
3
4
5
6
7
8
FROM ubuntu:14.04
MAINTAINER Chris Chan  "chenx1242@163.com"
ENV REFRESHED_AT 2016-12-05
RUN apt-get -y update && apt-get  install  -y nginx
RUN  mkdir  -p  /var/www/html/website
ADD nginx /global .conf  /etc/nginx/conf .d/
ADD nginx /nginx .conf  /etc/nginx/nginx .conf
EXPOSE 80

从这个Dockfile里面看出:我们使用了ubuntu的基础镜像,然后下载了nginx,同时建立一个/var/www/html/website文件夹,然后又拷贝了宿主机上的两个文件,一个是global.conf,另一个是nginx.conf,这两个文件需要我们自己写。于是我们就要在sample下再建立一个叫nginx的文件夹,里面写上这两个文件,其中global.conf的内容如下:

1
2
3
4
5
6
7
8
server {
         listen   0.0.0.0:80;
         server_name     _;
         root     /var/www/html/website ;
         index   index.html index.htm;
         access_log       /var/log/nginx/default_access .log;
         error_log        /var/log/nginx/default_error .log;
}

而nginx.conf的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
user www-data;
worker_processes 4;
pid  /run/nginx .pid;
events { }
http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  include  /etc/nginx/mime .types;
  default_type application /octet-stream ;
  access_log  /var/log/nginx/access .log;
  error_log  /var/log/nginx/error .log;
  gzip  on;
  gzip_disable  "msie6" ;
  include  /etc/nginx/conf .d/*.conf;
}

全部搞定之后,我们就来build这个镜像,比如这个镜像名叫做chentest/nginx001,在sample文件夹里使用的命令语句就是:# docker build -t='chentest/nginx001' .


一顿七七八八之后,显示OK,#docker ps -a就会显示我们新建的镜像,如图:

wKioL1hPr5Wzq9jYAAC8CyoBnZ0316.png

有了镜像,再在sample文件夹里新增一个文件夹,比如就叫webiste,里面有一个文件叫index.html。而index.html的内容如下:

1
this is a nginxtest page.

保存退出之后,返回到sample目录。


现在我们可以制作一个容器了,制作容器命令是# docker run -d -p 8080:80 --name test02 -v $PWD/website:/var/www/html/website chentest/nginx001 nginx -g "daemon off;",这句话里规定容器的8080端口映射到宿主机的80端口,同时引入了当前目录的website目录到容器的/var/www/html/website目录,nginx也默认在前台进程进行。执行之后,#docker ps -a看一下:

wKioL1hPsUnhLc5dAABq-RCNxDQ577.png


看见port这一栏已经显示8080与80端口的相勾结成功,于是我们可以登录这台机器的80端口看一下。

wKioL1hPsc-TLkazAABWGQfvOaI058.png


而如果现在我更改一下上面的index.html,改成另外一句话。比如说改成“why so serious??”,保存文件之后,直接刷新网页,就会看到网页的内容已经发生了变化,如图:

wKioL1hPsmuTiQdqAABJEdV-BLw442.png

可见引入-v这个命令在容器里,可以随时调试内容,而不是每次都要重新打包生成镜像。这一点再调试阶段为我们提供了很大的方便。


至此,整个nginx容器的制作过程结束,我们多说一下docker端口映射的问题。


docker run命令里指定端口的格式是," -p 容器端口:宿主机端口"。如果想要随机指定就是大写的P。如图:

wKioL1hPs1rS6psyAACDV865u4k073.png

这里就是随机分配了一个32775端口给宿主机,访问的时候也是要访问这个32775端口。


有时候port这里却不显示端口映射的情况,如图:

wKiom1hPs82CrTG_AAClT4LqrOk702.png

这个情况是因为这个容器的status是exited,Docker 会在容器主进程结束后自动终止容器运行,而 nginx 启动后就会在后台运行,docker 以为 nginx 已经结束运行了,所以就会停止容器。



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1882330

相关文章
|
7月前
|
网络协议 应用服务中间件 nginx
使用Dockerfile编写源码安装Nginx镜像
使用Dockerfile编写源码安装Nginx镜像
106 0
|
9天前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
133 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
9天前
|
前端开发 应用服务中间件 nginx
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
|
6月前
|
应用服务中间件 nginx Docker
nginx反向代理踩坑(容器方式)
nginx反向代理踩坑(容器方式)
200 0
|
9天前
|
缓存 应用服务中间件 nginx
Docker六脉神剑 (三) 编写Dockerfile构建nginx镜像并推送到远程仓库给其他人使用
Docker六脉神剑 (三) 编写Dockerfile构建nginx镜像并推送到远程仓库给其他人使用
34 0
|
9天前
|
应用服务中间件 nginx Docker
使用Docker构建本地Nginx容器及配置
使用Docker构建本地Nginx容器及配置
68 2
|
9天前
|
NoSQL Java 应用服务中间件
跟着腾讯T4学架构:微服务+MySQL+Nginx+Redis+容器化+虚拟机
深入理解Java虚拟机》 但要想真的深入理解虚拟机一问肯定远远不够的,但是本文中分三部分对JVM有深入的解析。
|
5月前
|
应用服务中间件 nginx Docker
将 react-typescript + django 部署到 nginx 容器(docker)
将 react-typescript + django 部署到 nginx 容器(docker)
72 0
|
7月前
|
应用服务中间件 Linux nginx
百度搜索:蓝易云【Docker容器安装Nginx教程。】
注意:在运行容器时,可以根据需要使用其他参数进行自定义配置,例如将本地文件挂载到容器中,或者使用自定义配置文件等。这些配置超出了本教程的范围,但你可以参考Docker文档和Nginx文档以获取更多详细信息。
191 2
|
4天前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第20天】 在微服务架构日益普及的今天,Docker作为其重要的实现技术之一,承载着大量应用的运行。然而,随之而来的是对于容器健康状态、资源使用情况以及性能指标的监控需求急剧增加。本文旨在探讨构建一个高效且稳定的Docker容器监控体系,不仅涵盖了监控工具的选择与配置,还详细阐述了监控数据的分析与处理流程。通过精心设计的监控策略和实时响应机制,我们能够确保系统的稳定性,并及时发现及处理潜在的问题。