Docker--------Dockerfile实战

1. 背景

   Dockerfile是为快速构建docker image[镜像]而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大小写均可)的纯文本文件并执行里面的指令构建出一个docker image。这比SaltStack的配置管理要简单的多,不过还是要掌握一些简单的指令。

Dockerfile 由一行行命令语句组成,并且支持以#开头的注释行。指令是不区分大小写的,但是通常我们都大写。

2. Dockerfile内容结构

* 基础镜像信息

* 维护者信息

* 镜像操作指令

* 容器启动时执行指令

3. 常用指令

*. FROM   指定基础镜像

   格式:FROM<image>或FROM<image>:<tag>

FROM是Dockerfile里的第一条指令(必须是),后面跟有效的镜像名(如果该镜像你的本地仓库没有则会从远程仓库Pull取)。然后后面的其它指令FROM的镜像中执行。

# Base image
FROM centos

*. MAINTAINER  维护者信息

格式:MAINTAINER <name>

# Maintainer
MAINTAINER lisea [email protected]

*. RUN 指定运行命令  [可以指定多条]

格式:RUN <command>或 RUN[“executable”, “param1”, “param2”]。

# Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

*.  EXPOSE 设置容器内部暴露的端口号

EXPOSE 80

*.  CMD 指定容器启动是执行的命令,可被启动容器参数覆盖

   格式: 

    CMD [“executable”,”param1″,”param2″]  使用exec 执行,推荐方式

    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用

CMD [“param1″,”param2”] 提供给ENTRYPOINT的默认参数

CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。

如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。

CMD ["nginx"]

*.  ENTRYPOINT 指定容器启动是执行的命令,不可被启动容器参数覆盖

  格式:

   ENTRYPOINT [“executable”, “param1″,”param2”]

   ENTRYPOINT command param1 param2(shell中执行)

ENTRYPOINT ["nginx"]

*.  ADD  添加文件至容器内部,如果文件是可识别的压缩包会自动解压

   格式:

   ADD <src>… <dest>

   ADD [“<src>”,… “<dest>”]

ADD index.html /usr/share/nginx/html/index.html

*.  USER 指定容器运行用户名和UID

   格式: USER root

USER root

4. 实战

* 构件nginx镜像,基础镜像为centos, 容器内部暴露端口为80, 添加文件index.html主页文件至nginx html目录下.

   创建index.html文件

[[email protected] nginx]# echo "http://lisea.blog.51cto.com" > index.html

   编写 dockerfile 文件  vim dockerfile

# Nginx
# 1.0.1
# Author lisea

# Base image
FROM centos

# Maintainer
MAINTAINER lisea [email protected]

# Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# Add files
ADD index.html /usr/share/nginx/html/index.html

EXPOSE 80
CMD ["nginx"]

   构建镜像,名称为lisea/nginx tag为1.0.1

[[email protected] nginx]# docker build -t lisea/nginx:v1.0.1 .

查看本地镜像

[[email protected] nginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lisea/nginx         v1.0.1              010fff3a1451        6 seconds ago       387.2 MB
docker.io/centos    latest              3bee3060bfc8        9 days ago          192.5 MB

5. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

时间: 2024-08-05 20:04:29

Docker--------Dockerfile实战的相关文章

DockerFile实战(二):DockerFile编写要求与基本风格

之前分享了一个Nginx的Dockerfile实战文章,但这是基于原有镜像的基础上去添加修改的,那么本文 来详细讲解一下,如何从ubuntu镜像生成一个Nginx镜像 Step1: #最开始,还是需要先搜索一个可用的镜像 $docker search ubuntu #在这里,可以看到许多的相关镜像,但这里我们安装第一个就可以,可以看STARS评级很高的那个 $docker pull ubuntu #如果网络情况够好的话,稍等片刻,一个可用的镜像就下载完毕了 Step2: 下载完镜像以后,我们需要

构建Docker镜像实战之构建Tomcat9.0镜像(RPM一键安装Java环境)

构建Docker镜像实战之构建Tomcat9.0镜像(RPM一键安装Java环境) tomcat是一个免费开源的轻量级web服务器,在中小型企和并发访问量不高的场合普遍使用,是开发和调试JSP程序的首选.下面使用Dockerfile文件的方式来创建带有tomcat服务的Dockerfile镜像.(注:这里的Java环境是使用rpm一键式安装的且小编创建的是tomcat9.0的镜像) 下面直接开始实验 关闭防火墙及SELinux systemctl stop firewalld.service s

Docker 监控实战 教你如何监控 Docker 容器内部

如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 60 天内. 越大型的公司越早开始使用 Docker 研究发现主机数量越多的公司,越早开始使用 Docker.而主机数量多,在这个研究里就默认等同于是大型公司了. Docker 优势 那为什么 Docker 越来越火呢?一谈起 Docker 总是会跟着让人联想到轻量这个词,甚至会有一种通过 Dock

Docker虚拟化实战学习——基础篇(转)

Docker虚拟化实战学习--基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker Docker虚拟化实战和企业案例演练 深入剖析虚拟化技术概念和应用场景 虚拟化,一是项技术--,是一种资源解决方案. 虚拟化技术是将物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒,使计算元件运行在虚拟的基础上,而不是真实的物理资源上. 通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上.

Docker下实战zabbix三部曲之一:极速体验

对于想学习和实践zabbix的读者来说,在真实环境搭建一套zabbix系统是件费时费力的事情,本文内容就是用docker来缩减搭建时间,目标是让读者们尽快投入zabbix系统的体验和实践: 环境信息 以下是本次操作的环境: 操作系统:MacBook Pro Docker:19.03.2 全系列文章链接: 三部曲系列一共三篇文章,链接如下: <Docker下实战zabbix三部曲之一:极速体验>: <Docker下实战zabbix三部曲之二:监控其他机器>: <Docker下实

构建Docker镜像实战案例

Dockerfile介绍 Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像. Dockerfile大致结构:基础镜像信息.维护者信息.镜像操作指令.容器启动时执行指令.每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释. Dockerfile操作指令: FROM 镜像 : 指定新的镜像所基于的镜像MAINTAINER 名字 :说明新镜像的维护人RUN 命令 : 在所基于的镜像上执行命令,并

9、Dockerfile实战-Nginx

上一节我们详解Dockerfile之后,现在来进行实战.我们通过docker build来进行镜像制作. build有如下选项: [[email protected] ~a]# docker build --help Usage: docker build [OPTIONS] PATH | URL | - Build an image from a Dockerfile Options: --add-host list Add a custom host-to-IP mapping (host:

6.19 docker (一)实战Django

实战 Django [[email protected] ~]# mkdir django_test [[email protected] ~]# cd django_test/ 第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 Dockerfile 文件来指定 Docker 容器要安装内容.内容如下[[email protected] django_test]#vi  Dockerfile FROM python:3 ENV PYTHONUNBUF

Dockerfile实战:构建基础的ubuntu14.04镜像

我们可以从Docker Hub上下载官方仓库中的镜像,我自己就下载了ubuntu镜像,只有188M左右,很小巧了.但是看了下,里面的软件源还是官方的,而且没有安装vim,所以就打算自己写一个Dockerfile,用它来构建适合自己的ubuntu基础镜像. deb http://archive.ubuntu.com/ubuntu/ trusty main restricted deb-src http://archive.ubuntu.com/ubuntu/ trusty main restric

Docker Dockerfile详解

dockerfike快速创建自定义的Docker镜像 一.目录 1.docker典型结构 2.指令介绍 3.创建docker镜像 二.结构 DockerFile分为四部分组成:基础镜像信.维护者信息.镜像操作指令和容器启动时执行指令.例如: #第一行必须指令基于的基础镜像 From ubutu #维护者信息 MAINTAINER docker_user [email protected] #镜像的操作指令 apt/sourcelist.list RUN apt-get update &&