首页 > 其他分享 >Docker实验

Docker实验

时间:2023-06-10 20:24:07浏览次数:32  
标签:容器 centos sudo hello 实验 镜像 Docker docker

Docker实验

1)写出你创建镜像、运行容器的所有操作,要求可复现(即遵循这些操作步骤,可以达到与你相同的实验结果)

  sudo yum install docker-ce
  docker version
  sudo service docker start
  docker version
  sudo docker run hello-world
  sudo docker ps -a
  sudo usermod –aG docker master
  exit
  docker run hello-world
  sudo systemctl enable docker
  sudo systemctl start docker
  sudo reboot
  systemctl status docker
  docker search centos
  docker pull centos
  docker run centos echo "Hello World"
  docker run -it centos bash
  docker run -d --cpus 0.05 centos /bin/sh -c "while true; do echo $((12+12/3*4/23334*343232)) ;sleep 0.01;done;"

2)运行同一个镜像的多个容器,分析它们之间是否存在相互影响,如果有,怎么解决?你的机器上可以同时运行几个容器(同镜像)?怎么限制这些容器对宿主机资源(CPU、内存、磁盘等)的使用?

运行同一个镜像的多个容器,它们之间不会相互影响,因为每个容器都有自己的隔离环境。但是,如果容器共享同一个网络或数据卷,那么它们之间可能会有一些通信或数据交换。

使用 docker run -d centos /bin/sh -c "while true; do echo $((12+12/3*4/23334*343232)) ;sleep 0.01;done;"

基于官方提供的centos基础镜像,创建一个守护式运行容器,并用shell脚本指定这个容器在内部进行一系列比较复杂的计算,一直循环。

输入docker stats查看容器状态。可以发现一个容器基本上要占到7%-8%,不考虑其他进程占用的情况下,顶多也就能运行12-13个,事实上创建到第六个的时候已经有一些卡顿了。

image-20230521225646627

解决方法也很简单,运行容器时指定--cpus参数,来限制容器使用的cpu核数。这是网上的说法,但实际上这个更像是直接指定它的利用率,因为这个参数可以为小数。譬如我现在的虚拟机只有一个核,所以我将每个容器的使用比例设置为0.01,运行后可以看出来使用率降到了1%

image-20230521230600544

使用--memory可以用来设置内存限制,但大量申请内存感觉比较危险,这里没有尝试。

(3)你的镜像多大?请精简,写出操作步骤。

这里使用dockerfile来创建镜像

我们写一个简单的C程序,命名为Hello.c

然后使用如下dockerfile进行制作

FROM gcc
COPY hello.c .
RUN gcc -o hello hello.c
CMD ["./hello"]

运行命令:docker build -f dockerfile_01 -t my_image:01 .

image-20230522111429960

发现镜像大小达到了惊人的1.38GB,但这只是一个简单的Hello程序的容器而已。

主要原因是在构造镜像时,我们将完整的gcc编译工具链放入了容器中,但对于使用的用户来说这并不必要。

因此我们使用分阶段构建

FROM gcc AS mybuildstage
COPY hello.c .
RUN gcc -o hello hello.c
FROM ubuntu
COPY --from=mybuildstage hello .
CMD ["./hello"]

即存在一个中间过程,用来编译我们的Hello.c,不失一般性,对于其他的镜像而言,这一步就是在准备全部所需的内容。

然后将处理好的内容通过再次构建放入我们的基础镜像为ubuntud的镜像。

得到结果如下

image-20230522112246771

大小缩小到了77.8MB,几乎缩小了20倍。

此外,还有一种方法可以精简镜像,那就是根据需求选择本身就比较小的基础镜像。这里选择一个很受欢迎的神奇镜像alpine。

制作之后大小如下

image-20230522112626205

再次缩小了10倍。此时和原本的大小已经有了200倍的差距,精简很成功。

(4)你认为自己的镜像有共享价值吗?写出分享方法。

当然是没有的,没有人需要一个只会输出hello的镜像,尽管它挺小的。不过如果要分享的话也很简单,那就是push到docker hub上,这样大家就可以将它pull到本地,然后用它输出一个hello。

标签:容器,centos,sudo,hello,实验,镜像,Docker,docker
From: https://www.cnblogs.com/czy-blogs/p/17471870.html

相关文章

  • OpenMP实验
    OpenMP实验矩阵乘法的OpenMP实现及性能分析1)运行并测试矩阵相乘程序测试结果:并行加速比表格:线程数1246810121416运行时间(预期)0.0880.0440.0220.0150.0110.0080.0070.0060.0055运行时间(实际)0.0880.0460.0260.0230.0280.0420.0450.0460......
  • 编译原理:词法分析实验
    实验二词法分析实验目的根据PL/0语言的文法规范,编写PL/0语言的词法分析程序。通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的法。掌......
  • 实验七
     task4#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN5#defineM80intmain(){inti,k=0;charch;FILE*fp;fp=fopen("data4.txt","r");if(fp==NULL){printf("......
  • 实验六 turtle绘图与python库应用编程体验
    task1_1实验源码:fromturtleimport*defmove(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n变形'''foriinrange(n):......
  • 202308-啊对对队 实验七 综合软件项目案例
    项目内容班级博客链接2023春软件工程2020级计算机科学与技术本次作业要求链接实验七综合软件项目案例团队名称啊对对队团队课程学习目标1.练习用例图、类图、顺序图、状态图等UML建模技术在软件开发过程中的用途;2.掌握软件项目的数据库逻辑结构设计方法;3.......
  • linux环境下使用压缩包、docker、docker-compose搭建nacos集群
    本篇文章介绍如何在linux系统上安装nacos和搭建集群,本文章使用的是centos7系统。本机搭建nacos1、准备工作Nacos依赖 Java需要三台linux服务器,条件有限的可以安装虚拟机,内存有限那就只需要安装一台虚拟机,然后开启不同端口就可以,所以最低的条件是你需要安装一个centos7版本的虚拟......
  • 实验7
    实验任务1程序源码#include<stdio.h>#include<stdlib.h>#defineN7#defineM80typedefstruct{charname[M];charauthor[M];}Book;intmain(){Bookx[N]={{"《雕塑家》","斯科特.麦克劳德"},{"《灯塔》&qu......
  • 202309-发际线与你作队 实验七 综合软件项目案例
    项目内容课程班级博客链接2020卓越工程师班这个作业要求链接实验七综合软件项目案例团队名称发际线与你们作队我的课程学习目标完成综合软件项目案例,对相关知识进行再次复习这个作业在哪些方面帮助我实现学习目标(1)练习用例图、类图、顺序图、状态图等......
  • 实验七
    实验任务4程序代码:#include<stdio.h>#include<stdlib.h>intmain(){FILE*fp;inti=0;charch;fp=fopen("D:\\private\\learning\\data\\data4.txt","r");if(fp==NULL){printf("failtoop......
  • 实验7
    实验任务1task1_1源代码#include<stdio.h>#defineN7#defineM80typedefstruct{charname[M];charauthor[M];}Book;intmain(){Bookx[N]={{"《雕塑家》","斯科特.麦克劳德"},{"《灯塔》","克里斯多夫.夏布特"......