【Docker】06 DockerFile
DockerFile
DockerFile介绍
dockerFile是用来构建Docker镜像的文件,是命令参数脚本
构建步骤:
- 编写dockerfile文件
- docker build 构建成为一个镜像
- docker run运行镜像
- docker push 发布镜像(可发送到两个位置)
- DockerHub,可供他人使用
- 阿里云镜像仓库
发布到hub
点进去之后就是镜像位置,会跳转到gitHub
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像
DockerFile的构建过程
脚本的编写!!
- 指令的大小写:DockerFile的指令是忽略大小写的,但建议使用大写
- 指令的执行顺序是从上到下的
#
表示注释- 每一个指令都会创建一个新的镜像层,并提交
DockerFile是面向开发的,以后发布项目,创建镜像,都需要编写DockerFile文件
Docker镜像逐渐成为企业交付的标准,必须掌握
步骤:开发 部署 上线运维…缺一不可
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务器
DockerFile的指令
使用这些命令可构建自己的镜像
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 指定维护者的信息 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:如要搭建tomcat镜像,需要加入tomcat是压缩包
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置 如果不写,需要在启动时使用-p命令
CMD # 指定这个容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候需要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承的 DockerFile ,这个时候就会运行ONBUILD指令,是一个触发指令
COPY # 类似ADD ,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量
实战测试
centos测试
- 编写DockerFile的文件
FROM centosMAINTAINER ayuan<3610089198@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATH RUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "---end---"CMD /bin/bash
- 编译运行,通过这个文件构建镜像
# 运行成功的部分信息Successfully built 55313e0af22eSuccessfully tagged mycentos:1.0
- 运行测试
[root@localhost dockerfile]# docker run -it mycentos:1.0 [root@0a77b114ce96 local]# pwd/usr/local # dockerfile中编写的MYPATH# 比较一下原版centos[root@bogon ~]# docker run -it centos[root@48b2f248c7ce /]# pwd/ # 启动之后默认是在根目录
- 使用ifconfig测试
[root@0a77b114ce96 local]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)RX packets 8 bytes 656 (656.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 测试 vim
[root@0a77b114ce96 local]# vim test
cat test
注:mydockerfile-centos文件中写了多个CMD,只有最后一个会生效,所以当使用命令
docker run mycentos:1.0
的时候,并不会有内容输出.
新建一个mydockerfile-centos2,内容如下
FROM centos
MAINTAINER ayuan<3610089198@qq.com>ENV MYPATH /usr/local2
WORKDIR $MYPATHRUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 81CMD echo "now u see me"
并使用其创建的镜像为 mycentos:1.1
此时再使用docker run mycentos:1.1
的时候会有内容输出
[root@bogon dockerfile]# docker run mycentos:1.1
now u see me
查看镜像构建历史
[root@bogon ~]# docker history b4d1f561551c
IMAGE CREATED CREATED BY SIZE COMMENT
b4d1f561551c 20 hours ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
ec25d74b54d8 20 hours ago /bin/sh -c #(nop) EXPOSE 81 0B
a15cf7014ac8 20 hours ago /bin/sh -c yum -y install net-tools 24.9MB
fc3ebb2dce60 20 hours ago /bin/sh -c yum -y install vim 60.7MB
148148e015b4 20 hours ago /bin/sh -c #(nop) WORKDIR /usr/local2 0B
5894cd6588ba 20 hours ago /bin/sh -c #(nop) ENV MYPATH=/usr/local2 0B
d000efa750f3 20 hours ago /bin/sh -c #(nop) MAINTAINER ayuan<36100891… 0B
300e315adb2f 6 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 6 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 6 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB
CMD和ENTRYPOINT区别
CMD["[命令1]","[命令2]",…]:执行多条命令,用“,”分割,表示运行之后自动执行的命令
- 测试CMD
1. 编写dockerfile-cmd-test文件[root@bogon dockerfile]# cat dockerfile-cmd-test FROM centosCMD ["ls","-a"]2. 构建镜像docker build -f dockerfile-cmd-test -t cmdtest .3. 运行之后会自动执行 ls -a 命令[root@bogon dockerfile]# docker run cmdtest....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar4. 尝试为CMD增加参数 意使其执行 ls -al[root@bogon dockerfile]# docker run cmdtest -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.# 结果会报错,因为在CMD的情况下,-l会取代 ls -a ,但是-l不是完整的命令,所以会报错# 改正,ls -al 是完整的命令,会执行[root@bogon dockerfile]# docker run cmdtest ls -altotal 0drwxr-xr-x. 1 root root 6 Jun 25 03:20 .drwxr-xr-x. 1 root root 6 Jun 25 03:20 ..-rwxr-xr-x. 1 root root 0 Jun 25 03:20 .dockerenvlrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bindrwxr-xr-x. 5 root root 340 Jun 25 03:20 devdrwxr-xr-x. 1 root root 66 Jun 25 03:20 etcdrwxr-xr-x. 2 root root 6 Nov 3 2020 homelrwxrwxrwx. 1 root root 7 Nov 3 2020 lib -> usr/liblrwxrwxrwx. 1 root root 9 Nov 3 2020 lib64 -> usr/lib64drwx------. 2 root root 6 Dec 4 2020 lost+founddrwxr-xr-x. 2 root root 6 Nov 3 2020 mediadrwxr-xr-x. 2 root root 6 Nov 3 2020 mntdrwxr-xr-x. 2 root root 6 Nov 3 2020 optdr-xr-xr-x. 112 root root 0 Jun 25 03:20 procdr-xr-x---. 2 root root 162 Dec 4 2020 rootdrwxr-xr-x. 11 root root 163 Dec 4 2020 runlrwxrwxrwx. 1 root root 8 Nov 3 2020 sbin -> usr/sbindrwxr-xr-x. 2 root root 6 Nov 3 2020 srvdr-xr-xr-x. 13 root root 0 Jun 25 02:05 sysdrwxrwxrwt. 7 root root 145 Dec 4 2020 tmpdrwxr-xr-x. 12 root root 144 Dec 4 2020 usrdrwxr-xr-x. 20 root root 262 Dec 4 2020 var
- 测试ENTRYPOINT
1. 编写 dockerfile-entrypoint-test 文件[root@bogon dockerfile]# vim dockerfile-entrypoint-testFROM centosENTRYPOINT ["ls","-a"]2. 构建镜像docker build -f dockerfile-entrypoint-test -t entrypoint-test .3. 运行之后会自动执行 ls -a 命令[root@bogon dockerfile]# docker run 94c729adceb6....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar4. 追加运行# 实际执行的是 ls -al[root@bogon dockerfile]# docker run 94c729adceb6 -ltotal 0drwxr-xr-x. 1 root root 6 Jun 25 03:31 .drwxr-xr-x. 1 root root 6 Jun 25 03:31 ..-rwxr-xr-x. 1 root root 0 Jun 25 03:31 .dockerenvlrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bindrwxr-xr-x. 5 root root 340 Jun 25 03:31 devdrwxr-xr-x. 1 root root 66 Jun 25 03:31 etcdrwxr-xr-x. 2 root root 6 Nov 3 2020 homelrwxrwxrwx. 1 root root 7 Nov 3 2020 lib -> usr/liblrwxrwxrwx. 1 root root 9 Nov 3 2020 lib64 -> usr/lib64drwx------. 2 root root 6 Dec 4 2020 lost+founddrwxr-xr-x. 2 root root 6 Nov 3 2020 mediadrwxr-xr-x. 2 root root 6 Nov 3 2020 mntdrwxr-xr-x. 2 root root 6 Nov 3 2020 optdr-xr-xr-x. 115 root root 0 Jun 25 03:31 procdr-xr-x---. 2 root root 162 Dec 4 2020 rootdrwxr-xr-x. 11 root root 163 Dec 4 2020 runlrwxrwxrwx. 1 root root 8 Nov 3 2020 sbin -> usr/sbindrwxr-xr-x. 2 root root 6 Nov 3 2020 srvdr-xr-xr-x. 13 root root 0 Jun 25 02:05 sysdrwxrwxrwt. 7 root root 145 Dec 4 2020 tmpdrwxr-xr-x. 12 root root 144 Dec 4 2020 usrdrwxr-xr-x. 20 root root 262 Dec 4 2020 var
实战:Tomcat镜像
莫得资源,盲听
准备镜像文件,tomcat压缩包,jdk压缩包
编写DockerFile文件,官方命名
DockerFile
,build的时候会自动寻找这个文件,就不需要-f
指定了
FROM centosMAINTAINER ayuan<3610089198@qq.com>COPY readme.txt /usr/local/readme.txtADD jdk-8ull-linux-x64.tar.gz /usr/local # ADD命令,运行的时候会自动解压压缩包到指定的路径ADD apache-tomcat-9.0.22.tar.gz /usr/localRUN yum -y install vim# 配置环境变量ENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_11ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out# tail -F [文件名]:tail命令启动的时候,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件
- 构建镜像
docker build -t diytomcat . # 因为用的是官方的名字,所以可以不使用 -f [DockerFile名字] 来指定文件
运行日志截图:
- 启动镜像
# 同步test信息,同步日志信息docker run -d -p 9090:8080 --name mytomcat -v /home/mytomcat/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/kuangshen/build/tomca/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diytomcat
- 访问测试
curl localhost:9090 # 如果可以成功访问,那么在外网也可以访问
发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了,不必再进入容器)
- 进入挂载的test目录
2. 在test下创建WEB-INF目录,并在WEB-INF目录下创建web.xml文件
3. 在test下创建index.jsp文件
4. 查看日志
日志信息:
发布自己的镜像
DockerHub
地址 https://hub.docker.com/注册账号
确定账号可登录
在自己的服务器上提交自己的镜像
登录完毕后就可以提交镜像了
这里被拒绝是因为有重复的,建议加上作者信息和版本号便于区分和维护
发布中部分日志
提交的时候也是按照层级来提交的
发布到aliyun
登录aliyun
找到容器镜像服务
创建命名空间
创建容器镜像
浏览信息
# 公网地址:可通过这个地址来访问当前仓库
6. 发布步骤
【Docker】06 DockerFile相关推荐
- 【Docker】自定义dockerfile构建容器镜像并发布
0 前言 此篇博客参考此b站视频完成,是一个有趣的小实践. 1 项目原址 准备工作:在github上下载一个zip压缩包 网址:恋爱倒计时静态网页 2 从0开始 2.1 创建项目文件夹并解压源项目等操 ...
- 【docker】基于dockerfile编写LNMP
文章目录 一.基础环境准备 二.部署nginx(容器IP为172.18.0.10) 1.整个Dockerfile文件内容 2.配置nginx.conf文件 3.构建镜像 三.部署mysql 1.整个D ...
- 【Docker】之 Dockerfile 指令详解
目录 Dockerfile 基本结构 Dockerfile 指令 指定基础镜像 FROM 维护者信息 MAINTAINER 元数据标签 LABEL 设置环境变量 ENV 镜像构建参数 ARG 指定工作 ...
- 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目
日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...
- 【Docker】使用docker安装部署NextCloud私人网盘
[Docker]使用docker安装部署NextCloud私人网盘 1.查询并下载NextCloud镜像 执行命令 docker search nextcloud docker pull nextcl ...
- 【Centos 7】【Docker】 安装 kafka
前言 CentOS Linux release 7.6.1810 (Core) Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装. 安装 ...
- 【Centos 7】【Docker】 安装 redis
前言 CentOS Linux release 7.6.1810 (Core) Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装. 安装 ...
- 【CentOS7】【docker】常用操作命令
目录 前言 查找镜像 可视化查找镜像 docker命令查找镜像 镜像操作 拉取镜像 查看本地已拉取的镜像 删除镜像 创建容器 创建但不运行容器 创建并运行容器 管理容器 查看运行着的容器 查看本地已创 ...
- 【Centos 8】【Centos 7】【Docker】 添加 DockerHub 的镜像地址
前言 CentOS Linux release 8.2 CentOS Linux release 7.6 [Centos 8][Centos 7][Docker] 安装 RabbitMQ时,拉取doc ...
- 【Docker】ERROR: Could not find a version that satisfies the requirement pytest==5.0.1
1.背景 背景参考:[Docker]elasticsearch 监控工具 elasticsearch-HQ [lcc@lcc ~/soft/es/elasticsearch-HQ-3.5.12]$ p ...
最新文章
- 安装终端服务和终端服务授权,激活终端服务授权
- 7-9将灰度转为彩色
- 数据库树状结构的关系表的删除方案
- windows2003下防火墙ISA大型实验
- mysql 默认事务隔离级别_上个厕所的功夫,搞懂MySQL事务隔离级别
- 【C语言工具】AddressSanitizer - 内存检测工具
- mysql 图像数据类型_MySQL数据类型
- 华为鸿蒙主题设计,2020华为全球主题设计大赛,简直就是神仙打架啊!
- 虚拟摄像头之二: 配置v4l2loopback虚拟摄像头为前置或后置摄像头
- Python Revisited Day 08 (高级程序设计技术)
- 存储圈装逼必上TOP 10网站
- 怎么在谷歌地图上画图_如何在Google地图上规划具有多个目的地的公路旅行
- 直播带货平台搭建需要用到哪些第三方(下)
- spotlight on oracle
- java 开源sns_JAVA开源SNS社交管理问答知识付费系统JEESNS v1.4.2
- 或许我们做错了,但绝非一无是处
- SSM基础框架之SpringIOC
- 查看网站是具体那个国家
- Android 3D游戏开发技术宝典pdf
- 图像噪声(MATLAB)
热门文章
- Julia : varinfo() 与工作空间,@isdefined, @which
- 帮您管好云:阿里云混合云管理平台发布 | 凌云时刻
- 容器操作系统再添丁,AWS开源Bottlerocket,类似RancherOS?
- Cloud Foundry 2018欧盟峰会日程已确定
- 何万青 | 从天河2号到阿里云超算,P9技术大牛的职业发展智慧
- 【优化算法】吉萨金字塔建造优化算法(GPC)【含Matlab源码 1438期】
- 【印刷数字识别】基于matlab OCR识别系统【含Matlab源码 438期】
- 【气动学】基于matlab内弹道【含Matlab源码 057期】
- 创建dqn的深度神经网络_深度Q网络(DQN)-III
- 单片机定时报警C语言程序,单片机控制的简易定时报警器电路设计( - 控制/MCU - 电子发烧友网...