• dockerFile


    DockerFile 介绍

    Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。使用docker build 用户可以创建一个自动执行的构建,该构建可以连续执行多个命令行指令。

    构建步骤:

    1、 编写一个dockerfile文件

    2、 docker build 构建称为一个镜像

    3、 docker run运行镜像

    4、 docker push发布镜像(DockerHub 、阿里云仓库)

    DockerFile构建过程

    基础知识:

    1、每个保留关键字(指令)都是必须是大写字母

    2、执行从上到下顺序

    3、# 表示注释

    4、每一个指令都会创建提交一个新的镜像曾,并提交!

    image-20200912124537891

    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				# 构建的时候设置环境变量,跟 -e 是一个意思
    
    					# CMD 和 ENTRYPOINT 的区别说明:(后面也会介绍)
    					# 若CMD 和 ENTRYPOINT 后跟的都是 ls -a 这个命令,当docker run 一个容器时,添加了 -l 选项,则CMD里的ls -a 命					令就会被替换成-l;而ENTRYPOINT中的 ls -a会追加-l变成 ls -a -l 
    

    image-20200912124613766

    实战: 构建自己的Centos

    实战测试

    Docker Hub中99%镜像都是从这个基础镜像过来的( FROM scratch ),然后配置需要的软件和配置来构建。

    #1.创建一个dockerfile
    FROM  centos
    MAINTAINER   martin<1634848844@qq.com>
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    RUN yum -y install vim
    RUN yum -y install net-tools
    EXPOSE 80
    CMD echo"-------build seccessulf!"
    CMD /bin/bash
    
    #2.将dokcerfile bulid 成一个镜像
    docker build [-f dockerfile路径] -t 镜像名:[tag] .        #若DockerFile文件名字是dockerfile 则可以省略不写
    [root@localhost mycentos]# docker build -t mycentos .
    Sending build context to Docker daemon  2.048kB
    Step 1/9 : FROM  centos
     ---> 0d120b6ccaa8
    Step 2/9 : MAINTAINER   martin<1634848844@qq.com>
     ---> Running in 7eb7c03f7c4e
    Removing intermediate container 7eb7c03f7c4e
     ---> 6d10910a8d15
    Step 3/9 : ENV MYPATH /usr/local
     ---> Running in 9969a7e12c2e
    Removing intermediate container 9969a7e12c2e
     ---> 285afe1fd48b
    Step 4/9 : WORKDIR $MYPATH
     ---> Running in 97f22270fcec
    Removing intermediate container 97f22270fcec
     ---> e32304af7dc4
    Step 5/9 : RUN yum -y install vim
    Step 6/9 : RUN yum -y install net-tools
    Step 7/9 : EXPOSE 80
     ---> Running in f9df5f568fd4
    Removing intermediate container f9df5f568fd4
     ---> 7d3a9cf3114b
    Step 8/9 : CMD echo"-------build seccessulf!"
     ---> Running in 1edaa05c360d
    Removing intermediate container 1edaa05c360d
     ---> d9515e3eae93
    Step 9/9 : CMD /bin/bash
     ---> Running in 59641c982f81
    Removing intermediate container 59641c982f81
     ---> ed74c68370bd
    Successfully built ed74c68370bd
    Successfully tagged mycentos:latest
    
    #3测试运行
    

    image-20200912151333903

    image-20200912151600304

    CMD和ENTRYPOINT的区别

    测试CMD

    # 编写dockerfile文件
    $ vim dockerfile-test-cmd
    FROM centos
    CMD ["ls","-a"]
    # 构建镜像
    $ docker build  -f dockerfile-test-cmd -t cmd-test:0.1 .
    # 运行镜像
    $ docker run cmd-test:0.1
    .
    ..
    .dockerenv
    bin
    dev
    
    # 想追加一个命令  -l 成为ls -al
    $ docker run cmd-test:0.1 -l
    docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "-l":
     executable file not found in $PATH": unknown.
    ERRO[0000] error waiting for container: context canceled 
    # cmd的情况下 -l 替换了CMD["ls","-l"]。 -l  不是命令,所以报错
    

    测试ENTRYPOINT

    # 编写dockerfile文件
    $ vim dockerfile-test-entrypoint
    FROM centos
    ENTRYPOINT ["ls","-a"]
    $ docker run entrypoint-test:0.1
    .
    ..
    .dockerenv
    bin
    dev
    etc
    home
    lib
    lib64
    lost+found ...
    # 我们的命令,是直接拼接在我们的ENTRYPOINT命令后面的
    $ docker run entrypoint-test:0.1 -l
    total 56
    drwxr-xr-x   1 root root 4096 May 16 06:32 .
    drwxr-xr-x   1 root root 4096 May 16 06:32 ..
    -rwxr-xr-x   1 root root    0 May 16 06:32 .dockerenv
    lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bin
    drwxr-xr-x   5 root root  340 May 16 06:32 dev
    drwxr-xr-x   1 root root 4096 May 16 06:32 etc
    drwxr-xr-x   2 root root 4096 May 11  2019 home
    lrwxrwxrwx   1 root root    7 May 11  2019 lib -> usr/lib
    lrwxrwxrwx   1 root root    9 May 11  2019 lib64 -> usr/lib64 ....
    

    DockerFile制作tomcat 镜像

    1、准备镜像文件tomcat压缩包,jdk压缩包!

    img

    2、编写Dockerfile文件,官方命名: Dockerfile ,build会自动寻找这个文件,就不要 -f 指定了!

    FROM centos
    MAINTAINER kuangshen<123456@qq.com>
    
    COPY readme.txt /usr/local/readme.txt
    
    ADD jdk-8u161-linux-x64.tar.gz    /usr/local/
    ADD apache-tomcat-8.0.53.tar.gz   /usr/local
    
    RUN yum -y install vim
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_161
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.53
    ENV CATALINA_BASH /usr/local/apache-tomcat-8.0.53
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-8.0.53/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.53/bin/logs/catalina.out
    

    3、构建镜像

    # docker build -t diytomcat .     diytomcat是定义的镜像名
    

    4、启动镜像,创建容器

    # docker run -d -p 9090:8080 --name kuangshentomcat02 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-8.0.53/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.0.53/logs diytomcat
    

    5、访问测试

    发布镜像到DockerHub

    Docker Hub

    1、地址 https://hub.docker.com/

    2、确定这个账号可以登录

    3、在我们服务器上提交自己的镜像

    #1.登录dockerhub
    [root@localhost mycentos]# docker login -u 1634848844
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    2.上传镜像
    [root@localhost ~]# docker push mycentos
    The push refers to repository [docker.io/library/mycentos]
    f7e6bad32f2f: Preparing 
    b372a66da4c4: Preparing 
    291f6e44771a: Preparing 
    denied: requested access to the resource is denied   #出现了问题
    
    解决:增加一个tag         docker tag  指定镜像的id   dockerhub的用户名/镜像重命名:[tag]
    
    [root@localhost ~]# docker tag ed74c68370bd 1634848844/mycentos:1.0
    [root@localhost ~]# docker push 1634848844/mycentos:1.0
    The push refers to repository [docker.io/1634848844/mycentos]
    f7e6bad32f2f: Pushed 
    b372a66da4c4: Pushed 
    291f6e44771a: Mounted from library/centos 
    
    1.0: digest: sha256:a7d31f4cf05ec7b5eeb824c00589f7c83ef3c966fc0247157345b9a4fea0ba89 size: 953
    
    
    

    注意:镜像的重命名前一定要加当前的dockerhub的用户名,否则将会push失败!!!!

    发布镜像到阿里云容器服务

    docker所有流程小结

    image-20200912155438051

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    C++ 数字、string 简便互转
    【C语言】递归函数DigitSum(n)
    UVALIVE 4287 Proving Equivalences (强连通分量+缩点)
    【linux驱动分析】misc设备驱动
    C++ auto 与 register、static keyword 浅析
    spring 计时器
    Spring注解配置定时任务<task:annotation-driven/>
    去除ckeditor上传图片预览中的英文字母
    编码规范
    git 手动操作
  • 原文地址:https://www.cnblogs.com/martin-huang/p/13683585.html
Copyright © 2020-2023  润新知