前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >定制自己的Docker镜像

定制自己的Docker镜像

作者头像
机智的程序员小熊
发布2019-12-12 15:57:25
9310
发布2019-12-12 15:57:25
举报
文章被收录于专栏:技术面面观

好的剧本是一部好电影的出发点,这次我们来当一回编剧。——编程三分钟

概述

演员表:Nginx容器、一个只会说hello worldhtml文件。

剧本:一个名为Dockerfile的文件,记录了修改、安装、构建、操作的整个过程,我们将会用这个脚本来构建、定制镜像。

场景:docker环境。

演员表

一号演员index.html出场并对大家说了一句Hello World

代码语言:javascript
复制
<h1>Hello World</h1>

二号演员nginx:alpine,他是一个现成的docker镜像,我们熟知的nginx:latest是他的小弟弟,他比弟弟厉害的地方有三个:

  1. 用的是最新版nginx镜像,功能与nginx:latest一模一样。
  2. alpine镜像用的是Alpine Linux内核,比ubuntu内核要小很多。
  3. nginx:alpine默认支持http2

剧本

一部电影成功的最主要原因是有一个很好的故事,让我们来看看剧本。

创建一个Dockerfile文件,一般分为四个部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令。内容如下

代码语言:javascript
复制
# 基础镜像信息

FROM nginx:alpine

# 维护者信息

MAINTAINER docker_user docker_user@email.com

# 镜像操作指令

COPY . /usr/share/nginx/html

RUN echo hello
  • FROMnginx:alpine的Docker镜像创建一个图层。
  • MAINTAINER标记镜像维护人信息。
  • 镜像操作指令 :
  1. COPY 把当前目录的文件复制到/usr/share/nginx/html,至于为什么是这个目录是因为官网镜像就是以这个目录作为静态网站部署目录。
  2. 格式RUN RUN ["executable", "param1", "param2"];前者将在shell终端中运行命令,即/bin/sh -c,后者则使用exec执行,推荐使用。
  • 容器启动时执行指令: CMD命令,用法和RUN一样,用来指定运行容器时的操作命令,因为我们是基于nginx镜像来制作我们的镜像,相当于加了一个壳,此处nginx镜像里已经自己写了启动方式,所以我们就不用再写一次了。

拍戏

剧本写完以后,在Dockerfile所在文件夹路径下执行命令:docker build --tag name:tag .,就可以按照描述构建一个镜像了。name是镜像的名称,tag是镜像的版本或者是标签号,不写就是lastest。注意后面有一个空格和点。

代码语言:javascript
复制
# 用法

docker build [选项]  路径

打镜像

代码语言:javascript
复制
$ docker build -t webserver-image:v1 .

Sending build context to Docker daemon 3.072kB

Step 1/4 : FROM nginx:alpine

 ---> bfba26ca350c

Step 2/4 : MAINTAINER docker_user docker_user@email.com

 ---> Using cache

 ---> a8b84ca6d5a1

Step 3/4 : COPY . /usr/share/nginx/html

 ---> b25123c06e56

Step 4/4 : RUN echo hello

 ---> Running in 7c86a7bca405

hello

Removing intermediate container 7c86a7bca405

 ---> 55bcba5b3ab9

Successfully built 55bcba5b3ab9

Successfully tagged webserver-image:v1

使用docker images命令查看镜像

代码语言:javascript
复制
$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

webserver-image v1 55bcba5b3ab9 44 seconds ago 20.5MB

nginx alpine bfba26ca350c 2 weeks ago 20.5MB

指定webserver-image:v1镜像,-d后台运行容器,并镜像的80端口映射到本地的80端口。

代码语言:javascript
复制
$ docker run -d -p 80:80 webserver-image:v1

fe5dd3369f7766cf078c4049cad1c99fc444cac56752d2a1393b64fd46e43c4d

查看运行效果

代码语言:javascript
复制
$ curl 0.0.0.0:80

<h1>Hello World</h1>

其他

学过git的都知道,.gitignore文件可以忽略追踪,docker也有类似的文件,名为.dockerignore,例如在此文件内写入以下忽略的文件和文件夹内容

代码语言:javascript
复制
.git/
logs
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机智的程序员小熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 演员表
  • 剧本
  • 拍戏
  • 其他
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档