Docker之DockerFile讲解
概述
DockerFile是用于构建Docker镜像的文件,是一个命令参数脚本文件。
通过DockerFile构建Docker镜像的步骤:
- 编写一个DockerFile文件。
- 通过docker build 命令结合DockerFile构建一个镜像。
- docker run 创建并运行容器。
- docker push 发布镜像到DockerHub或者阿里云镜像仓库等地方。
很多官方的镜像都是基础包,很多功能都是没有的,比如官方的centos镜像没有vim、ifconfig等功能。所以我们可能经常需要构建自己的镜像。
DockerFile的基础知识:
- 每个保留关键字(指令)都必须是大写字母。
- DockerFile从上执行到下。
- #表示注释。
- 每个指令都会创建一个新的镜像层,并提交。
DockerFile的常用指令:
命令 | 说明 |
---|---|
FROM | 指定基础镜像,要创建的镜像一切都从这个基础镜像开始 |
MAINTAINER | 镜像是谁写的,这个DockerFile的作者,一般填入一些有用的信息,比如姓名+邮箱 |
RUN | 镜像构建的时候需要运行的命令 |
ADD | 往镜像里面加文件,压缩文件会自动解压 |
WORKDIR | 指定镜像的工作目录,使用该镜像创建的容器进入时会进入该目录 |
VOLUME | 挂载的目录,数据卷 |
EXPOSE | 暴露端口配置 |
CMD | 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被代替 |
ENTRYPOINT | 指定这个容器启动的时候要运行的命令,可以追加命令 |
ENV | 构建的时候设置环境变量 |
实战
构建自己的centos镜像
先来个简单的,我们构建的centos镜像是基于官方的centos镜像基础上构建,只是官方的镜像没有vim、ifconfig功能,我们构建的镜像加上这两个功能,并设置工作目录,官方的镜像是根目录为工作目录。
- 编写DockerFile
DockerFile内容,注释不能跟步骤同一行,我这里只是为了更清晰直观
FROM centos:7 #指定基础镜像为centos:7
MAINTAINER Yehaocong<823006202@qq.com> #编写一些DockerFile的作者信息
ENV WORKPATH /usr/local #设置环境变量WORKPATH=/usr/local
WORKDIR $WORKPATH #设置工作目录为/usr/local
RUN yum -y install vim #安装vim
RUN yum -y install net-tools #安装net-tools
EXPOSE 80 #暴露80端口
CMD echo $WORKPATH #设置一些容器启动时执行的命令
CMD echo "===end==="
CMD /bin/bash
- 使用docker build命令构建
docker build . -f DockerFile文件路径 -t 镜像名:tag .
docker build . -f mycentosdockerfile -t mycentos:1.0 .
看到下图信息说明镜像构建成功。
- 用构建的镜像创建并运行一个容器:
docker run -it b9f10846b69d #这里要用你自己的镜像ID,也可以使用name+tag,只是本人习惯用id
可以看到与官方的centos不同的是,刚进来时是在/usr/local目录,而官方的是在根目录。并且有vim和ifconfig功能,官方的没有。
成功利用DockerFile构建一个镜像。
实战,构建一个tomcat镜像
第一步:准备文件
需要文件:
- jdk环境:压缩包
- tomcat:压缩包
- readme.txt:说明文件,可选。
第二步:编写Dockerfile
Dockerfile
说明:注释是要单独一行才有效,我这写在一行是为了可读性高点。
FROM centos:7 #基于centos7镜像上构建tomcat8.5镜像
MAINTAINER YeHaocong<823006202@qq.com> #记录一些作者的个人信息
COPY readme.txt /usr/local #拷贝readme.txt到docker镜像的/usr/local目录
ADD jdk-8u261-linux-x64.tar.gz /usr/local #拷贝并解压缩jdk-8u261-linux-x64.tar.gz到docker镜像的/usr/local目录,ADD是包括解压,COPY是只拷贝不解压的
ADD apache-tomcat-8.5.57.tar.gz /usr/local #//拷贝并解压缩apache-tomcat-8.5.57.tar.gz到docker镜像的/usr/local目录
RUN yum -y install vim #安装vim
ENV WORKPATH /usr/local #设置环境变量WORKPATH 的值为/usr/local
WORKDIR $WORKPATH #设置镜像的工作目录为/usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_261 #设置JAVA_HOME
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.57 #设置CATALINA_HOME
ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/bin #设置jdk的环境变量和tomcat的环境变量
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib #设置jdk的CLASSPATH
EXPOSE 8080 #暴露8080端口
CMD /usr/local/apache-tomcat-8.5.57/bin/startup.sh && /bin/bash #在容器启动时执行两个命令,第一个是运行tomcat,第二个是开启一个终端,目的是在docker容器启动时,有个前台进程,以至于docker不会因没有前台进程而自动关闭。使用CMD命令只有最后一个CMD才会生效,所以不能两个命令写两个CMD,要写在同一个CMD里面,多个命令用&&分隔。
第三步:使用build命令并配置DockerFile构建镜像:
#如果你编写的Dockerfile文件的文件名为Dockerfile,并且你执行该命令时是跟Dockerfile文件在同一目录的换,就不用显示用-f参数指定Dockerfile的路径docker build . -t diytomcat:8.5 .
第四步:利用构建的镜像创建并运行容器:
#宿主机的5151端口映射docker的8080端口,镜像ID使用自己的镜像Id。
docker run -dit -p 5151:8080 7ac2a4531567
第五步:验证
本地访问localhost:5151服务。
外面的网访问:
成功。镜像构建完成。
将镜像推送到DockerHub上
第一步:注册账号。
首先要注册一个DockerHub账号,如果已经有账号就跳过这步。
第二步:登录DockerHub
docker login -u 账号名
执行上面命令后按回车,然后输入密码再按回车。
出现Login Succeeded代表登录成功。
第三步:
使用命令:
#docker push 你的DockerHub账号/镜像名:tagdocker push yehaocong/diytomcat:8.5
这里会有个坑:
意思要推送的镜像在本地不存在。
这时,就要给镜像打个标生成一个版本号,创建一个版本,最好要改成 你的DockerHub账号/镜像名:tag这样的名字。
# docker tag 镜像ID 要打标成的新标签名
docker tag e99d0ea96d6b yehaocong/diytomcat:8.5
然后再次推送。
推送成功。
别人可以使用下面命令进行下载
docker pull yehaocong/diytomcat:8.5
下载成功。
镜像发布到阿里云仓库
第一步:注册阿里云账号。
注册一个阿里云账号,如果已有,可以跳过这步。
第二步:登录阿里云创建命名空间和镜像仓库
- 点击容器进行服务
- 点击管理控制台
- 创建命名空间
- 创建阿里云镜像仓库
- 点击下一步,设置代码源
这里选择本地仓库。然后点击创建镜像仓库。
第三步:上传镜像,点击你刚刚创建的仓库:
登录阿里云之前如果登录了dockerhub,要使用docker logout退出登录。
这里有详细步骤。
按着步骤来就好,无非就登录,创建版本号,推送。
推送成功。
Docker之DockerFile讲解相关推荐
- docker第五期 DockerFile讲解
DockerFile DockerFile 介绍 DockerFile 构建过程 DockerFile的指令 FROM: 指定基础镜像,Dockerfile第一个命令 MAINTAINER:维护者/创 ...
- (转)Docker 基础 : Dockerfile
全文来自 Docker 基础 : Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像.我们会先介绍 Dockerfile 的 ...
- Docker用Dockerfile定制镜像
用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...
- Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像
文章目录 Pre Docker 官方镜像 Dockerfile dockerfile制作tomcat镜像 准备软件 编写Dockerfile文件 dockerfile构建镜像 启动镜像 测试访问tom ...
- docker之Dockerfile指令介绍
Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...
- Docker : Dockerfile 定制镜像
使用 Dockerfile 定制镜像 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们 ...
- Docker 精通之 Dockerfile
Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile 1.基本说明 Dockfile 是一个用于编写 ...
- Docker使用Dockerfile构建简单镜像
Docker使用Dockerfile构建简单镜像 首先确保系统已经安装docker 构建镜像 安装基础镜像 sudo docker pull ubuntu 查看镜像是否已经拉取成功 REPOSITOR ...
- Docker使用Dockerfile构建镜像
2019独角兽企业重金招聘Python工程师标准>>> Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条 ...
最新文章
- c#如何取自身应用程序文件名和路径?
- C# 获取电脑的网络连接状态
- WPF异步载入图片,附带载入中动画
- Javascript中的对象查找【转】
- 李宏毅机器学习课程11~~~为何要深?
- 如何在运行时更改日志记录级别
- Python 第五天
- 分布式存储图解_BERT的youxiu变体:ALBERT论文图解介绍
- 读博士也有技巧:如何快乐地做研究
- python与golang_Golang与python线程详解及简单实例
- 华为带动涨价?二季度中国市场智能手机均价涨了13%
- SQL点滴35—SQL语句中的exists
- Xcode7 出现-fembed-bitcode错误的解决办法
- 分区怎么4k对齐_电脑升级SSD后,依然卡顿怎么解决?
- 4-26 pixel赋值问题 mbcmp函数 宏定义
- php挑战答题,挑战答题小程序5.3.1开源
- C#员工考勤管理系统源码 考勤工资管理系统源码
- Linux的shell脚本教程(一)
- word无法加载mathtype.wll
- kaggle TMDB Box Office Prediction
热门文章
- abb机器人开通选项_ABB机器人623-1Multitasking选项 ABB机器人多任务使用方法教程...
- 【英语学习】【Level 07】U06 First Time L5 A Different City
- Intel 64/x86_64/IA-32/x86处理器基本执行环境 (2) - 64位执行环境
- Intel® Nehalem/Westmere架构/微架构/流水线 (9) - 系统软件增强/能耗增强
- Android WebView:这是一份全面 详细的WebView学习指南
- Epic Games 携精彩作品强势登录 GMGC 2016
- Eigen 简明教程之如何从Python转到Eigen
- 轻松生成ip地址的姿势,最快得到批量***目标
- 怕死吗?研究人员推出可模拟“灵魂出窍”的VR系统
- HomeHack:黑客如何控制 LG 的 IoT 家用设备