• 6--容器数据卷,发布镜像,Docker小结


    一、容器数据卷

    1.什么是容器数据卷

    docker的理念回顾
    将应用和环境打包成一个镜像
    数据?如果数据都在容器中,那么我们容器删除,数据会丢失!(需求:数据持久化)
    MySQL,容器删除了,删库跑路!(需求:MySQL数据可以存储在本地)
    容器之间可以有一个数据共享技术!docker容器中产生的数据,同步到本地!
    这就是卷技术,目录的挂载,将我们容器内的目录挂载到linux上面!
    总结:容器的持久化和同步操作!容器间也是可以数据共享的!

    在这里插入图片描述

    2.使用数据卷

    1.方法一:直接使用命令来挂载 -v 方式二:dockerfile

    [root@docker ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
                                      指定主机目录:容器挂载目录
    [root@docker ~]# cd /home  #切换到主机家目录查看挂载目录
    [root@docker home]# ll
    总用量 0
    drwxr-xr-x 2 root root 6 3月  20 06:11 ceshi
    [root@docker ~]# docker inspect  #查看挂载详细信息
    

    在这里插入图片描述

    2.测试挂载

    目录同步测试:容器到主机
    #1.容器内部
    [root@92109883794f /]# cd /home
    [root@92109883794f home]# ls
    [root@92109883794f home]# touch test.java
    [root@92109883794f home]# ls
    test.java
    #2.主机上查看
    [root@docker ~]# cd /home/ceshi/
    [root@docker ceshi]# ll
    总用量 0
    [root@docker ceshi]# ls
    test.java
    
    #1.主机上修改内容测试:主机到容器
    [root@92109883794f home]# exit  #要先停掉容器
    exit
    [root@docker ~]# cd /home/ceshi/
    [root@docker ceshi]# ll
    总用量 0
    [root@docker ceshi]# ls
    test.java
    [root@docker ceshi]# vim test.java 
    hello world 123
    
    #2.在容器内文件查看内容
    [root@docker ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                     PORTS                    NAMES
    92109883794f   centos    "/bin/bash"              32 minutes ago   Exited (0) 2 minutes ago                            quizzical_grothendieck
    [root@docker ~]# docker start 92109883794f
    92109883794f
    [root@docker ~]# docker attach 92109883794f
    [root@92109883794f /]# cd /home/
    [root@92109883794f home]# ls
    test.java
    [root@92109883794f home]# cat test.java 
    hello world 123
    

    3.具名和匿名挂载

    #1.匿名挂载
    -v 容器内路径
    docker run -d -p --name nginx01 -v /etc/nginx  #不指定主机路径直接是容器内部目录
    
    #实例:
    [root@docker ~]# docker run -d -P --name=nginx01 -v /etc/nginx nginx
    70935dcb3f6965868c01ac8c0e6f064d852369e40014a8e77dddaef306bf7474
    [root@docker ~]# docker volume ls  #查看所有卷的情况(匿名卷)
    DRIVER    VOLUME NAME
    local     407aab886d4ab09134f036628a7eac69604f204bd2facbae5b01c1ef3aa33a00 
    #这种就是匿名挂载,我们在-v只写了容器内部的路径,没有写容器外的路径
    
    #2.具名挂载
    [root@docker ~]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx  
    8ac7b6cf216f26d58f46c8af45754abcf08134460d2be802863b43516c08538f
    # 通过 -v 卷名:容器内路径
    [root@docker ~]# docker volume ls
    DRIVER    VOLUME NAME
    local     juming-nginx
    [root@docker ~]# docker volume inspect juming-nginx  #查看具名挂载的具体信息
    [
        {
            "CreatedAt": "2021-03-20T08:16:05+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
            "Name": "juming-nginx",
            "Options": null,
            "Scope": "local"
        }
    ]
    
    ### 所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_data
    #我们通过具名挂载可以方便的找到我们的一个卷,大多数情况使用的具名挂载
    

    3.如何确定具名挂载还是匿名挂载,还是指定路径挂载?

     -v  容器内路径       #匿名挂载
     -v  卷名:容器内部路径   #具名挂载
     -v  /宿主机路径:容器内部路径   #指定路径挂载
      
    扩展:
    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
    
    # 通过-v 容器内部路径:ro/rw改变读写权限
    
    #ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部无法操作!
    

    二、发布镜像

    1.发布镜像到DockerHub

    DockerHub:

    • 1.地址:https://hub.docker.com/ 注册自己的账号!
      2.确定这个账号可以登录
      3.在服务器上提交自己的镜像:要先登录(docker login)
      4.登录完毕后就可以提交镜像了(docker push +作者名字/镜像名字:版本号)
    #1.为上传镜像打标签
    [root@docker nginx]# docker tag lnmp-nginx:latest elaina0808/lnmp-nginx:v1
    
    
    #2.登录docker
    [root@docker nginx]# docker login -u 名字
    
    Login Succeeded
    
    #3.上传镜像
    [root@docker nginx]# docker push elaina0808/lnmp-nginx:v1
    The push refers to repository [docker.io/elaina0808/lnmp-nginx]
    fe61ffbfead8: Pushed 
    90d6f5ce54c2: Pushed 
    21ef22ee2206: Pushed 
    20be8177ecd4: Pushed 
    a7d7ec415fe7: Pushed 
    85fcec7ef3ef: Pushed 
    3e5288f7a70f: Pushed 
    56bc37de0858: Pushed 
    1c91bf69a08b: Pushed 
    cb42413394c4: Pushed 
    v1: digest: sha256:218a463a25c8e438913029d6d71935775382e9d93c9362d0a23498cd6c594ca2 size: 2398
    

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

    阿里云容器服务上:

    1).登录阿里云

    2).找到容器镜像服务

    3).创建命名空间

    在这里插入图片描述

    4)创建镜像仓库(默认私有,本地仓库)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    5)浏览阿里云

    在这里插入图片描述

    #1.为上传镜像打标签
    [root@docker nginx]# docker tag lnmp-nginx:latest registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx:v1
    [root@docker nginx]# docker images  #查看镜像
    REPOSITORY                                            TAG                IMAGE ID       CREATED             SIZE
    registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx   v1                 5362b04ad066   About an hour ago   133MB
    
    #2.登录阿里云
    [root@docker nginx]# sudo docker login --username=fxsyiyebaofu registry.cn-shanghai.aliyuncs.com
    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
    
    
    #3.上传镜像
    [root@docker nginx]# docker push registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx:v1
    The push refers to repository [registry.cn-shanghai.aliyuncs.com/elaina/lnmp-nginx]
    fe61ffbfead8: Pushed 
    90d6f5ce54c2: Pushed 
    21ef22ee2206: Pushed 
    20be8177ecd4: Pushed 
    a7d7ec415fe7: Pushed 
    85fcec7ef3ef: Pushed 
    3e5288f7a70f: Pushed 
    56bc37de0858: Pushed 
    1c91bf69a08b: Pushed 
    cb42413394c4: Pushed 
    v1: digest: sha256:218a463a25c8e438913029d6d71935775382e9d93c9362d0a23498cd6c594ca2 size: 2398
    

    三、Docker小结

    在这里插入图片描述

  • 相关阅读:
    python类库31[正则表达式匹配实例]
    Mysql百万级数据迁移实战笔记
    面试官:一千万数据,怎么快速查询?
    为什么MySQL不建议使用NULL作为列默认值?
    Redis各个数据类型最大存储量
    Rabbitmq延迟队列实现定时任务
    PHPstorm批量修改文件换行符CRLF为LF
    使用SeasLog打造高性能日志系统
    协程编程注意事项
    Rabbitmq 安装过程中常见问题(亲测可行)
  • 原文地址:https://www.cnblogs.com/caodan01/p/15086004.html
Copyright © 2020-2023  润新知