什么是dockerfile?
Dockerfile就是用来构建docker镜像的文件!命令参数脚本 !
构建步骤:
1丶编写一个dockerfile文件
2丶docker build 构建成为一个镜像
3丶docker run运行镜像
4丶docker push发布镜像(DockerHub丶阿里云镜像仓库)
Dockerfile构建过程
基础知识:
1丶每个保留关键字(指令)都必须是大写字母
2丶指令从上到下顺序执行
3丶#表示注释
4丶每个指令都会创建提交
dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单!
Docker镜像 逐渐成为企业交付的标准,我们必须要掌握;
步骤:开发,部署,运维
Dockerfile:构建文件,定义了一切的步骤,源代码
DockerImages:通过Dockerfile构建生成的镜像,最终发布和运行的产品;
Docker容器:容器就是镜像运行起来提供服务器
dockerfile指令
通过这些指令,我们可以自己写一个镜像
FROM #基础镜像,一切从这里构建MAINTAINER #镜像是谁写的,姓名+邮箱RUN #镜像构建的时候需要运行的命令ADD #步骤:tomca镜像,这个tomcat压缩包!添加内容 可以自动解压WORKDIR #镜像的工作目录VOLUME #挂载卷的目录EXPOSE #暴露的端口配置 -pCMD #指定这个容器启动时候需要执行的命令,只有最后一个会生效,可以被覆盖ENTRYPOINT #指定这个容器启动时候需要执行的命令,可以被追加ONBUILD #当构建一个被继承的dockerfile这时候就会被运行onbuild指令,触发指令COPY #类似ADD,将我们的文件拷贝到镜像中,不会自动解压ENV #构建的时候设置的环境变量
实战测试
DockerHub中99%镜像都是从基础镜像开始构建的FROM scratch,然后配置需要的文件
# 创建一个自己的centos# 1、编写Dockerfile的文件[root@kuangshen dockerfile]#cat mydockerfile-centosFROM centosMAINTAINER kuangshen<24736743@qq.com>ENV MYPATH/usr/1ocal #工作目录WORKDIR$MYPATHRUN yum-y install vim #vim命令RUN yum-y install net-tools #ifconfig命令EXPOSE 80 #端口暴露CMD echo SMYPATHCMD echo"----end----"CMD /bin/bash# 2、通过这个文件构建镜像# 命令docker build-f dockerfile文件路径-t 镜像名:[tag] .Successfully built e2bd75cfe070Successfully tagged mycentos:0.1# 3、测试运行
docker镜像的的历史构建过程
docker history 镜像id
拿到一个镜像可以研究一下是怎么做的
## CMD和 ENTRYPOINT 区别### CMD -指定这个容器启动时候要运行的命令,最后一条生效,可被替代### ENTRYPOINT -指定这个容器启动时候要运行的命令,可以追加命令
Dockerfile中很多命令都十分相似,我们需要了解区别
copy 和 add cmd和rntrypoint
创建tomcat的镜像
1丶准备压缩包
2丶编写dockerfile文件,官方命名Dockerfile
ENV JAVA_HOME /usr/local/jdk1.8.0_251ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/lcoal/apache-tomcat-9.0.36ENV CATALINA_BASH /usr/lcoal/apache-tomcat-9.0.36ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/libEXPOSE 8080CMD /usr/lcoal/apache-tomcat-9.0.3/bin/startup.sh &&tail -f /usr/local/apche-tomcat-9.0.36/bin/logs/catalina.out
3丶构建镜像
#由于官方Dockerfile文件名就是Dockerfile所以无需-f指定# dockerbuild -t diytomcat
4丶启动镜像
5丶访问测试
5丶发布项目
发布镜像
方式一 官方
1丶https://hub.docker.com/
2丶注册登录
3丶docker -login —help
4丶docker -login -u jusheng
5丶docker push jusheng/镜像id:tag #push镜像到dockerhub
6丶没有标签的话 docker tag 镜像id+标签
提交的同时也是根据层级提交**
方式二 阿里云
1丶登录阿里云
2丶找到容器镜像服务
3丶创建命名空间
4丶创建镜像仓库
1. 登录阿里云Docker Registry
$ sudo docker login --username=阮利1227 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/ruanli/orange:[镜像版本号]
3. 将镜像推送到Registry
$ sudo docker login --username=阮利1227 registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ruanli/orange:[镜像版本号]$ sudo docker push registry.cn-hangzhou.aliyuncs.com/ruanli/orange:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。
5. 示例
使用”docker tag”命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEregistry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用”docker images”命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。
$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
小结

