GVKun编程网logo

Linux Cgroup系列(02):创建并管理cgroup(linux如何创建管理用户)

3

关于LinuxCgroup系列和02:创建并管理cgroup的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于arch-linux–ArchLinux64bitAndroidADB?、arc

关于Linux Cgroup系列02:创建并管理cgroup的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于arch-linux – Arch Linux 64bit Android ADB?、arch-linux – 在Android设备上启动原生Arch Linux、Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报、Docker 在 Linux 上运行 NetCore 系列(三)在 Linux 上使用 Docker 运行 Asp.NetCore等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

Linux Cgroup系列(02):创建并管理cgroup(linux如何创建管理用户)

Linux Cgroup系列(02):创建并管理cgroup(linux如何创建管理用户)

本文将创建并挂载一颗不和任何subsystem绑定的cgroup树,用来演示怎么创建、删除子cgroup,以及如何往cgroup中添加和删除进程。

由于不和任何subsystem绑定,所以这棵树没有任何实际的功能,但这不影响我们的演示,还有一个好处就是我们不会受subsystem功能的影响,可以将精力集中在cgroup树上。

本篇所有例子都在ubuntu-server-x86_64 16.04下执行通过

挂载cgroup树

开始使用cgroup前需要先挂载cgroup树,下面先看看如何挂载一颗cgroup树,然后再查看其根目录下生成的文件

#准备需要的目录
dev@ubuntu:~$ mkdir cgroup && cd cgroup
dev@ubuntu:~/cgroup$ mkdir demo

#由于name=demo的cgroup树不存在,所以系统会创建一颗新的cgroup树,然后挂载到demo目录
dev@ubuntu:~/cgroup$ sudo mount -t cgroup -o none,name=demo demo ./demo

#挂载点所在目录就是这颗cgroup树的root cgroup,在root cgroup下面,系统生成了一些默认文件
dev@ubuntu:~/cgroup$ ls ./demo/
cgroup.clone_children  cgroup.procs  cgroup.sane_behavior  notify_on_release  release_agent  tasks

#cgroup.procs里包含系统中的所有进程
dev@ubuntu:~/cgroup$ wc -l ./demo/cgroup.procs
131 ./demo/cgroup.procs

下面是每个文件的含义:

  • cgroup.clone_children
    这个文件只对cpuset(subsystem)有影响,当该文件的内容为1时,新创建的cgroup将会继承父cgroup的配置,即从父cgroup里面拷贝配置文件来初始化新cgroup,可以参考这里

  • cgroup.procs
    当前cgroup中的所有进程ID,系统不保证ID是顺序排列的,且ID有可能重复

  • cgroup.sane_behavior
    具体功能不详,可以参考这里和这里

  • notify_on_release
    该文件的内容为1时,当cgroup退出时(不再包含任何进程和子cgroup),将调用release_agent里面配置的命令。新cgroup被创建时将默认继承父cgroup的这项配置。

  • release_agent
    里面包含了cgroup退出时将会执行的命令,系统调用该命令时会将相应cgroup的相对路径当作参数传进去。 注意:这个文件只会存在于root cgroup下面,其他cgroup里面不会有这个文件。

  • tasks
    当前cgroup中的所有线程ID,系统不保证ID是顺序排列的

后面在介绍如何往cgroup中添加进程时会介绍cgroup.procs和tasks的差别。

创建和删除cgroup

挂载好上面的cgroup树之后,就可以在里面建子cgroup了

#创建子cgroup很简单,新建一个目录就可以了
dev@ubuntu:~/cgroup$ cd demo
dev@ubuntu:~/cgroup/demo$ sudo mkdir cgroup1

#在新创建的cgroup里面,系统默认也生成了一些文件,这些文件的意义和root cgroup里面的一样
dev@ubuntu:~/cgroup/demo$ ls cgroup1/
cgroup.clone_children  cgroup.procs  notify_on_release  tasks

#新创建的cgroup里没有任何进程和线程
dev@ubuntu:~/cgroup/demo$ wc -l cgroup1/cgroup.procs
0 cgroup1/cgroup.procs
dev@ubuntu:~/cgroup/demo$ wc -l cgroup1/tasks
0 cgroup1/tasks

#每个cgroup都可以创建自己的子cgroup,所以我们也可以在cgroup1里面创建子cgroup
dev@ubuntu:~/cgroup/demo$ sudo mkdir cgroup1/cgroup11
dev@ubuntu:~/cgroup/demo$ ls cgroup1/cgroup11
cgroup.clone_children  cgroup.procs  notify_on_release  tasks

#删除cgroup也很简单,删除掉相应的目录就可以了
dev@ubuntu:~/cgroup/demo$ sudo rmdir cgroup1/
rmdir: failed to remove ''cgroup1/'': Device or resource busy
#这里删除cgroup1失败,是因为它里面包含了子cgroup,所以不能删除,
#如果cgroup1包含有进程或者线程,也会删除失败

#先删除cgroup11,再删除cgroup1就可以了
dev@ubuntu:~/cgroup/demo$ sudo rmdir cgroup1/cgroup11/
dev@ubuntu:~/cgroup/demo$ sudo rmdir cgroup1/

添加进程

创建新的cgroup后,就可以往里面添加进程了。注意下面几点:

  • 在一颗cgroup树里面,一个进程必须要属于一个cgroup。

  • 新创建的子进程将会自动加入父进程所在的cgroup。

  • 从一个cgroup移动一个进程到另一个cgroup时,只要有目的cgroup的写入权限就可以了,系统不会检查源cgroup里的权限。

  • 用户只能操作属于自己的进程,不能操作其他用户的进程,root账号除外。

#--------------------------第一个shell窗口----------------------
#创建一个新的cgroup
dev@ubuntu:~/cgroup/demo$ sudo mkdir test
dev@ubuntu:~/cgroup/demo$ cd test

#将当前bash加入到上面新创建的cgroup中
dev@ubuntu:~/cgroup/demo/test$ echo $$
1421
dev@ubuntu:~/cgroup/demo/test$ sudo sh -c ''echo 1421 > cgroup.procs''
#注意:一次只能往这个文件中写一个进程ID,如果需要写多个的话,需要多次调用这个命令

#--------------------------第二个shell窗口----------------------
#重新打开一个shell窗口,避免第一个shell里面运行的命令影响输出结果
#这时可以看到cgroup.procs里面包含了上面的第一个shell进程
dev@ubuntu:~/cgroup/demo/test$ cat cgroup.procs
1421

#--------------------------第一个shell窗口----------------------
#回到第一个窗口,运行top命令
dev@ubuntu:~/cgroup/demo/test$ top
#这里省略输出内容

#--------------------------第二个shell窗口----------------------
#这时再在第二个窗口查看,发现top进程自动和它的父进程(1421)属于同一个cgroup
dev@ubuntu:~/cgroup/demo/test$ cat cgroup.procs
1421
16515
dev@ubuntu:~/cgroup/demo/test$ ps -ef|grep top
dev      16515  1421  0 04:02 pts/0    00:00:00 top
dev@ubuntu:~/cgroup/demo/test$

#在一颗cgroup树里面,一个进程必须要属于一个cgroup,
#所以我们不能凭空从一个cgroup里面删除一个进程,只能将一个进程从一个cgroup移到另一个cgroup,
#这里我们将1421移动到root cgroup
dev@ubuntu:~/cgroup/demo/test$ sudo sh -c ''echo 1421 > ../cgroup.procs''
dev@ubuntu:~/cgroup/demo/test$ cat cgroup.procs
16515
#移动1421到另一个cgroup之后,它的子进程不会随着移动

#--------------------------第一个shell窗口----------------------
##回到第一个shell窗口,进行清理工作
#先用ctrl+c退出top命令
dev@ubuntu:~/cgroup/demo/test$ cd ..
#然后删除创建的cgroup
dev@ubuntu:~/cgroup/demo$ sudo rmdir test

权限

上面我们都是用sudo(root账号)来操作的,但实际上普通账号也可以操作cgroup

#创建一个新的cgroup,并修改他的owner
dev@ubuntu:~/cgroup/demo$ sudo mkdir permission
dev@ubuntu:~/cgroup/demo$ sudo chown -R dev:dev ./permission/

#1421原来属于root cgroup,虽然dev没有root cgroup的权限,但还是可以将1421移动到新的cgroup下,
#说明在移动进程的时候,系统不会检查源cgroup里的权限。
dev@ubuntu:~/cgroup/demo$ echo 1421 > ./permission/cgroup.procs

#由于dev没有root cgroup的权限,再把1421移回root cgroup失败
dev@ubuntu:~/cgroup/demo$ echo 1421 > ./cgroup.procs
-bash: ./cgroup.procs: Permission denied

#找一个root账号的进程
dev@ubuntu:~/cgroup/demo$ ps -ef|grep /lib/systemd/systemd-logind
root       839     1  0 01:52 ?        00:00:00 /lib/systemd/systemd-logind
#因为该进程属于root,dev没有操作它的权限,所以将该进程加入到permission中失败
dev@ubuntu:~/cgroup/demo$ echo 839 >./permission/cgroup.procs
-bash: echo: write error: Permission denied
#只能由root账号添加
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo 839 >./permission/cgroup.procs''

#dev还可以在permission下创建子cgroup
dev@ubuntu:~/cgroup/demo$ mkdir permission/c1
dev@ubuntu:~/cgroup/demo$ ls permission/c1
cgroup.clone_children  cgroup.procs  notify_on_release  tasks

#清理
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo 839 >./cgroup.procs''
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo 1421 >./cgroup.procs''
dev@ubuntu:~/cgroup/demo$ rmdir permission/c1
dev@ubuntu:~/cgroup/demo$ sudo rmdir permission

cgroup.procs vs tasks

上面提到cgroup.procs包含的是进程ID, 而tasks里面包含的是线程ID,那么他们有什么区别呢?

#创建两个新的cgroup用于演示
dev@ubuntu:~/cgroup/demo$ sudo mkdir c1 c2

#为了便于操作,先给root账号设置一个密码,然后切换到root账号
dev@ubuntu:~/cgroup/demo$ sudo passwd root
dev@ubuntu:~/cgroup/demo$ su root
root@ubuntu:/home/dev/cgroup/demo#

#系统中找一个有多个线程的进程
root@ubuntu:/home/dev/cgroup/demo# ps -efL|grep /lib/systemd/systemd-timesyncd
systemd+   610     1   610  0    2 01:52 ?        00:00:00 /lib/systemd/systemd-timesyncd
systemd+   610     1   616  0    2 01:52 ?        00:00:00 /lib/systemd/systemd-timesyncd
#进程610有两个线程,分别是610和616

#将616加入c1/cgroup.procs
root@ubuntu:/home/dev/cgroup/demo# echo 616 > c1/cgroup.procs
#由于cgroup.procs存放的是进程ID,所以这里看到的是616所属的进程ID(610)
root@ubuntu:/home/dev/cgroup/demo# cat c1/cgroup.procs
610
#从tasks中的内容可以看出,虽然只往cgroup.procs中加了线程616,
#但系统已经将这个线程所属的进程的所有线程都加入到了tasks中,
#说明现在整个进程的所有线程已经处于c1中了
root@ubuntu:/home/dev/cgroup/demo# cat c1/tasks
610
616

#将616加入c2/tasks中
root@ubuntu:/home/dev/cgroup/demo# echo 616 > c2/tasks

#这时我们看到虽然在c1/cgroup.procs和c2/cgroup.procs里面都有610,
#但c1/tasks和c2/tasks中包含了不同的线程,说明这个进程的两个线程分别属于不同的cgroup
root@ubuntu:/home/dev/cgroup/demo# cat c1/cgroup.procs
610
root@ubuntu:/home/dev/cgroup/demo# cat c1/tasks
610
root@ubuntu:/home/dev/cgroup/demo# cat c2/cgroup.procs
610
root@ubuntu:/home/dev/cgroup/demo# cat c2/tasks
616
#通过tasks,我们可以实现线程级别的管理,但通常情况下不会这么用,
#并且在cgroup V2以后,将不再支持该功能,只能以进程为单位来配置cgroup

#清理
root@ubuntu:/home/dev/cgroup/demo# echo 610 > ./cgroup.procs
root@ubuntu:/home/dev/cgroup/demo# rmdir c1
root@ubuntu:/home/dev/cgroup/demo# rmdir c2
root@ubuntu:/home/dev/cgroup/demo# exit
exit

release_agent

当一个cgroup里没有进程也没有子cgroup时,release_agent将被调用来执行cgroup的清理工作。

#创建新的cgroup用于演示
dev@ubuntu:~/cgroup/demo$ sudo mkdir test
#先enable release_agent
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo 1 > ./test/notify_on_release''

#然后创建一个脚本/home/dev/cgroup/release_demo.sh,
#一般情况下都会利用这个脚本执行一些cgroup的清理工作,但我们这里为了演示简单,仅仅只写了一条日志到指定文件
dev@ubuntu:~/cgroup/demo$ cat > /home/dev/cgroup/release_demo.sh << EOF
#!/bin/bash
echo \$0:\$1 >> /home/dev/release_demo.log
EOF

#添加可执行权限
dev@ubuntu:~/cgroup/demo$ chmod +x ../release_demo.sh

#将该脚本设置进文件release_agent
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo /home/dev/cgroup/release_demo.sh > ./release_agent''
dev@ubuntu:~/cgroup/demo$ cat release_agent
/home/dev/cgroup/release_demo.sh

#往test里面添加一个进程,然后再移除,这样就会触发release_demo.sh
dev@ubuntu:~/cgroup/demo$ echo $$
27597
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo 27597 > ./test/cgroup.procs''
dev@ubuntu:~/cgroup/demo$ sudo sh -c ''echo 27597 > ./cgroup.procs''

#从日志可以看出,release_agent被触发了,/test是cgroup的相对路径
dev@ubuntu:~/cgroup/demo$ cat /home/dev/release_demo.log
/home/dev/cgroup/release_demo.sh:/test

结束语

本文介绍了如何操作cgroup,由于没有和任何subsystem关联,所以在这颗树上的所有操作都没有实际的功能,不会对系统有影响。从下一篇开始,将介绍具体的subsystem。

参考

  • CGROUPS v1

arch-linux – Arch Linux 64bit Android ADB?

arch-linux – Arch Linux 64bit Android ADB?

我试图在Arch Linux 64bit上使用Android SDK,但是当我尝试从正确的目录运行ADB时,它说文件不存在,但它就在那里.在你遇到这个问题的Ubuntu上安装ia32-lib但是在Arch Linux中没有.有什么我必须做的.

解决方法:

“无此类文件或目录”消息实际上是指32位可执行文件的加载程序,这是执行32位可执行文件所必需的.有关更详细的说明,请参阅Getting “Not found” message when running a 32-bit binary on a 64-bit system.您需要在Arch Linux上安装32位支持.

遗憾的是,Arch Linux没有一种简单的方法来安装32位支持.目前,您需要通过将这些行添加到pacman.conf来启用[multilib]存储库:

[multilib]
Include = /etc/pacman.d/mirrorlist

有关详细信息,请参阅Wiki上的Arch64 FAQ和Using 32-bit-applications on Arch64.

arch-linux – 在Android设备上启动原生Arch Linux

arch-linux – 在Android设备上启动原生Arch Linux

我有一个galaxy Note 10.1(n8010),我想让它本地启动Arch Linux.我的意思是启动Arch Linux而不是android.我需要的只是改变initramfs,这是我在世界上任何地方都找不到的.我的问题:

>我是否只需要更改initramfs,或者我还需要处理其他事情? (比如内核本身)
> [DONE]我在哪里获得CyanogenMod 10.1的官方initramfs(也许是github)?或者我必须自编译CyanogenMod的内核并从zImage中提取它?
> [可能]我可以在Android数据分区中安装Arch linux root吗? (例如/ data / linux)或者我必须购买SD卡?
>我还需要知道/做什么?

编辑:我发现如何更改initramfs

Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报

Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报

开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习、修改,甚至是重新分发。关注「开源日报」,一文速览国内外开源大事件吧!

一分钟速览新闻点!

  • SUSE 为怀念旧 CentOS 的开发者们发布新发行版——Liberty Linux
  • Bootstrap 创始人 Mark otto 谈及自己生病
  • 欧盟委员会开源计划办公室启动漏洞赏金
  • Google 在 Windows 上发布 beta 版本的 Google Play Games app
  • Linux 5.17 使用新的调试功能,便于开发者更能轻松构建内核
  • 基于 Chromium 项目的微软 Edge 浏览器大变更
  • JetBrains 提供面向开发人员的免费开源字体 Mono

开源大新闻

SUSE 为怀念旧 CentOS 的开发者们发布新发行版——Liberty Linux

自从 2020 年红帽宣布终止 CentOS Linux 的支持,并用 CentOS Stream 取而代之后,RHEL 的替代品便相继涌现。知名 Linux 发行套件供应商 SUSE 带来了全新的 SUSE Liberty Linux 产品。据官方介绍,借助 SUSE Liberty Linux,用户可以通过经过验证的可选管理工具获得值得信赖的支持,这些工具针对混合 Linux 环境进行了优化,包括 Red Hat Enterprise Linux 、CentOS 以及用户所期望的 openSUSE 和 SUSE Linux Enterprise Server。而在一定程度上来看,Liberty Linux 等同于当前的 Red Hat 版本——RHEL 8.5 ,并且与来自 Red Hat 自己的 EPEL 存储库的软件包兼容。

Bootstrap 创始人 Mark otto 谈及自己生病

1 月 20 日,Bootstrap 创始人 Mark otto 发文表示,“2021 年 12 月 5 日,我的心脏病发作,在医院住了两个星期。第一周,我在重症监护室里处于医学上的昏迷状态,以冷冻的方式保存我身心。没有人知道当我醒来时,我是否还是我。”

幸运的是,一周之后,Mark otto 苏醒过来,分享道“好消息是我的心脏有一个新支架,而且我恢复得很好。我一直在慢慢地重新使用 Bootstrap 以确保我仍然可以设计和编码(我可以!),现在我会在网上逗留一段时间后下班休息。”同时,他也希望通过此事能够让更多的人关注自己的健康,“多和你的医生交谈、做更多的检查、了解遗传病史、锻炼身体,尽可能地保持安全和健康。虽然这有些陈词滥调,但它可以很好地挽救你的生命。”

Bootstrap是一个基于 HTML、CSS、JavaScript 的简洁灵活的网站前端框架及组件包,它也是 GitHub 上面 star 次数排名第十二的项目。Star 次数超过 155,000。

在这里插入图片描述

欧盟委员会开源计划办公室启动漏洞赏金

欧盟委员会开源计划办公室(EC OSPO)的一组新的漏洞赏金于 1 月 13 日启动,使用 Intigriti 漏洞赏金平台。其中,欧盟委员会开源计划办公室(EC OSPO)总共资助了200,000 欧元,用于再次关注公共服务广泛使用的开源软件的安全性。如在 LibreOffice、LEOS、Mastodon、odoo 和 CryptPad(欧盟公共服务部门使用的开源解决方案)中发现安全漏洞的奖励最高可达 5000 欧元。为他们发现的错误提供代码修复有 20% 的奖金。

Google 在 Windows 上发布 beta 版本的 Google Play Games app

Google 上个月透露要将 Android 游戏带到所有 Windows 平台。现在它正式释出了 beta 版本的 Google Play Games app,目前只对部分地区开放测试。Google 称,Google Play Games app 允许用户在 Windows 台式机或笔记本电脑上浏览、下载和玩部分手游,支持使用键盘和鼠标、在设备之间无缝同步以及与 Google Play Points 集成。该应用暂不支持 Mac。系统要求 Windows 10(v2004),8GB 内存,固态硬盘,20 GB 储存空间,8 核处理器,游戏类显卡(目前市场上的中低端显卡都支持),启用硬件虚拟化。

开源软件专区

Linux 5.17 使用新的调试功能,便于开发者更能轻松构建内核

多年来,Linux 内核支持多种 sanitizers、内存泄漏检测器等功能,这些功能主要用于帮助诊断和解决内核中的缺陷。然而,所有这些调试优化的功能并没有集中在一起,这使系统管理员和开发者在手动配置内核构建时,难以发现这些众多的功能。现在,随着 Linux 5.17 的推出,这种情况正在改变。

Linux 5.17 所做的是引入 debug.config 作为默认的内核构建配置,为调试进行优化。debug.config 将默认启用各种功能,如内核地址消毒器、未定义行为消毒器、KMemLeak,以及许多其他随着时间推移而增加的内核功能,旨在帮助调试或追踪内核问题。因此,只要一个命令,就可以得到官方推荐的内核配置,并启用许多不同的调试功能。

基于 Chromium 项目的微软 Edge 浏览器大变更

近日,微软宣布,从 Edge 96 版本开始,Web 应用将能够在浏览器中使用协议处理程序。最新功能将允许已安装的 Web 应用程序(或 PWA)导航预设或自定义协议。已安装的 Web 应用程序也将能够向操作系统注册为协议处理程序,并在调用特定协议后启动。换句话说,用户可以将网页设置为默认处理程序,比如用户想创建电子邮件,系统将默认打开浏览器中的某个网站。

此外,开发者可以通过注册以 web+ 为前缀的协议来生成 Web 应用程序自定义方案。协议处理程序可用于 Web 应用通信,其中一个应用直接调用另一个应用并通过自定义协议链接传递数据。(小编)

开源工具推荐

JetBrains 提供面向开发人员的免费开源字体 Mono

JetBrains 于近日开源 Mono 字体,其可以作为独立下载提供,并且还被捆绑在所有JetBrains IDE 中。JetBrains Mono 的默认版本带有 OpenType 功能和连字(始终可以在设置中打开和关闭)。如果有开发者的 IDE 不支持 OpenType,也可以使用该字体的特殊版本 — JetBrains Mono NL,其中不包含任何连字。

在这里插入图片描述


《新程序员003》正式上市,50 余位技术专家共同创作,云原生和数字化的开发者们的一本技术精选图书。内容既有发展趋势及方法论结构,华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等 30 多家知名公司云原生和数字化一手实战经验!

订阅地址:https://mall.csdn.net/item/92470?utm_source=csdn_news_group

在这里插入图片描述

总结

以上是小编为你收集整理的Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

原文地址:https://blog.csdn.net/csdnopensource/article/details/122615511

Docker 在 Linux 上运行 NetCore 系列(三)在 Linux 上使用 Docker 运行 Asp.NetCore

Docker 在 Linux 上运行 NetCore 系列(三)在 Linux 上使用 Docker 运行 Asp.NetCore

转发请注明此文章作者与路径,请尊重原著,违者必究。

 

系列文章:https://www.cnblogs.com/alunchen/p/10121379.html

 

开始说明

      上几篇文章都是通过 Linux 运行控制台程序,现在我们运行一个 NetCore Web 程序,并且使用我们一般的项目流程来做。从 git 下载代码到 linux 编译运行。

      流程:新建项目 -> 创建 Dockerfile->Git clone 代码 ->docker 编译代码,成为镜像 -> 运行程序 -> 内网访问网站。

 

新建项目并开始构建镜像

      新建项目步骤略过,这里使用的是 VS2017 版本,选择 Docker 时,注意使用 Linux 环境。并且要修改 Dockfile 文件里面的路径,否则运行时会报错。新建项目可查看系列(一)的文章。

      修改路径如下:

clipboard

 

      上传代码到 Git 也略过......

 

      现在开始登录 linux,并且使用 git clone 把代码克隆下来。

      使用命令【git clone http://git 用户名:git 密码 @IP 地址:端口号 /xxx/TestDockerLinuxWebApplication1.git

clipboard

 

      进入到 Dockerfile 的目录,使用命令【ls】看到应用程序的代码:

clipboard

 

      使用命令编译程序并创建镜像【sudo docker build -t testdockerlinuxwebapplication1:1.0.0 .

      会出现一大堆运行步骤命令,最终运行成功。

      使用【sudo docker images】命令查看,以及

clipboard

 

创建容器并运行

      在运行应用程序【sudo docker run --name testdockerlinuxwebapplication1 -p 8081:80 testdockerlinuxwebapplication1:1.0.0

clipboard

 

     -p 是 8081 是容器对外端口,80 是容器内机器端口。意思是映射外网 8081 端口到本地容器 80 端口。

 

      运行成功:

clipboard

 

      在上面,我们看到命令停止在那里了,不是后台在运行。这里我们使用【Control+C】来停止容器。

      停止之后网站就不能访问了,我们可以查看所有状态的容器:【sudo docker ps -a

clipboard

 

      发现容器已经是停止状态,我们再运行容器。【sudo docker start testdockerlinuxwebapplication1】

clipboard

 

      在访问网站,能访问了。

 

 

 

系列文章

Docker 在 Linux/Windows 上运行 NetCore 文章系列

 

可以关注本人的公众号,多年经验的原创文章共享给大家。

914305-20181015182707033-510683802

今天关于Linux Cgroup系列02:创建并管理cgroup的讲解已经结束,谢谢您的阅读,如果想了解更多关于arch-linux – Arch Linux 64bit Android ADB?、arch-linux – 在Android设备上启动原生Arch Linux、Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报、Docker 在 Linux 上运行 NetCore 系列(三)在 Linux 上使用 Docker 运行 Asp.NetCore的相关知识,请在本站搜索。

本文标签: