当前位置: 首页 > news >正文

网站qq联系怎么做百度浏览器网页版入口

网站qq联系怎么做,百度浏览器网页版入口,合肥网站建设晨飞,东莞手机手机端网站建设〇、前言 早上在逛知乎的时候,瞥见了一篇答案:如何通俗解释Docker是什么?感觉很不错,然后就耐着性子看了下,并重现了作者的整个过程。但是并不顺利,记载一下这些坑。嫌麻烦的话可以直接clone 研究&#xf…

〇、前言

早上在逛知乎的时候,瞥见了一篇答案:如何通俗解释Docker是什么?感觉很不错,然后就耐着性子看了下,并重现了作者的整个过程。但是并不顺利,记载一下这些坑。嫌麻烦的话可以直接clone 研究,git仓库。

一、构建 ubuntu 文件系统

具体可以看这篇文章:Ubuntu Base构建根文件系统

主要步骤就是:

下载镜像

  • ubuntu-base-20.04.1-base-armhf.tar.gz

安装依赖

sudo apt-get install tar qemu-user-static vim -y

配置根文件系统

这是必要的,因为 execvp()执行的时候(作者给的例子),它会在这个文件系统中查找你要运行的命令。

mkdir ubuntu_rootfs && cd ubuntu_rootfs
tar -vxf ubuntu-base-20.04.1-base-armhf.tar.gz
sudo cp /usr/bin/qemu-arm-static ./usr/bin/
sudo cp ./etc/apt/sources.list ./etc/apt/sources.list.back
sudo echo "nameserver 8.8.8.8"  > ./etc/resolv.conf
sudo vim ./etc/apt/sources.list

更新源

如果你不需要在这个文件系统中做很多的事,就不需要。

添加应用

如果你不需要在这个文件系统中做很多的事,就不需要。

sudo chroot ./
apt install vim sudo kmod net-tools ethtool ifupdown language-pack-en-base rsyslog htop iputils-ping -y //添加一些需要的应用
passwd root //设置root的密码
exit

二、mocker

#include <cstring>
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>#include <fcntl.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/types.h>static void run(int argc, char *argv[]);
static std::string cmd(int argc, char *argv[]);
static void run_child(int argc, char *argv[]);int main(int argc, char *argv[]) {if (argc < 3) {std::cerr << "Too few arguments" << std::endl;exit(-1);}if (!strcmp(argv[1], "run")) {run(argc - 2, &argv[2]);}return 0;
}
static void run(int argc, char *argv[]) {// 合成命令std::cout << "parent running " << cmd(argc, argv) << " as " << getpid()<< std::endl;if (unshare(CLONE_NEWPID) < 0) {std::cerr << "failed to unshare in child: PID" << std::endl;exit(-1);}// 用子进程运行命令,同时父进程保持pid_t child_pid = fork();if (child_pid < 0) {std::cerr << "failed to fork" << std::endl;return;}if (child_pid){if (waitpid(child_pid, NULL, 0) < 0) {std::cerr << "failed to wait for child" << std::endl;} else {std::cout << "child terminited" << std::endl;}} else {run_child(argc, argv);}
}const char *child_hostname = "container";static void run_child(int argc, char *argv[]) {std::cout << "child running " << cmd(argc, argv) << " as " << getpid()<< std::endl;int flags = CLONE_NEWUTS | CLONE_NEWNS;if (unshare(flags) < 0) {std::cerr << "failed to share in child: UTS" << std::endl;exit(-1);}if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) < 0) {std::cerr << "failed to mount /" << std::endl;}// 修改 filesystem 的 view,在制定目录下if (chroot("./ubuntu_rootfs") < 0) {std::cerr << "failed to chroot" << std::endl;exit(-1);}if (chdir("/") < 0) {std::cerr << "failed to chdir to /" << std::endl;exit(-1);}// 挂载if (mount("proc", "proc", "proc", 0, NULL) < 0) {std::cerr << "failed to mount /proc" << std::endl;}// 修改 host nameif (sethostname(child_hostname, strlen(child_hostname)) < 0) {std::cerr << "failed to changge hostname" << std::endl;}if (execvp(argv[0], argv)) {perror("execvp failed");}
}static std::string cmd(int argc, char *argv[]) {std::string cmd = "";for (int i = 0; i < argc; i++) {cmd.append(argv[i] + std::string(" "));}return cmd;
}

总结:这段代码实现了一个简单的容器化环境的初始化过程,包括命名空间的隔离、文件系统的挂载与切换、进程环境的修改等操作,从而创建了一个隔离的运行环境。

http://www.shuangfujiaoyu.com/news/59012.html

相关文章:

  • 余姚什么网站做装修比较好网页制作网站制作
  • 网站新年特效深圳广告公司排名
  • <>搜狐三季度营收多少
  • 对网站设计的建议互联网推广是干什么的
  • 重庆网站建设及优化公关公司一般收费标准
  • 咸阳公司做网站写软文的平台有哪些
  • 深圳搭建p2p网站百度seo营销
  • 宝安网站建设 名匠百度投流运营
  • 网站建设财务规划成免费的crm
  • 南通做外贸的公司网站上海百度关键词优化公司
  • 做网站的目的教育培训网站设计
  • 互联网品牌是什么意思长春网站优化咨询
  • 网站开发连接数据库深圳网站seo服务
  • 金华网站建设哪个公司好点青岛网络推广公司排名
  • 文学网站开发设计报告seo网站优化教程
  • 个人相册网站模板建网站需要多少钱和什么条件
  • 网站建设制作收费巨量数据分析入口
  • 设计师个人网站怎么做学编程的正规学校
  • 怎么下载网站程序网页优化方案
  • 商城网站建设机构看网站时的关键词
  • 大型搜索网站开发长沙网站推广合作
  • 了解网站建设简述搜索引擎的工作原理
  • 高质量的合肥网站建设网络营销推广方案
  • 大型网站开发协调青岛谷歌优化
  • 如何进行网站营销宁波网站快速优化
  • wordpress前端页面不显示上海专业seo
  • 做网站有兼职吗保定网站建设报价
  • 网站引导页面制作的四个任务名称技术培训机构排名前十
  • 手上有一个好网站怎么做赚钱谷歌seo新规则
  • 什么叫网络服务商百度seo是啥