• Docker的数据管理和端口映射实现容器访问


    Docker的数据管理

    存储资源类型

    在使用Docker的过程中,需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至需要多个容器之间进行数据共享时,势必会设计到容器的数据管理:

    • Data Volume(数据卷)

    • Data Volume Dontainers —数据卷容器

    Docker容器有两种方式 卷 和 绑定挂载 可将容器中的文件存储在宿主机的文件系统上,这样即使在容器停止之后这些文件也会被保留。如果你在Linux上运行Docker,你也可以使用tmpfs挂载。

    volume , bind和tmpfs三者的相同点和区别:

    • 相同之处:

    无论您选择使用哪种类型去使用,数据在容器内看起来都是相同的。它被视为容器文件系统中的目录或单个文件。

    • 不同之处:

    卷(volume)存储在Docker管理的主机文件系统的一部分中(在Linux上是:/var/lib/docker/volumes/)。非Docker进程不应该修改这部分文件系统。卷是在Docker中保留数据的最佳方式。

    • 绑定挂载(bind mount):

    就是把主机的本地目录挂载到容器中某个挂载点。可以存储在主机系统的任何位置。他们甚至可能是重要的系统文件或目录。Docker主机或Docker容器上的非Docker进程可以随时修改它们。

    • tmpfs挂载(tmpfs mount):

    仅存储在主机系统的内存中,而不会写入主机系统的文件系统。

    数据卷

    1、Data Volume的特点:

    • Data Volume是目录或文件,而非没有格式化的磁盘(块设备)。

    • 容器可以读写volume中的数据。

    • volume数据可以被永久的保存,即使使用它的容器已经销毁。

    2、Data Volume的使用

    1)通过参数 -v 运行一个容器,将本地的 /html 目录挂载到容器的 /usr/share/nginx/html 目录上

    [root@docker1 ~]# docker run --name c1 -d -v /html:/usr/share/nginx/html -p 80:80 nginx:1.14-alpine //将容器c1的 /usr/share/nginx/html 和宿主机的 /html 和做一个挂载关联

    8e6ca89aac03198e79e9b91fd9be10d3f8a9f52ce384c3fd318b628949896aa9

    [root@docker1 ~]# docker ps //确保容器处于运行状态

    2)在宿主机上对网页内容进行修改

    [root@docker1 ~]# echo “ceshi” > /html/index.html

    [root@docker1 ~]# curl 192.168.159.145

    ceshi

    3)在容器上对网内内容进行修改

    [root@docker1 ~]# docker exec -it c1 /bin/sh

    / # echo “techi again” > /usr/share/nginx/html/index.html

    / # exit

    [root@docker1 ~]# curl 192.168.159.145

    techi again

    [root@docker1 ~]# cat /html/index.html

    techi again

    综上所述:已经将宿主机的 /html 与 容器的 /usr/share/nginx/html 进行了关联,也能做到持久化的存储。

    端口映射实现容器访问

    外部访问Docker容器

    1、当使用 -P 标记是,Docker 会随机映射一个49000~49900 的端口到内部容器开放的网络端口。

    2、-p(小写)则可以指定要映射的IP和端口,但是在一个指定端口上可以绑定一个容器。支持的格式有 hostPort : containerPort、 ip : hostPort : containerPort、ip : : containerPort。

    将容器的5000端口映射到指定地址127.0.0.1的5000端口上:

    docker run -it -d -p 127.0.0.1:5000:5000 busybox /bin/sh

    将容器的4000端口映射到127.0.0.1的任意端口上:

    docker run -it -d -p 127.0.0.1::4000 busybox /bin/sh

    将容器的80端口映射到宿主机的8000端口上:

    docker run -itd -p 8000:80 busybox /bin/sh

    查看映射端口配置:

    docker port 容器名/容器ID

    Docker容器间通信

    使用link方式使容器可以相互通信

    docker run --link 可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以相互通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量

    例:

    docker run --name MySQL -e MYSQL_ROOT_PASSWORD=123456 -d --restart=always mysql:5.6

    //注:-e 是配置环境变量,–restart=always 是一个重启策略,是指容器重启之后一直保持启动状态

    然后就可以向容器MySQL 数据库执行SQL语句了:

    [root@docker1 ~]# docekr run -it --link MySQL --rm mysql:5.6 sh -c ‘exec mysql -uroot -p"ROOT_PASSWORD" -h"IP"’

    示例:搭建论坛

    [root@docker1 ~]# docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d --restart=always mysql:5.7

    [root@docker1 ~]# docker ps

    [root@docker1 ~]# docker run --rm --name web --link db:db y109/discuz env

    [root@docker1 ~]# docker run --name web -d -p 80:80 --link db:db y109/discuz

    0d067f23fe1bdb8960125b846d79ca38ad65da2742b26965717545a398d5c1d3

    [root@docker1 ~]# docker ps

    通过windows浏览器访问

  • 相关阅读:
    InternLM2-lesson3作业+笔记
    ubuntu 挂载硬盘操作
    etcd实现大规模服务治理应用实战
    计算机毕业设计之java+ssm基于web的智能卤菜销售平台
    顶层设计:who适合且能够当大学校长
    秋招华为架构分享,深谙面试之道的Java面试八股文
    对抗生成网络(GAN)
    LeetCode --- 1518. Water Bottles 解题报告
    最长回文子串
    Replication(上):常见复制模型&分布式系统挑战
  • 原文地址:https://blog.csdn.net/m0_67392182/article/details/126327612