zoukankan      html  css  js  c++  java
  • Docker学习03

    commit镜像

    • docker commit 提交容器成为一个新的版本
      
      docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
      
    • # 启动一个默认的tomcat
      docker run -it -p 8080:8080 tomcat
      docker ps 
      
      # 发现这个默认的tomcat 是没有webapps应用的,官网的镜像默认webapps下是没有文件的
      
      # 将webapps.dist 下的文件拷贝到webapss 
      
      # 将操作过后的容器通过commit提交为一个镜像,之后使用
      docker commit -m="add webapps" -a="yunhgu" asdfsadfsfd tomcat01:v1.0
      
    • REPOSITORY                                 TAG       IMAGE ID       CREATED         SIZE
      tomcat01                                   v1.0      9f4ef5658c7c   44 hours ago    672MB
      
      

    容器数据卷

    • docker的理念
      将应用和环境打包成一个镜像
      数据?加入数据都在容器中,数据就会丢失, 因此希望数据可以持久化

    ​ 容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!

    ​ 目录的挂载,将容器内的目录,挂载到Linux上面

    ​ **容器的持久化和同步操作!容器之间可以数据共享 **

    • 使用数据卷(双向的,源和目的会保持一致)

      方式一:使用命令来进行挂载 -v
      docker run -it -v 主机目录:容器目录 容器 /bin/bash
      
      # 启动后我们可以通过docker inspect 容器id 来查看是否绑定成功
      "Mounts": [
                  {
                      "Type": "bind",
                      "Source": "/home/ceshi",
                      "Destination": "/home",
                      "Mode": "",
                      "RW": true,
                      "Propagation": "rprivate"
                  }
              ],
      

      好处:以后修改只需要在本地上修改,不需要进入到容器,数据可以持久保存

    • 练习:Mysql数据持久化

      root@K8S-APP-T02:/home#docker images
      REPOSITORY                                 TAG       IMAGE ID       CREATED         SIZE
      mysql                                      latest    0627ec6901db   2 weeks ago     556MB
      # 启动mysql,设置挂载的文件,同时mysql需要配置密码
      root@K8S-APP-T02:/home#docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:latest
      root@K8S-APP-T02:/home#ls
      config  mysql  sysadmin  sys-config.txt  test.txt  viewer
      

      将容器删除后,本地的数据依然在

    具名和匿名挂载

    # 匿名挂载
    -v 容器内路径
    docker run -d -p --name nginx01 -v /etc/nginx nginx
    # 查看所有volume的情况
    docker volume ls
    DRIVER    VOLUME NAME
    local     2169dfd83e56afcb41cb6c332b3c65a228b5deca2cdf6c7cf16b624dcabd2c38
    local     24400f15cd3d990ce8191502519d6b20bd354c22468366b621df365eacc394bb
    local     d8d5a0c33f2a4cd686cefcf6df5c08f0d6beaf51f456230b168c5f782fb2e164
    
    这个就是匿名挂载,我们在-v 只写了容器内的地址,没有写容器外的
    
    # 具名挂载
    root@K8S-APP-T02:/home#docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
    5d336b7d5c9abfd26432f36b4f6fa42ee147b63f843e4d5e41175c30d8151ad4
    root@K8S-APP-T02:/home#docker volume ls
    DRIVER    VOLUME NAME
    local     2169dfd83e56afcb41cb6c332b3c65a228b5deca2cdf6c7cf16b624dcabd2c38
    local     24400f15cd3d990ce8191502519d6b20bd354c22468366b621df365eacc394bb
    local     d8d5a0c33f2a4cd686cefcf6df5c08f0d6beaf51f456230b168c5f782fb2e164
    local     juming-nginx
    
    
    # 通过 -v 卷名:容器内路径
    
    # 查看一下卷的路径
    root@K8S-APP-T02:/home#docker volume inspect juming-nginx
    [
        {
            "CreatedAt": "2021-05-10T10:36:46+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/gwmfc/app/docker/volumes/juming-nginx/_data",
            "Name": "juming-nginx",
            "Options": null,
            "Scope": "local"
        }
    ]
    
    

    所有的docker 容器内的卷,没有指定目录的情况下都是在/docker/volumes下

    # 如何确定是具名挂载还是匿名挂载,还是指定路径挂载
    -v 容器内路径 # 匿名挂载
    -v 卷名:容器内路径 # 具名挂载
    -v /宿主机路径:容器内路径 # 指定路径挂载
    

    拓展:

    # 通过 -v 容器内路径:ro rw 改变读写权限
    ro readonly # 只读
    rw readwrite # 可读可写
    
    docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
    docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
    

    Dockerfile初识

    Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!

    通过脚本可以生成镜像,镜像是一层一层的,脚本一个一个的命令,每个命令都是一层

    vim dockerfile 
    root@K8S-APP-T02:/home/docker-test-volume#cat dockerfile 
    FROM centos
    
    VOLUME ["volume01","volume02"]
    
    CMD echo "-----end--------"
    CMD /bin/bash
    root@K8S-APP-T02:/home/docker-test-volume#docker build -f dockerfile -t yunhgu/centos:1.0 .
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM centos
     ---> 300e315adb2f
    Step 2/4 : VOLUME ["volume01","volume02"]
     ---> Running in 26b54cc7965d
    Removing intermediate container 26b54cc7965d
     ---> 2ac3a569f7fc
    Step 3/4 : CMD echo "-----end--------"
     ---> Running in d1ab2773f28f
    Removing intermediate container d1ab2773f28f
     ---> f324d56aedcd
    Step 4/4 : CMD /bin/bash
     ---> Running in c78ae51d0024
    Removing intermediate container c78ae51d0024
     ---> e1b499caf46c
    Successfully built e1b499caf46c
    Successfully tagged yunhgu/centos:1.0
    
    
    root@K8S-APP-T02:/home/docker-test-volume#docker images
    REPOSITORY                                 TAG       IMAGE ID       CREATED              SIZE
    yunhgu/centos                              1.0       e1b499caf46c   About a minute ago   209MB
    
    
    # 启动测试
    root@K8S-APP-T02:/root#docker run -it e1b499caf46c /bin/bash
    [root@b7cdc2fe6e75 /]# ls -l
    total 0
    lrwxrwxrwx   1 root root   7 Nov  3  2020 bin -> usr/bin
    drwxr-xr-x   5 root root 360 May 10 03:31 dev
    drwxr-xr-x   1 root root  66 May 10 03:31 etc
    drwxr-xr-x   2 root root   6 Nov  3  2020 home
    lrwxrwxrwx   1 root root   7 Nov  3  2020 lib -> usr/lib
    lrwxrwxrwx   1 root root   9 Nov  3  2020 lib64 -> usr/lib64
    drwx------   2 root root   6 Dec  4 17:37 lost+found
    drwxr-xr-x   2 root root   6 Nov  3  2020 media
    drwxr-xr-x   2 root root   6 Nov  3  2020 mnt
    drwxr-xr-x   2 root root   6 Nov  3  2020 opt
    dr-xr-xr-x 277 root root   0 May 10 03:31 proc
    dr-xr-x---   2 root root 162 Dec  4 17:37 root
    drwxr-xr-x  11 root root 163 Dec  4 17:37 run
    lrwxrwxrwx   1 root root   8 Nov  3  2020 sbin -> usr/sbin
    drwxr-xr-x   2 root root   6 Nov  3  2020 srv
    dr-xr-xr-x  13 root root   0 Apr  1 02:33 sys
    drwxrwxrwt   7 root root 145 Dec  4 17:37 tmp
    drwxr-xr-x  12 root root 144 Dec  4 17:37 usr
    drwxr-xr-x  20 root root 262 Dec  4 17:37 var
    drwxr-xr-x   2 root root   6 May 10 03:31 volume01
    drwxr-xr-x   2 root root   6 May 10 03:31 volume02
    我们通过dockerfile 创建的image 已经写好了挂载的文件,减少了后期手动再去挂载
    

    数据卷容器

    多个容器同步数据

    # 创建一个容器
    root@K8S-APP-T02:/root#docker images
    REPOSITORY                                 TAG       IMAGE ID       CREATED         SIZE
    yunhgu/centos                              1.0       e1b499caf46c   2 hours ago     209MB
    root@K8S-APP-T02:/root#docker run -it --name docker01 e1b499caf46c
    [root@2fb09d1b140e /]# 
    
    # 创建另一个容器
    root@K8S-APP-T02:/root#docker run -it --name docker02 --volumes-from docker01 e1b499caf46c
    
    # 在docker01 里的volume 中的数据会同步到docker02, 反之也会同步
    # 删除docker01 ,docker02里的文件不会丢失	
    

    结论:

    容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

    但是一旦持久化到本地,这个时候, 本地的数据是不会删除的

    不论你在什么时候开始,重要的是开始之后就不要停止。 不论你在什么时候结束,重要的是结束之后就不要悔恨。
  • 相关阅读:
    sudo在shell脚本执行的问题
    mahout的数据文件格式
    mahout概述
    基于keepalived的redis系统master双机热备,读数据负载均衡设置方案
    输入挂(读数大致格式)
    POJ3762 The Bonus Salary! (费用流+离散化)
    codeforces round 321 div2 D Kefa and Dishes(状态压缩dp)
    HDU5492 Find a path (dp)
    大数模版
    RMQ模版
  • 原文地址:https://www.cnblogs.com/yunhgu/p/14753744.html
Copyright © 2011-2022 走看看