zoukankan      html  css  js  c++  java
  • docker基础全面讲解

    31、为什么会有docker出现?

    安装的时候,把原始环境一模一样的复制过来,开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题

    2、Docker

    一次构建,处处运行

    一句话:

    3、Docker安装:

     

     

    Docker三要素:

    镜像、容器、仓库

    镜像:

     

     镜像相当于类、容器相当于对象。

    容器:

    仓库:

    文档详细安装docker步骤(centOS 7):https://docs.docker.com/install/linux/docker-ce/centos/

    镜像加速器:

    docker run hello-world:

    运行过程:

     

     

       

    4、docker相关命令(常用命令)

    帮助命令:

    镜像命令:

    docker images

    docker images -a

     

     docker search +"镜像名字":如docker search tomcat

     docker pull +"镜像名字":拉取镜像,如docker pull tomcat

     

    docker rmi -f +"镜像名字":删除镜像

    镜像删除

    容器命令

     运行镜像,docker run -it "镜像ID",之后进入镜像容器,如下图中所标柱的是容器ID

     

    docker ps:是列出当前所有正在运行的容器

    dokcer rm -f $(docker ps -q):是删除当前所有正在运行的容器

     

    docker run -it  “镜像ID” 就是登录docker里面对应的镜像

    如下所示:

     启动关闭的容器:docker start "容器id或容器名"

     重启容器:docker restart "容器id或容器名"

     

    如果使用docker stop的话停止时间较长,如果使用docker kill的话会立即停止。

    容器删除

     容器删除与镜像删除有区别:

    docker rmi是删除镜像,docker rm 是删除容器。

     

    重要 

    1、命令docker run -d "镜像"

    前台交互:docker run -it,伪终端

    不与前台交互:docker run -d 

    2、查看容器日志:

    启动进程,此时docker ps,会发现容器并没退出,因为与前台进行了交互,有命令显示在终端

     

     

     3、查看容器内运行的进程

     4、进入正在运行的容器并以命令行交互,下面以退出容器的第二种方式来进行说明

      a、attach命令重新进入退出的容器

       b、exec命令重新进入退出的容器

       使用exec时,相当于进入了这个容器里面做了这么一件事,将结果返回给宿主机

       当在后面加上/bin/bash时,结果和使用attach是一样的效果,都可以进入退出的容器,所以exec比attach的功能要大一些。

     5、从容器内拷贝文件到主机上

     

       注意容器ID后面需要加上双引号,双引号后面跟的是需要复制文件的路径,再后面的是文件复制到目标路径

     docker 镜像加载原理:

      docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫UnionFS(联合文件系统)

     

     

     

     为什么tomcat镜像会有500M这么大呢?

     

    下面就是解释,tomcat镜像是由多层文件系统构成(分层镜像)

     

    为什么Docker镜像要采用这种分层结构呢?

     

    Tomcat启动

    小写的p是指定端口

    大写的p是随机端口

     通过在浏览器中输入ip://8888得出,说明tomcat启动成功,并已经映射端口成功

    当是大写的-P时:

    docker run -it  -P tomcat

     

     可以看出是随机分配的端口:32769,经测试,也是成功的

     commit提交

     演示:

      1、docker pull tomcat下载tomcat镜像到本地并成功运行

      2、故意删除上一步镜像生产tomcat容器的文档

      

       3、

    格式: 

     commit总结:docker commit提交容器副本使之成为一个新的镜像,好处就是可以自定义自己所需要的镜像

    容器数据卷

    容器卷添加

    a、直接命令添加:

     

    查看容器卷是否挂载成功

    通过docker  inspect 容器id来查看,若有如下所示情况,则挂载成功

     挂载成功后会在容器与宿主机之间实现数据共享。

     容器停止退出后,主机修改后数据也是同步的.

     附:容器退出后(exit),重新进入:

      1、docker ps -l,得出退出的容器

       2、然后获取容器ID,docker start 容器ID

      3、重新进入容器ID

     

     ro:read only(只读),只允许主机单向操作,不允许容器操作

    b、DockerFile添加:

       DcokerFile可以说是对镜像源码级的描述,它有自己的一套语法规则。

       1、根目录下新建mydockerwen文件夹并进入:

       2、可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷

       3、File构建

     #volumn test

    FROM centos

    VOLUME ["/dataVolumnContainer1","/dataVolumnContainer2"]

    CMD echo "finished,---------success1"

    CMD /bin/bash

      4、build后生成镜像

     

     注意:这个是在容器下面的,宿主机里面并没有生成的目录

     所以需要考虑这样是否具有与宿主机进行双向通信的可能?

    基于这种考虑,宿主机也考虑到了,会有默认路径存在

    DockerFiile解析

     

     

    下面是centos的dockerFile文件

    执行流程:

     DockerFile构建过程解析小总结:

      1、dokcerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

    案例:

         2、构建三步骤:

        a、编写DockerFile文件 

        FROM centos

        ENV mypath /usr/local

        WORKERDIR $mypath

        RUN yum -y install vim

        RUN yum -y install net-tools

        EXPOSE 80

        CMD /bin/bash

        b、docker build 

        c、docker run

     pwd后,进入的是自定义的落脚点

     即落脚点生效

    命令解释:

    1、DockerFile中可以有多个CMD指令,但只有最后一个CMD生效,CMD会被docker run 之后的参数替换

     

     比对tomcat的DockerFile文件可知,在CMD ["catalina.sh","run"]后面加上了CMD ls -l,是将前者给抵消,所以tomcat未启动。

    2、ENTRYPOINT

       docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合。

      制作CMD版本可以查询IP信息的容器

     

     

     

     从上面可以看出这个是有问题的。

     制作ENTRYPOINT版本的可以查询IP信息的容器

     

    以下就解决了-i的问题

     

    3、命令综合应用

    自定义镜像tomcat8

    a、编写dockerfile文件

    FROM centos
    #把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
    COPY c.txt /usr/local/cincontainer.txt
    #把Java与tomcat添加到容器中
    ADD jdk-8u231-linux-x64.tar.gz /usr/local
    ADD apache-tomcat-8.5.47.tar.gz /usr/local
    #安装vim编辑器
    RUN yum -y install vim
    #设置工作访问时候的WORKDIR路径,登录落脚点
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    #配置Java与tomcat环境变量
    ENV JAVA_HOME /usr/local/jdk1.8.0_231
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.47
    ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.47
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    #容器运行时监听时的端口
    EXPOSE 8080
    #启动运行tomcat
    #ENTRYPOINT ["/usr/local/apache-tomcat-8.5.47/bin/startup.sh"]
    #CMD ["/usr/local/apache-tomcat-8.5.47/bin/catalina.sh","run"]
    CMD /usr/local/apache-tomcat-8.5.47/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.47/bin/logs/catalina.out

     其中COPY与ADD的区别是:

    COPY只是单纯的复制,ADD是复制加解压缩

    b、build

    c、运行(宿主机与容器卷进行双向通信)

    docker run -d -p 9080:8080 --name ltm8

    -v /mydocker/tomcat9/test:/usr/local/apache-tomcat-8.5.47/webapps/test

    -v /mydocker/tomcat9/tomcat9logs:/usr/local/apache-tomcat-8.5.47/logs --privileged=true

    tomcat-lxc

    运行上述代码可以访问:

     

    暂时告一段落。。。

  • 相关阅读:
    CSS弹性盒布局(display:flex)
    CSS中的display属性(none,block,inline,inline-block,inherit)
    【Python全栈-JavaScript】JavaScript的window.onload()与jQuery 的ready()的区别
    【数据可视化-Echarts】Echart基础
    【Python全栈】HTML <!--...--> 注释 、CSS/JS //注释 和 /*.....*/ 注释
    Python内置函数
    【Django】Model操作进阶
    【Django】Form组件-2
    【Django】分页
    【Django】模板语言
  • 原文地址:https://www.cnblogs.com/lxc116317/p/11813405.html
Copyright © 2011-2022 走看看