【Docker自定制镜像之Dockerfile】
镜像的定制,就是定制每一层所添加的配置、文件,如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本中,用脚本来构建、定制镜像,这个脚本就是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 137326237@qq.com' # 安装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文件在同级目录
[root@fedora docker]# ls
Dockerfile flask_web.py # 开始制作镜像
[root@fedora docker]# docker build -t zyk/flask .
制作完成后,查看镜像并启动:
# 查一下镜像ID
[root@fedora docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zyk/flask latest c4e156f3222a 50 seconds ago 911 MB # 启动镜像
[root@fedora docker]# docker run -d -p 9000:8080 c4e156f3222a
好了,打开浏览器访问测试:
【Docker自定制镜像之Dockerfile】的更多相关文章
- docker自定制镜像
概述 很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件 ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- Docker Dockerfile 定制镜像(转)
转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...
- Docker 学习笔记(二):Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...
- Docker Dockerfile 定制镜像
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...
- 用前端姿势玩docker【二】dockerfile定制镜像初体验
前言 书接上文,关于dockerfile指令的api在此处不做赘述,在此只是记录下注意事项: '示坑以埋之'. 配置指令 FROM dockerfile必须以此开头 一个dockerfile可执行添加 ...
- Docker用Dockerfile定制镜像
用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...
- Docker - 定制镜像
Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...
- Docker入门之--定制镜像
1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...
随机推荐
- Mybatis Generator for SQL Server
Mybatis Generator for SQL Server <?xml version="1.0" encoding="UTF-8" ?> & ...
- Cube Simulation zoj3429 模拟
Description Here's a cube whose size of its 3 dimensions are all infinite. Meanwhile, there're 6 pro ...
- 2014 百度之星 1003 题解 Xor Sum
Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ...
- POJ 2528 Mayor's posters 离散化和线段树题解
本题就是要往墙上贴海报,问最后有多少可见的海报. 事实上本题的难点并非线段树,而是离散化. 由于数据非常大,直接按原始数据计算那么就会爆内存和时间的. 故此须要把数据离散化. 比方有海报1 6 7 ...
- 好记性不如烂笔头86-spring3学习(7)-ApplicationContext中bean的生命周期
假设使用ApplicationContext来生成.管理Bean, 一个Bean从建立到销毁,会历经几个运行阶段. 我个人理解一般的bean的生命周期主要包含:建立,初始化,使用阶段,销毁四个核心阶段 ...
- jquery实现上下浮动
jquery实现上下浮动: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 【DNN 系列】 下载安装
1.下载 http://dotnetnuke.codeplex.com/releases/view/119857 2.安装 下载完毕 因为 IIS 7 采用了更安全的 web.config 管理机制, ...
- js parseFloat 精度问题
<script type="text/javascript"> //parseFloat function actionoftext(){var price = 10. ...
- codeforces 400 C Inna and Huge Candy Matrix【模拟】
题意:给出一个矩形的三种操作,顺时针旋转,逆时针旋转,对称,给出原始坐标,再给出操作数,问最后得到的坐标 画一下模拟一下操作就可以找到规律了 #include<iostream> #inc ...
- 位运算与bitset
&运算 将两个数转化为二进制后,对应的位置上相同即取,通常取1,所以&通常情况下可以用来枚举子集 设x为表示集合的整数,那么这个整数有如下性质: x的子集整数y在数值上不会比x大.因 ...
