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。

posted @ 2023-06-10 20:10  丘丘王  阅读(61)  评论(0编辑  收藏  举报
鼠标点击页面特效

尝试在空白处点击鼠标