Docker 容器互联

2023-05-16

1. 基于 Volume 互联

1.1 存储 Driver

  • Aufs: Docker最早支持的driver,但它只是Linux内核的一个补丁集。

  • Device Mapper: Linux2.6 内核提供的一种从逻辑设备到物理设备的映射框架机制,时LVM2的核心,支持块级别的copy on write特性。

  • VFS: 虚拟文件系统,每层都是一个单独的目录,如果新增一个child层,则需要将父级层镜像文件一并复制到新目录,不支持copy on write特性

  • Btrfs: 速度快,采用btrfs的文件系统的快照能力来实现layer分层功能。缺点是还不够成熟。

  • Overlay: 当前最新的文件驱动

1.2 不指定挂载目录

默认放在容器的**_data**目录下

$ docker run --rm -it -v /data ubuntu /bin/bash

root@c33db6442eeb:/# df
Filesystem                        1K-blocks    Used Available Use% Mounted on
overlay                            19475088 8221656  10241108  45% /
tmpfs                                 65536       0     65536   0% /dev
tmpfs                               1000948       0   1000948   0% /sys/fs/cgroup
shm                                   65536       0     65536   0% /dev/shm
/dev/mapper/ubuntu--vg-ubuntu--lv  19475088 8221656  10241108  45% /data
tmpfs                               1000948       0   1000948   0% /proc/asound
tmpfs                               1000948       0   1000948   0% /proc/acpi
tmpfs                               1000948       0   1000948   0% /proc/scsi
tmpfs                               1000948       0   1000948   0% /sys/firmware

$ docker inspect c33db6442eeb
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/c3de425847ca3026927f29d8e6cdc9bde2360861f6e94bc6249a13589494fafe-init/diff:/var/lib/docker/overlay2/135cb45c9b61b0b6bd7ea119ee0ab2b30ccf9695e8197d635922f72a5cc007b5/diff",
                "MergedDir": "/var/lib/docker/overlay2/c3de425847ca3026927f29d8e6cdc9bde2360861f6e94bc6249a13589494fafe/merged",
                "UpperDir": "/var/lib/docker/overlay2/c3de425847ca3026927f29d8e6cdc9bde2360861f6e94bc6249a13589494fafe/diff",
                "WorkDir": "/var/lib/docker/overlay2/c3de425847ca3026927f29d8e6cdc9bde2360861f6e94bc6249a13589494fafe/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "volume",
                "Name": "1018b771cefd508a5b610314a5e8599535895f72a0c1b731e17bfbb57217ecd9",
                "Source": "/var/lib/docker/volumes/1018b771cefd508a5b610314a5e8599535895f72a0c1b731e17bfbb57217ecd9/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

1.3 指定挂载目录

$ mkdir -p /mnt/data  # 宿主机上创建目录 (SRC:DEST)

$ docker run --rm -it -v /mnt/data:/data ubuntu /bin/bash
root@b15e7b09953e:/# df
Filesystem                        1K-blocks    Used Available Use% Mounted on
overlay                            19475088 8221792  10240972  45% /
tmpfs                                 65536       0     65536   0% /dev
tmpfs                               1000948       0   1000948   0% /sys/fs/cgroup
shm                                   65536       0     65536   0% /dev/shm
/dev/mapper/ubuntu--vg-ubuntu--lv  19475088 8221796  10240968  45% /data
tmpfs                               1000948       0   1000948   0% /proc/asound
tmpfs                               1000948       0   1000948   0% /proc/acpi
tmpfs                               1000948       0   1000948   0% /proc/scsi
tmpfs                               1000948       0   1000948   0% /sys/firmware

$ docker inspect b15e7b09953e
      "Mounts": [
            {
                "Type": "bind",
                "Source": "/mnt/data",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

1.4 基于数据容器的单主机互联

数据容器:只提供数据的容器,业务容器连接到该数据容器,实现数据共享

# 共享  --volumes-from
$ docker run --rm -it --privileged=true --volumes-from=b15e7b09953e ubuntu /bin/sh

$ docker inspect e8fd1836a90f
         "Mounts": [
            {
                "Type": "bind",
                "Source": "/mnt/data",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

2. 基于 Link 互联

docker 启动参数 --icc=false, 关闭互联

--link name:alias: 可以通过一个固定的name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。

$ docker run --name=mysql-server -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.28

# link 网络
$ docker run --rm --link=mysql-server:db -it nginx /bin/bash
root@dbbef909d582:/# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      db aedbae5bebb9 mysql-server
172.17.0.3      dbbef909d582

root@dbbef909d582:/# apt install mariadb-client

root@dbbef909d582:/# mysql -h mysql-server -p
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.003 sec)

3. 基于 Network 互联

3.1 端口映射

$ docker run --rm -p 8306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.28

$ ps -ef | grep docker-proxy
root       75228   62168  0 20:14 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8306 -container-ip 172.17.0.2 -container-port 3306

3.2 宿主机网络

$ docker run --rm --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.28
$ mysql -h 127.0.0.1 -P 3306 -p

3.3 容器共用一个IP网络

$ docker run --rm --name=mysql-server -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.28
$ docker exec -it mysql-server cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      09af02aab502

# 与 mysql 共用网络
$ docker run --rm --name nginx-server --net=container:mysql-server -d nginx
$ docker exec -it nginx-server cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      09af02aab502


4. 实例:安装 MySQL 主从数据库

4.1 创建配置文件

mkdir -p /mysql_data/conf
mkdir -p /mysql_data/master
mkdir -p /mysql_data/slave

# 主节点配置
cat > /mysql_data/conf/master.conf <<EOF
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
log_bin = log  # 开启二进制日志,用于从节点的历史复制回放
collation-server = utf8_unicode_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
server_id = 1  # 需保证主库和从库的server_id不同
replicate-do-db=fileserver   # 需要复制的数据库名,复制多个数据库时,重复设置即可
EOF

# 从节点配置
cat > /mysql_data/conf/slave.conf <<EOF
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
log_bin = log  # 开启二进制日志,用于从节点的历史复制回放
collation-server = utf8_unicode_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
server_id = 2  # 需保证主库和从库的server_id不同
replicate-do-db=fileserver   # 需要复制的数据库名,复制多个数据库时,重复设置即可
EOF

4.2 启动MYSQL容器

# 主节点
docker run -d --name mysql-master -p 13306:3306 \
-v /mysql_data/conf/master.conf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /mysql_data/master:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 从节点
docker run -d --name mysql-slave -p 13307:3306 \
-v /mysql_data/conf/slave.conf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /mysql_data/slave:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

4.3 宿主机安装 MYSQL 客户端

# 卸载 mariadb 组件
$ yum list installed | grep -i mariadb
mariadb-libs.x86_64             1:5.5.65-1.el7                 @anaconda     

$ yum remove -y mariadb-libs

# 安装 mysql repo
yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

# 安装客户端
yum search mysql-community
yum install -y mysql-community-client

4.4 配置同步信息

4.4.1 主节点

# 不要使用localhost,使用本机公网IP
mysql -uroot -h 192.168.31.60 -P13306 -p

# 授权slave节点登录
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';
mysql> flush privileges;
mysql> create database utime default character set utf8mb4;

mysql> show master status\G
*************************** 1. row ***************************
             File: log.000001
         Position: 582
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

4.4.2 从节点

mysql -uroot -h 192.168.31.60 -P13307 -p   # 不要使用localhost,使用本机公网IP

mysql> stop slave;
mysql> create database utime default character set utf8mb4;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.31.60', MASTER_PORT=13306, MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='log.000001', MASTER_LOG_POS=627;

mysql> start slave;
mysql> show slave status\G
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 容器互联 的相关文章

  • 解决Linux下载较慢的问题

    修改源 xff0c 输入命令sudo gedit etc apt sources list xff0c 覆盖源文件中所有内容 deb http mirrors aliyun com ubuntu trusty main restricted
  • Linux配置ssh

    服务器主机安装ssh sudo apt get install openssh server xff0c 客户端使用putty等支持ssh的软件登录即可 xff0c 记住服务器的ip和密码
  • pytorch计算模型参数量

    total span class token operator 61 span span class token builtin sum span span class token punctuation span span class t
  • 【字符串】把字符串转换成整数

    题目描述 将一个字符串转换成一个整数 xff0c 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 输入描述 输入一个字符串 包括数字字母符号 可以为空 返回值描述 如果是合法的数值表达则返回该数字 xff0
  • 【树】二叉树的镜像

    题目描述 操作给定的二叉树 xff0c 将其变换为源二叉树的镜像 思路很简单 xff0c 只需要递归遍历树 xff0c 然后将每个节点的左右子树调换即可 span class token keyword import span java s
  • 【树】树的子结构

    来自剑指offer 这题有点难度 xff0c 解题思想是 xff1a 若B是A的子树 xff0c 则子树的根节点可能为树A中的任意一个节点 xff0c 因此只需要遍历树A的每个节点 xff0c 判断以这个节点为根节点的树是否包含子树B xf
  • Docker 网络

    1 简介 容器网络实质上是由 Docker 为应用程序所创造的虚拟环境的一部分 xff0c 它能让应用从宿主机操作系统的网络环境中独立出来 xff0c 形成容器自有的网络设备 IP 协议栈 端口套接字 IP 路由表 防火墙等与网络相关的模块
  • Ubuntu 20安装Nvidia驱动 + cuda10.1 + Anaconda + pytorch 1.5

    安装Nvidia驱动 输入命令 ubuntu drivers devices查看显卡推荐的驱动选择recommend的版本进行安装 xff0c 例如我的是460 sudo apt install nvidia driver 460 安装完成
  • VScode ssh远程服务器解决试图写入的管道不存在

    解决方案 xff0c 在C盘用户目录下找到 ssh文件 xff0c 删除known hosts文件或打开known hosts删除对应的ip
  • S3DIS场景点云数据集

    S3DIS是常用的室内场景分割数据集 xff0c 包含6个Area xff0c 常用的数据格式如下 xff1a Stanford3dDataset v1 2 Aligned Version xff0c 百度网盘下载 xff0c 提取码0ac
  • jupyter远程连接服务器

    服务器终端输入命令 jupyter notebook no browser port 61 8889 本地终端输入命令 ssh N f L localhost 8888 localhost 8889 username 64 ip usern
  • win10远程Linux桌面

    在Linux服务器安装xrdp xff1a sudo apt install xrdp win10远程 xff0c win 43 R xff0c 输入mstsc xff0c 输入linux服务器ip和账户 具体参考 https www ma
  • python控制输出精度

    a span class token operator 61 span span class token number 3 1456 span b span class token operator 61 span span class t
  • 多分类混淆矩阵的理解

    借用其它博客的一张例子示意图 xff0c 该图为一个三分类问题的混淆矩阵 xff0c 对角线的值表示分类器对该类别预测正确的个数 xff0c 每一列纵轴表示这个类别真实的样本数 xff0c 例如从第一列可以得知猫一共有10 43 3 43
  • ERROR: Could not find a version that satisfies the requirement dateutil

    安装dateutil出错 xff0c 提示 ERROR Could not find a version that satisfies the requirement dateutil 解决办法 xff1a pip install pyth
  • RTX3090 + cuda 11.1 + torch1.9.0 安装 MinkowskiEngine

    创建conda环境 conda create n mink span class token assign left variable python span span class token operator 61 span span c
  • pytorch更新tensor中指定index位置的值scatter_add_

    使用scatter add 更新tensor张量中指定index位置的值 例子 span class token keyword import span torch a span class token operator 61 span t
  • Docker 私有仓库

    1 Registry 官方私有仓库 xff0c 优点 xff1a 简单 xff1b 缺点 xff1a 部署无法进行复杂的管理操作 1 1 镜像 docker pull registry 2 7 1 docker pull joxit doc
  • pytorch one-hot编码

    使用scatter 将标签转换为one hot span class token keyword import span torch num class span class token operator 61 span span clas
  • python安装meshplot

    用conda或者pip直接安装如果出问题 xff0c 可以考虑使用以下方法 xff0c 从代码仓库中安装 下载代码库 span class token function git span clone https github com sko

随机推荐

  • python matplotlib quiver

    matplotlib中的 quiver方法可用于绘制箭头 xff08 向量 xff09 xff0c 下面介绍二维和三维中的使用方法 二维箭头向量绘制 一般参数如下 quiver span class token punctuation sp
  • 【链表】剑指offer 22. 链表中倒数最后k个结点

    题目 输入一个长度为 n 的链表 xff0c 设链表中的元素的值为 ai xff0c 输出一个链表 xff0c 该输出链表包含原链表中从倒数第 k 个结点至尾节点的全部节点 如果该链表长度小于k xff0c 请返回一个长度为 0 的链表 数
  • 【二叉树】剑指offer 54 二叉搜索树的第k个结点

    描述 给定一棵结点数为 n 二叉搜索树 xff0c 请找出其中的第 k 小的TreeNode结点 数据范围 xff1a 0 n lt 61 100
  • 【二叉树】剑指offer 77 按之字形顺序打印二叉树

    描述 给定一个二叉树 xff0c 返回该二叉树的之字形层序遍历 xff0c xff08 第一层从左向右 xff0c 下一层从右向左 xff0c 一直这样交替 xff09 输出 1 3 2 4 5 栈解法 用两个栈来存奇数层和偶数层的节点 x
  • 【二叉树】剑指offer 8 二叉树的下一个结点

    描述 给定一个二叉树其中的一个结点 xff0c 请找出中序遍历顺序的下一个结点并且返回 注意 xff0c 树中的结点不仅包含左右子结点 xff0c 同时包含指向父结点的next指针 下图为一棵有9个节点的二叉树 树中从父节点指向子节点的指针
  • 【二叉树】剑指offer 78 把二叉树打印成多行

    描述 给定一个节点数为 n 二叉树 xff0c 要求从上到下按层打印二叉树的 val 值 xff0c 同一层结点从左至右输出 xff0c 每一层输出一行 xff0c 将输出的结果存放到一个二维数组中返回 例如 xff1a 给定的二叉树是 1
  • python判断数组中是否有nan

    span class token keyword import span numpy numpy span class token punctuation span isnan span class token punctuation sp
  • ssh 免密配置

    在本机A上生成RSA密钥 ssh keygen cd ssh xff0c 看到如下文件 xff0c id rsa pub就是rsa加密算法的公钥 将本机的公钥发给对方服务器B xff0c 需要B的密码 xff0c 表示B同意被免密访问 xf
  • Docker Compose

    1 简介 Docker Compose 项目是 Docker 官方的开源项目 xff0c 负责实现对Docker容器集群的快速编排 Docker Compose将所管理的容器分为三层 xff1a 工程 xff08 project xff09
  • 【剑指offer】数组中重复的数字

    解法1 重排序法 抓住题目中的特点 xff0c 由于数组的所有数字都在0 n 1范围内 xff0c 所以数据的范围和下标的范围是一样的 线性扫描数组 xff0c 将扫描到的数放到它对应的下标位置上 若对应位置上已经有这个数则可以判断这是一个
  • 【剑指offer】删除链表的节点

    遍历链表 xff0c 判断当前节点是否为给定删除值 xff0c 是则将其删除 xff08 让该节点的父节点指向其子节点 xff09 实现时可以在链表头部加一个临时节点 xff0c 方便处理待删节点在第一个的情况 span class tok
  • 【剑指offer】栈的压入、弹出序列

    解题思路 由于出栈序列会存在很多种可能 xff0c 例如入栈顺序为1 2 3 4 5 xff0c 可能的出栈序列为1 2 3 4 5 4 5 3 2 1等等 xff0c 不可能将所有序列进行穷举 xff0c 因此需要按照入栈序列和出栈序列进
  • 【剑指offer】数字序列中某一位的数字

    解法一 如下图所示 xff0c 将字符序列按照位数分为多个区域 xff0c 蓝色区域共有10个数 xff0c 每个数一位 xff0c 占10位 xff0c 橙色区域共90个数 xff0c 每个数两位 xff0c 占180位 xff0c 以此
  • 【剑指offer】二叉搜索树的第k个节点

    利用二叉搜索树的特点 xff0c 左边节点的值 lt 中间节点的值 lt 右边节点的值 xff0c 对二叉树进行中序遍历即可 通过res保存值 xff0c count记录遍历了多少个 中序遍历是在中间输出节点 xff0c 所以count在中
  • Linux查看文件占用空间、磁盘剩余、设备挂载情况

    查看文件占用空间 命令为du sh file xff0c 表示disk usage xff0c sh为可选参数 xff0c s表示short xff0c h表示human xff0c 即输出简短的信息 xff0c 适合人类查看 xff0c
  • Linux磁盘分区挂载

    输入lsblk命令查看当前各磁盘分区情况 xff0c 可以看到 xff0c sdb硬盘有1 2 5三个分区 xff0c sdb5挂载在根目录 下 xff08 即根目录的文件都存在sdb5分区 xff09 sda硬盘没有分区也没有挂载到任何目
  • win10 latex - Texlive+Texstudio安装

    安装Texlive环境 通过清华大学开源软件镜像站进行下 xff0c https mirrors tuna tsinghua edu cn ctan systems texlive Images 打开镜像 xff0c 双击bat文件 xff
  • 二叉搜索树的后序遍历序列

    由于输入的是后序遍历序列 xff0c 首先我们可以确定序列的最后一个位置为根节点 由于二叉搜索树的左子树比根节点小 xff0c 根节点比右子树小 xff0c 因此我们需要判断根节点的左右子树是否满足该条件 xff0c 关键是找到其左子树和右
  • 【剑指offer】二叉树中和为某一值的路径(一)

    直接对二叉树进行前序遍历 xff0c 每次累加当前节点的值 xff0c 如果到达叶子节点 xff0c 判断当前累加和是否等于给定值 xff0c 是则返回true xff0c 否则继续遍历二叉树 xff0c 若找不到则返回false span
  • Docker 容器互联

    1 基于 Volume 互联 1 1 存储 Driver Aufs Docker最早支持的driver xff0c 但它只是Linux内核的一个补丁集 Device Mapper xff1a Linux2 6 内核提供的一种从逻辑设备到物理