【Docker自定制镜像之Dockerfile】--2019-08-06 15:20:55

原创链接: http://106.13.73.98/__/105/

镜像的定制,就是定制每一层所添加的配置、文件,如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本中,用脚本来构建、定制镜像,这个脚本就是Dockerfile

Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是没每一层应当如何构建的.

Dockerfile ---------??

FROM
指定基于哪个镜像文件来构建新的镜像,尽量使用官方的bash image
示例:
FROM 镜像名/镜像ID[:tag]

LABEL
容器元消息,帮助信息,Metadata,类似于代码注释
示例:
LABEL version="1.0" 版本标示
LABEL maintainer="name @163.com" 声明制作人

RUN
创建镜像时执行的命令

WORKDIR
切换工作目录

COPY
把本机的文件添加到容器中
示例:
COPY flask_web.py /app/ 把本机的flask_web.py文件复制到容器中的/app目录下,会自动创建/app目录

ADD
除了COPY的功能外还有解压功能,应优先使用COPY命令

ENV
设置环境变量,尽可能的使用ENV来设置环境变量,以增加可维护性
示例:
ENV MYSQL_VERSION 5.6 设置一个MySQL常量
RUN yum install -y mysql-server="${MYSQL_VERSION}" 调用MySQL常量

CMD
设置容器启动后默认执行的命令和参数
??如果定义多个CMD,则只有最后一个会执行
??如果 docker run 时指定了其它命令(例如:/bin/bash、python flask_web.py),则CMD命令会被忽略

EXPOSE
网络设置
示例:
EXPOST 8080 暴露容器的8080端口

VOLUME
存储设置

ENTRYPOINT
设置容器启动时运行的命令
让容器以应用程序或服务的形式运行,不会被忽略,一定会执行

关于Shell格式和Exec格式



对于相对的命令,Shell格式与Exec格式的对比如下.

Shell格式

RUN yum -y install vim
CMD echo "Hello Docker"
ENTRYPOINT echo "Hello Docker"

Exec格式

RUN ["apt-get", "install", "-y", "vim"]
CMD ["/bin/echo", "Hello Docker"]
ENTRYPOINT["/bin/echo","Hello Docker"]


需要注意的是:
通过Shell格式运行的命令可以读取设置的变量,而Exec格式则不可以读取,Exec格式仅仅是执行一个命令.

下面将使用Dockerfile来制作一个Flask Web服务

首先,准备一个用于调用Flask web服务的脚本:

"""flask_web.py文件代码如下"""
from flask import Flask
app=Flask(__name__)
@app.route('/')
def run():
    return 'is ok'
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)  # 我们这里使用的是8080端口

然后,开始写Dockerfile:

# 指定基于哪个基础镜像来构建
FROM python:2.7

# 制作人
LABEL maintainer='zyk [email protected]'

# 安装flask第三方库
RUN easy_install flask

# 将本机的flask_web.py文件复制到容器的/app目录下,会自动生成/app目录
COPY flask_web.py /app/

# 进入/app目录
WORKDIR /app

# 暴露容器的8080端口
EXPOSE 8080

# 设置容器启动后默认执行的命令和参数,以Exec格式执行,注意:要用双引号
CMD ["python", "flask_web.py"]

最后,制作镜像:

# ?? Dockerfile与flask_web.py文件在同级目录
[[email protected] docker]# ls
Dockerfile  flask_web.py

# 开始制作镜像
[[email protected] docker]# docker build -t zyk/flask .

制作完成后,查看镜像并启动:

# 查一下镜像ID
[[email protected] docker]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
zyk/flask                   latest              c4e156f3222a        50 seconds ago      911 MB

# 启动镜像
[[email protected] docker]# docker run -d -p 9000:8080 c4e156f3222a

好了,打开浏览器访问测试:

原文地址:https://www.cnblogs.com/gqy02/p/11309170.html

时间: 2024-11-14 05:29:00

【Docker自定制镜像之Dockerfile】--2019-08-06 15:20:55的相关文章

【Docker自定制镜像之Dockerfile】

镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是没每一层应当如何构建的. Dockerfile ---------?? FROM 指定基于哪个镜像文件来构建新的镜像,尽量使用官方的bash image 示例: FROM 镜像名/镜像ID[:tag]

2019.08.06模拟赛T2

题目大意 已知三个$n$位二进制数$A$,$B$,$C$. 满足: $A+B=C$ 它们二进制位中$1$的个数分别为$a$,$b$,$c$. 求满足条件的最小的$C$. Solution 唉,又是一道随缘猜结论的题,可惜极限数据卡掉了我一个点,开大数组就A了..... 通过打表,我们发现所有的最优解中都有一种情况是$A$的二进制位的$1$是连续一段. 原文地址:https://www.cnblogs.com/ldysy2012/p/11311281.html

Dockerfile 定制镜像

从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么这些问题不就都可以解决了吗?对的,这个脚本就是我们说的Dockerfile 介绍 Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. 这里以定

Dockerfile介绍、Docker制作jdk镜像

Dockerfile介绍.Docker制作jdk镜像 目标 1.Dockerfile简介 2.Docker制作jdk镜像 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 dockerfile基本结构 Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行,一般而言, Dockerfile 主体内容

docker 构建基础镜像 时区问题

前言 在使用tomcat官方docker 镜像时,程序在与微信通信过程中返回了时间差问题,查看后发现是docker 容器的问题. 问题 docker 官方镜像使用的都是UTC 标准时间,这就导致了比beijing时间晚8小时. 解决这一问题并不难,只要修正容器的时区就可以了.众所周知,对容器的修改并不会影响到镜像,所以又会出现这样一个问题,再次从镜像启动容器时,时间就会又变成UTC 标准时间.对于此问题,自然是可以使用docker commit 来解决,但我并不想这样做-- 解决方案 基于cen

docker之NGINX镜像构建

Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:1.作为Web服务器.2.作为负载均衡服务器.3.作为邮件代理服务器.4.安装及配置简单.接下来我们介绍在docker构建nginx镜像:Docker镜像构建分为两种方式:一.手动构建二.Dockerfile(自动构建) 一.Docker镜像手动构建实例: 基于centos镜像进行构建nginx镜像 #下载镜像 [[email protected] ~]# docker pull centos [[email protec

Docker安装Tomcat镜像并部署web项目

一.安装Tomcat 1.查找Docker Hub上的tomcat镜像 docker search tomcat 2.拉取官方的镜像 docker pull tomcat 等待下载完毕,需要一些时间. 3.查看docker所有的镜像 docker images 4.启动tomcat镜像 注:前者是外围访问端口:后者是容器内部端口 docker run -d -p 8080:8080 tomcat 注:前者是外围访问端口:后者是容器内部端口 如下命令可后台启动tomcat -d: 后台运行容器,并

centos 定制镜像

1.仓库中心https://hub.docker.com/_/centos2.拉取镜像docker pull centos3.由于镜像内空空如野,定制如下 [root@docker-01 dockerfile]# cat dockerfile FROM centosLABEL cenos_baseRUN yum update -y && yum install net-tools iproute traceroute procps openssh-server bind-utils wge

Alipne镜像、Dockerfile构建自己的镜像

1.Alipne镜像 目前比较流行的 rootfs 应该就是 alpine 了,因为他的体积特别小,最简单的环境只需要 5M .Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境. Alpine 操作系统是一个面向安全的轻型 Linux 发行版.它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐.在保持瘦身的