初试dockerfile
docker的commit镜像中我使用了方式一,现在使用dockerfile来构建docker镜像的构建文件!通过命令脚本!
脚本内容
FROM centos
VOLUME [“volume01”,”volume02”]
CMD echo “——-end——-“
CMD /bin/bash
测试
[root@izbp1g2kp3kgefvmrhy0moz docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t wangzheng/centos:1.0 .
<br /><br />查看挂载卷位置:<br /><br />我们 通常需要用这种方式来构建自己的解析,。。注意:如果用带有挂载盘的镜像,开启两个容器,两个挂在盘的位置不是同一个文件<br />如果构建镜像的时候没有挂载卷。我需要手动挂载 -v 卷名:容器内路径!!<a name="VZhvD"></a>## 学习dockerfiledockerfile是用来构建docker镜像的文件!这一过程通过命令参数脚本来实现,<br />构建步骤:<br />1、编写dockerfile文件<br />2、docker build 构建一个镜像<br />3、docker run 运行镜像<br />4、docker push 发布镜像(dockerhub、阿里云镜像仓库)<a name="8i1Rx"></a>### dockerfile的构建过程- **基础知识**1、每个指令必须大写<br />2、从上到下依次执行<br />3、# 表示注释<br />4、每个指令都会创建一个新的镜像层。- **步骤**1、dockerfile 构建文件,源代码<br />2、dockerimage 最终的镜像文件、<br />3、docker容器,可运行的docker容器<a name="Q7jgY"></a>### docker指令```shellFROM # 基础镜像MAINTALNER # 指明作者:名字+邮箱RUN # 镜像构建的时候需要运行的命令ADD # 步骤:Tomcat镜像 ,添加Tomcat这个压缩包COPY # 类似ADD,将我们的文件拷贝到构建的镜像中WORKDIR # 镜像工作目录VOLUME # 挂载目录EXPOSE # 暴露的端口CMD # 指定容器运行时,执行的指令,,,,注:只有最后一个才生效,可被代替ENTRYPOINT # 指定容器运行时,执行的指令,,,,可追加命令ONBUILD # 当构建一个被继承 dockerfile 这个时候会运行ONBUILD 指令,触发指令ENV # 构建时设置环境变量

拓展:
CMD和ENTRYPOINT的区别:
CMD:
[root@izbp1g2kp3kgefvmrhy0moz mystudy]# vi dockerfile-cmd# dockerfile内容[root@izbp1g2kp3kgefvmrhy0moz mystudy]# cat dockerfile-cmdFROM centosCMD ["ls","-a"]# 构建镜像[root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker build -f dockerfile-cmd -t mycentos:0.1 .Sending build context to Docker daemon 2.048kBStep 1/2 : FROM centos---> 300e315adb2fStep 2/2 : CMD ["ls","-a"]---> Running in b59ef77d6e78Removing intermediate container b59ef77d6e78---> c55ecb39944bSuccessfully built c55ecb39944bSuccessfully tagged mycentos:0.1# 运行镜像,执行cmd[root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker run -it c55ecb39944b. .dockerenv dev home lib64 media opt root sbin sys usr.. bin etc lib lost+found mnt proc run srv tmp var# 追加参数,报错[root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker run -it c55ecb39944b -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失效[root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker run -it c55ecb39944b ls -ltotal 48lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bindrwxr-xr-x 5 root root 360 Aug 20 05:12 devdrwxr-xr-x 1 root root 4096 Aug 20 05:12 etcdrwxr-xr-x 2 root root 4096 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 4096 Dec 4 2020 lost+founddrwxr-xr-x 2 root root 4096 Nov 3 2020 mediadrwxr-xr-x 2 root root 4096 Nov 3 2020 mntdrwxr-xr-x 2 root root 4096 Nov 3 2020 optdr-xr-xr-x 121 root root 0 Aug 20 05:12 procdr-xr-x--- 2 root root 4096 Dec 4 2020 rootdrwxr-xr-x 11 root root 4096 Dec 4 2020 runlrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbindrwxr-xr-x 2 root root 4096 Nov 3 2020 srvdr-xr-xr-x 13 root root 0 Aug 20 05:12 sysdrwxrwxrwt 7 root root 4096 Dec 4 2020 tmpdrwxr-xr-x 12 root root 4096 Dec 4 2020 usrdrwxr-xr-x 20 root root 4096 Dec 4 2020 var
ENTERYPOINT:
[root@izbp1g2kp3kgefvmrhy0moz mystudy]# vi docker-enterypoint[root@izbp1g2kp3kgefvmrhy0moz mystudy]# cat docker-enterypointFROM centosENTRYPOINT ["ls","-a"][root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker build -f docker-enterypoint -t mycentos:0.1 .Sending build context to Docker daemon 3.072kBStep 1/2 : FROM centos---> 300e315adb2fStep 2/2 : ENTRYPOINT ["ls","-a"]---> Running in 1e268259b3daRemoving intermediate container 1e268259b3da---> c1164bcef3f5Successfully built c1164bcef3f5Successfully tagged mycentos:0.1[root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker run -it c1164bcef3f5. .dockerenv dev home lib64 media opt root sbin sys usr.. bin etc lib lost+found mnt proc run srv tmp var# 发现命令可以追加[root@izbp1g2kp3kgefvmrhy0moz mystudy]# docker run -it c1164bcef3f5 -ltotal 56drwxr-xr-x 1 root root 4096 Aug 20 05:23 .drwxr-xr-x 1 root root 4096 Aug 20 05:23 ..-rwxr-xr-x 1 root root 0 Aug 20 05:23 .dockerenvlrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bindrwxr-xr-x 5 root root 360 Aug 20 05:23 devdrwxr-xr-x 1 root root 4096 Aug 20 05:23 etcdrwxr-xr-x 2 root root 4096 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 4096 Dec 4 2020 lost+founddrwxr-xr-x 2 root root 4096 Nov 3 2020 mediadrwxr-xr-x 2 root root 4096 Nov 3 2020 mntdrwxr-xr-x 2 root root 4096 Nov 3 2020 optdr-xr-xr-x 121 root root 0 Aug 20 05:23 procdr-xr-x--- 2 root root 4096 Dec 4 2020 rootdrwxr-xr-x 11 root root 4096 Dec 4 2020 runlrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbindrwxr-xr-x 2 root root 4096 Nov 3 2020 srvdr-xr-xr-x 13 root root 0 Aug 20 05:23 sysdrwxrwxrwt 7 root root 4096 Dec 4 2020 tmpdrwxr-xr-x 12 root root 4096 Dec 4 2020 usrdrwxr-xr-x 20 root root 4096 Dec 4 2020 var
实战测试:自己创建Tomcat镜像
1、准备镜像文件 Tomcat 压缩包,jdk的压缩包
下载好的两个压缩包
2、编写dockerfile 文件,官方命名:Dockerfile,build会自动寻找这个文件,不需要-f 指定
FROM centosMAINTAINER wanghzeng<2021698104@qq.com>COPY readme.txt /usr/local/readme.txtADD jdk.. /usr/localADD tomcat... /usr/local# 下载vimRUN yum -y install vimENV MYPATH /usr/localWORKDIR $MYPATH# 配置环境变量ENV JAVA_HOME /usr/local/jdkENV CLASSPATH $JAVA_HOME/lib/dt.jar:JAAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/tomcatENV CATALINA_BASH /usr/local/tomcatENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/bin# 暴露端口EXPOSE 8080# 运行Tomcat 并打印日志CMD /usr/local/tomcat/bin/staeruo.sh && tail -F /usr/local/tomcat/bin/logs/catalina.out
3、构建镜像
docker build -t mytomcat
4、启动镜像
docker run -it --name tomcat01 -p 8080:8080 -v /home/wangzheng/build/tomcat/test:/usr/local/tomcat/webapps/test -v /home/wangzheng/build/tomcat/tomcatlogs/:/usr/local/tomcat/logs mytomcat
发布镜像
Docker Hub
1、登录docker login -u 账号 -p 密码2、提交镜像docker push wangzheng/镜像名# 可能出现的问题尽量带上版本号
发阿里云镜像服务上
1. 登录阿里云Docker Registry$ docker login --username=tpt11fb registry.cn-hangzhou.aliyuncs.com2. 从Registry中拉取镜像$ docker pull registry.cn-hangzhou.aliyuncs.com/wangzheng-study/test:[镜像版本号]3. 将镜像推送到Registry$ docker push registry.cn-hangzhou.aliyuncs.com/wangzheng-study/test:[镜像版本号]

