• Docker提交镜像-数据卷-可视化


    在熟悉完Docker的安装及基本命令使用之后,我们开始学习下Docker的进阶操作:包括但不限于新建Docker镜像,数据卷的挂载,以及Docker的可视化等。

    Docker提交镜像

    启动镜像

    我们先安装一个tomcat

    docker run -d -p 8080:8080 tomcat

    然后访问:http://192.168.88.71:8080/

    容器虽然启动了,但页面404,其实是默认没有访问页面

    [root@hadoop101 ~]# docker ps
    CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
    7f7e60ca6bf5   tomcat                "catalina.sh run"        6 seconds ago    Up 4 seconds    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                              wonderful_satoshi
    ​

    修改容器

    tomcat为了简化启动流程,省略了加载页面的操作,所以访问404,我们可以进入容器,修改一下相关配置

    [root@hadoop101 ~]# docker exec -it 7f7e60ca6bf5 /bin/bash
    root@7f7e60ca6bf5:/usr/local/tomcat# ls
    BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  work
    root@7f7e60ca6bf5:/usr/local/tomcat# cp -r webapps.dist/* webapps
    root@7f7e60ca6bf5:/usr/local/tomcat#

    tomcat的静态页面备份在了webapps.dist目录下,我们将其复制到webapps下即可。

    再次访问:http://192.168.88.71:8080/ ,我们熟悉的页面正常显示了。

    提交镜像

    然后把我修改后的容器重新提交成一个新的镜像。

    docker commit -m "cp webapps files" -a "zhangbao" 7f7e60ca6bf5 tomcat001:1.0

    [root@hadoop101 ~]# docker commit -m "cp webapps files" -a "zhangbao" 7f7e60ca6bf5  tomcat001:1.0
    sha256:1bcaa367798ccbea30337645a4839db5878a40eaed92e5c5d66c3df13edae738
    [root@hadoop101 ~]# docker images
    REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
    tomcat001             1.0       1bcaa367798c   7 seconds ago   684MB
    tomcat                latest    fb5657adc892   2 months ago    680MB

    发现比之前大了一点点。

    启动新镜像

    我们再启动新提交后的镜像

    docker run -d -p 8081:8080 tomcat001:1.0

    访问http://192.168.88.71:8081/,直接显示正常页面。

    容器数据卷

    背景

    启动一个容器后,容器内的配置或者数据也在容器中,当我们删掉容器,整个容器及内部的配置及数据都会丢失,这是不正常的,所以Docker提供了数据卷的功能,即把容器内的配置或数据映射到宿主机上,实现双向绑定,当我们要删掉一个容器的时候,其数据还可保留,当我们修改容器的配置,也不需要进入容器,可直接在映射文件中修改。

    启动镜像并添加数据卷

    docker run -it -p 8080:8080 -v /opt/test:/opt tomcat001:1.0 /bin/bash

    此命令表示运行一个tomcat001镜像,宿主机端口和容器端口都是8080,-v /opt/test:/opt 表示把容器内目录 /opt 目录挂载到宿主机 /opt/test 目录下,这样两边就实现了双向绑定。

    验证

    注:上个命令不可 ctrl+c 或者 exit退出,否则容器也直接退出了,用 ctrl+p+q 后台启动

    我们直接在宿主机的/opt/test目录下新建文件test.txt,然后查看容器内的/opt目录下的变化

    # 宿主机
    [root@hadoop101 opt]# cd /opt/test
    [root@hadoop101 test]# touch test.txt
    [root@hadoop101 test]# ll
    total 0
    -rw-r--r-- 1 root root 0 Mar 19 22:33 test.txt
    ​
    #容器内
    [root@hadoop101 ~]# docker ps
    CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS                                       NAMES
    04331e8ef590   tomcat001:1.0   "/bin/bash"   7 minutes ago   Up 7 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   crazy_mclaren
    [root@hadoop101 ~]# docker attach 04331e8ef590
    root@04331e8ef590:/usr/local/tomcat# cd /opt/
    root@04331e8ef590:/opt# ls
    test.txt
    ​

    同样的,我们在容器内修改文件内容,在宿主机也可以实时查看文件内容,并且在停止容器后,我们在宿主机上修改文件,然后再启动容器,容器内的文件同样被修改了。

    安装msyql

    docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql001 mysql:5.7

    -p 宿主机端口:容器端口

    -v 宿主机目录:容器目录,可多个-v

    -e 变量配置

    --name 容器名字

    这里我们将mysql容器的配置文件和数据目录挂载到宿主机的/home/mysql目录下

    [root@hadoop101 ~]# cd /home/mysql/
    [root@hadoop101 mysql]# ll
    total 0
    drwxr-xr-x 2 root    root   6 Mar 19 23:13 conf
    drwxr-xr-x 5 polkitd root 328 Mar 19 23:13 data
    [root@hadoop101 mysql]# cd data
    [root@hadoop101 data]# ls
    auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
    ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
    ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem
    [root@hadoop101 data]#

    然后我们通过Navicat连接,并新建数据库test,再次查看数据目录

    [root@hadoop101 data]# ls
    auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
    ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
    ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem  test
    [root@hadoop101 data]#

    数据卷挂载

    在熟悉了容器数据卷的功能后,我们再来看下数据卷的挂载,数据卷挂载有多种方式,上面我们使用是其中一种方式:指定路径挂载。其实还有其他挂载方式,不同场景可使用不同方式的挂载,可根据自身需要选择。

    匿名挂载

    -v 后面直接跟容器内的路径

    docker run -d -v /etc/nginx --name nginx001 nginx

    [root@hadoop101 ~]# docker inspect nginx001
    ## 这里只列出挂载信息,将容器内的路径/etc/nginx挂载到宿主机/var/lib/docker/volumes下
    "Mounts": [
                {
                    "Type": "volume",
                    "Name": "cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec",
                    "Source": "/var/lib/docker/volumes/cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec/_data",
                    "Destination": "/etc/nginx",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],

    具名挂载

    -v 数据卷名称:容器内路径

    docker run -d -v zhangbao_nginx:/etc/nginx --name nginx002 nginx

    
    [root@hadoop101 ~]# docker volume ls
    DRIVER    VOLUME NAME
    local     511511317ef0256d2d1570104e11a6ce897ba387267fbeec0192326dd6156067
    local     cc9ff269b7ad67fab8866e7a446009207d2a3af24395003a8cb75f3981022eec
    local     e5303012839aa87faef7719a0407f690a9da8af1fcf6dfc2ef51cf20a5aa441f
    local     zhangbao_nginx
    [root@hadoop101 ~]# docker volume inspect zhangbao_nginx
    [
        {
            "CreatedAt": "2022-03-21T23:09:43+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/zhangbao_nginx/_data",
            "Name": "zhangbao_nginx",
            "Options": null,
            "Scope": "local"
        }
    ]

    上面就是匿名挂载和具名挂载了,我们经常用的还有一种就是指定路径

    指定路径挂载

    -v 宿主机路径:容器路径

    docker run -d -v /etc/nginx:/etc/nginx --name nginx003 nginx

    [root@hadoop101 ~]# docker inspect nginx003
    "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/etc/nginx",
                    "Destination": "/etc/nginx",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],

     

    Docker可视化

    portainer

    一个提供web页面的Docker管理工具,命令如下:

    docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

    访问:http://192.168.88.71:8088

    添加超管账号:admin / 88888888

    然后选择本地的docker环境

    连接之后,我们可以查看有7个镜像,然后点击进去

    可以看到本地环境有7个镜像,13个容器,10个数据卷。

     

    查看有哪7个镜像,可以看到有我们之前测试使用的镜像,包括我们自己提交的一个修改后的新镜像tomcat001:1.0

     

    数据卷列表,包括我们创建的匿名数据卷,以及具名数据卷。

     

    lazydocker

    一个基于终端的Docker可视化查询工具。

    github:https://github.com/jesseduffield/lazydocker

    docker run --rm -it -v \
    /var/run/docker.sock:/var/run/docker.sock \
    -v /.config/lazydocker:/.config/jesseduffield/lazydocker \
    lazyteam/lazydocker

     

    鼠标和方向键都可控制查看信息框,在整个屏幕底部也有提示

     

    鼠标和方向键演示

    每次查看都需要很长的命令,我们可以简化下

    echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc
    ​

     

    更多请在某公号平台搜索:选手一号位,本文编号:2002,回复即可获取。

  • 相关阅读:
    Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd
    金仓数据库KingbaseES客户端编程接口指南-DCI(6. 附录-DCI错误码)
    C语言文件读写
    vue3语法糖+ts组件传值
    Python复习(持续更新)
    JAVA线程模型
    山西电力市场日前价格预测【2023-09-30】
    广和通正式发布工业级低功耗单频双模GNSS模组G030&G031
    CX5120控制汇川IS620N伺服报错E15解决方案
    Windows10安装MySQL5.7.43
  • 原文地址:https://www.cnblogs.com/zhangbaohpu/p/16074097.html