bocker中创建容器涉及的技术

本文介绍如何使用循环设备创建文件系统,并利用Btrfs进行子卷快照及资源隔离,展示了从创建循环设备到容器运行的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环设备 /dev/loopx
/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。

fallocate  -l 10G  ~/test.img
mkfs.btrfs ~/test.img
mount -o loop ~/test.img  /mnt/test

df结果

[root@localhost /]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00   37G   24G   12G  66% /
devtmpfs                         900M     0  900M   0% /dev
tmpfs                            911M     0  911M   0% /dev/shm
tmpfs                            911M   17M  894M   2% /run
tmpfs                            911M     0  911M   0% /sys/fs/cgroup
/dev/sda2                        477M  119M  329M  27% /boot
tmpfs                            183M     0  183M   0% /run/user/0
/dev/loop0                        10G   17M  8.0G   1% /test
/dev/loop1                        10G  1.1G  7.1G  14% /var/bocker
[root@localhost /]# 

btrfs

[root@localhost dev]# sh -x /usr/bin/bocker run img_42133  l
+ set -o errexit -o nounset -o pipefail
+ shopt -s nullglob
+ btrfs_path=/var/bocker
+ cgroups=cpu,cpuacct,memory
+ [[ 3 -gt 0 ]]
+ '[' ru == -- ']'
+ [[ -z run ]]
+ case $1 in
+ bocker_run img_42133 l
++ shuf -i 42002-42254 -n 1
+ uuid=ps_42156
++ bocker_check img_42133
++ grep -qw img_42133
++ btrfs subvolume list /var/bocker
++ echo 0
+ [[ 0 == 1 ]]
++ bocker_check ps_42156
++ grep -qw ps_42156
++ btrfs subvolume list /var/bocker
++ echo 1
+ [[ 1 == 0 ]]
+ cmd=l
++ echo 156
++ sed s/0//g
+ ip=156
+ mac=1:56
+ ip link add dev veth0_ps_42156 type veth peer name veth1_ps_42156
+ ip link set dev veth0_ps_42156 up
+ ip link set veth0_ps_42156 master bridge0
+ ip netns add netns_ps_42156
+ ip link set veth1_ps_42156 netns netns_ps_42156
+ ip netns exec netns_ps_42156 ip link set dev lo up
+ ip netns exec netns_ps_42156 ip link set veth1_ps_42156 address 02:42:ac:11:001:56
+ ip netns exec netns_ps_42156 ip addr add 10.0.0.156/24 dev veth1_ps_42156
+ ip netns exec netns_ps_42156 ip link set dev veth1_ps_42156 up
+ ip netns exec netns_ps_42156 ip route add default via 10.0.0.1
+ btrfs subvolume snapshot /var/bocker/img_42133 /var/bocker/ps_42156
+ echo 'nameserver 8.8.8.8'
+ echo l
+ cgcreate -g cpu,cpuacct,memory:/ps_42156
+ : 512
+ cgset -r cpu.shares=512 ps_42156
+ : 512
+ cgset -r memory.limit_in_bytes=512000000 ps_42156
+ tee /var/bocker/ps_42156/ps_42156.log
+ cgexec -g cpu,cpuacct,memory:ps_42156 ip netns exec netns_ps_42156 unshare -fmuip --mount-proc chroot /var/bocker/ps_42156 /bin/sh -c '/bin/mount -t proc proc /proc && l'
/bin/sh: l: command not found
+ true
+ ip link del dev veth0_ps_42156
+ ip netns del netns_ps_42156
### 在 Docker 中安装和配置 Elasticsearch 的方法 要在 Docker 环境中成功安装和配置 Elasticsearch,可以按照以下方式操作: #### 单节点模式下的安装与配置 对于单节点环境,可以直接通过官方镜像快速启动容器。以下是具体的命令及其说明: ```bash docker run -d \ --name es \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v es-data:/usr/local/elasticsearch7.12.1/data \ -v es-plugins:/usr/local/elasticsearch7.12.1/plugins \ -v es-logs:/usr/local/elasticsearch7.12.1/logs \ --privileged \ --network es-net \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.12.1 ``` 此命令设置了 JVM 堆内存大小为 `512MB` 并启用了单节点发现机制[^1]。 #### 集群模式下的安装与配置 如果需要搭建一个多节点的 Elasticsearch 集群,则可以通过多个容器实例实现。以下是三个节点的具体配置示例: ##### 创建第一个节点 (`es1`) ```bash docker run -d \ --name es1 \ -p 9200:9200 \ -p 9300:9300 \ -e ES_JAVA_OPTS="-Xms128m -Xmx128m" \ -v /home/es/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ c9c606d302fb ``` ##### 创建第二个节点 (`es2`) ```bash docker run -d \ --name es2 \ -p 9201:9201 \ -p 9301:9301 \ -e ES_JAVA_OPTS="-Xms128m -Xmx128m" \ -v /home/es/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ c9c606d302fb ``` ##### 创建第三个节点 (`es3`) ```bash docker run -d \ --name es3 \ -p 9202:9202 \ -p 9302:9302 \ -e ES_JAVA_OPTS="-Xms128m -Xmx128m" \ -v /home/es/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ c9c606d302fb ``` 以上命令分别定义了三个不同的节点,并指定了各自的配置文件路径[^2]。 #### 自定义配置文件设置 为了更好地控制 Elasticsearch 行为,通常会自定义其配置文件 `elasticsearch.yml`。下面是一个典型的配置文件示例: ```yaml cluster.name: my-cluster-name node.name: node-1 path.data: /usr/share/elasticsearch/data path.logs: /usr/share/elasticsearch/logs network.host: 0.0.0.0 http.port: 9200 discovery.seed_hosts: ["host1", "host2"] cluster.initial_master_nodes: ["node-1", "node-2"] ``` 该配置文件明确了集群名称、节点名称以及数据存储位置等内容[^3]。 #### 启动脚本简化管理流程 为了方便管理和维护,在实际生产环境中推荐使用 Shell 脚本来封装复杂的启动逻辑。例如: ```bash #!/bin/bash docker run --name es-7.17.0 \ --restart=always \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms84m -Xmx256m" \ -v /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /usr/local/docker/es/data:/usr/share/elasticsearch/data \ -v /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.17.0 ``` 这个脚本不仅减少了重复输入的工作量,还增强了系统的可移植性和一致性[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值