【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 查看容器和镜像状态 然后执行下 ...
随机推荐
- Memcached windows安装
Memcached windows安装 如果出现提示: Microsoft Windows [版本 6.3.9600] (c) 2013 Microsoft Corporation.保留所有权利. D ...
- RubyMine2017破解
RubyMine2017破解 学习了:https://www.7down.com/soft/172903.html 激活的时候选择 license server; 输入如下地址激活: http://i ...
- LeetCode 之 Merge Sorted Array(排序)
[问题描写叙述] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array ...
- 2015-8-29阿里校园招聘研发project师笔试题
前言:原题来自于网络:http://www.cnblogs.com/nausicaa/p/3946694.html.本人依据自己理解对题目进行解答.因为水平有限.题目有不会做.做错的地方.欢迎大家留言 ...
- Eclipse中项目进行发布到Tomcat中的位置
Eclips配置tomcat默认是发布到.metadate\plugins\目录下的,wtpwebapps.这样在实际的tomcat目录下,就找不到发布的项目.我们可以自己进行设置,在控制栏中找到se ...
- Tomcat的安装跟配置
安装Tomcat的步骤:1)安装好JDK2)把tomcat-7.0.30软件解压到本地硬盘3)设置环境变量:JAVA_HOME: C:\Program Files\Java\jdk1.7.0_04To ...
- 11_HTML5_Local_Storage本地存储
本地存储localStorage是大型cookie,cookie只有4k,
- 微信小程序领取卡券
微信小程序领取卡券 标签(空格分隔): php 开发前需要准备的工作 1 小程序和公众号要有绑定 2 小程序和该公众号要绑定到同一个开发平台下 [https://open.weixin.qq.com/ ...
- 请问Typecho Mysql 数据库和Sqlite数据库我该如何选择。
纠结如我,又纠结了,请大家帮忙看一下我该如何选择.就一个没有文章的博客.一直用VPS太浪费,现在换成了虚拟主机.但是虚拟主机的MYSQL数据库限制连接数30个,我不懂这是个什么概念,但是我觉得30太少 ...
- <Sicily>Greatest Common Divisors
一.题目描述 A common divisor for two positive numbers is a number which both numbers are divisible by. It ...
