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

相关文章
|
4月前
|
缓存 JavaScript 前端开发
Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具
Dockerfile 是容器化开发中的关键工具。理解并掌握其使用方式,不仅能提高开发效率,还能让你的应用具备更强的可移植性和灵活性。通过优化配置和合理安排构建步骤,可以打造更轻量、更高效的容器镜像。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
1003 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
9月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
197 4
|
10月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
10月前
|
应用服务中间件 Linux nginx
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
285 20
|
9月前
|
监控 应用服务中间件 nginx
详细解释容器以及虚拟机centos7.9容器化部署基础服务(容器化部署nginx)
容器是一种轻量级、可移植的软件打包和隔离技术,将应用程序及其依赖项打包,确保在任何环境中一致运行。容器共享主机操作系统内核,相比虚拟机更高效、轻量,具有快速启动和高资源利用率的特点。容器的关键技术包括命名空间(如 PID、NET 等)、控制组(cgroups)和联合文件系统(UnionFS)。使用容器可以提高开发和部署效率,简化管理,确保环境一致性。例如,在 CentOS 7.9 上部署 Nginx 时,可以通过 Docker 下载和运行 `nginx:1.20` 镜像,并通过端口映射使外部请求访问 Nginx 服务。此外,还可以将测试页面复制到容器中,进一步验证容器的功能。
197 0
|
11月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
98 1
|
11月前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
11月前
|
Ubuntu 应用服务中间件 nginx
Docker 解析:如何将 Nginx 容器化并用作代理
Docker 解析:如何将 Nginx 容器化并用作代理
348 0
|
安全 持续交付 Docker
深入探索Dockerfile:构建容器化应用的秘密武器
深入探索Dockerfile:构建容器化应用的秘密武器