用 Docker 运行操作系统

Busybox

BusyBox 是一个集成了一百多个常用 Linux 命令的精简工具箱,总大小只有不到 2MB。通过在 Docker 中运行 Busybox 容器,可以快速创建一个轻量级的测试环境,用于验证命令的使用和测试脚本的运行。

在 Docker Hub 上搜索并下载:

[root@server4 ~]$ docker search --filter=is-official=true busybox
NAME      DESCRIPTION           STARS     OFFICIAL   AUTOMATED
busybox   Busybox base image.   2379      [OK] 
[root@server4 ~]$ docker pull busybox
[root@server4 ~]$ docker images busybox
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    16ea53ea7c65   5 weeks ago   1.24MB

使用 -it 方式启动交互式容器:

[root@server4 ~]$ docker run -it busybox
/ # vi
[1]+  Stopped (signal)           vi
/ # ls /bin
[                  dnsdomainname      id                 mkfs.minix         rev                tee
[[                 dos2unix           ifconfig           mkfs.vfat          rm                 telnet
acpid              dpkg               ifdown             mknod              rmdir              telnetd
add-shell          dpkg-deb           ifenslave          mkpasswd           rmmod              test

甚至带有 httpd 服务:

root@k8s-204:~$ docker run -d -p 18080:80 busybox httpd -f -p 80 -h /var/www
root@k8s-204:~# curl 127.0.0.1:18080
<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD>
<BODY><H1>404 Not Found</H1>
The requested URL was not found
</BODY></HTML>

Alpine

Alpine 操作系统是一个面向安全的轻型 Linux 发行版,它采用 musl libc 和 BusyBox 来减小系统体积和资源消耗,比 BusyBox 功能更完善。

Alpine Docker 镜像仅 5 MB 左右大小,由于 Alpine 还提供了包管理工具 apk 查询和安装软件包。所以被 Docker 官方推荐为默认基础环境镜像。使用 alpine 作为基础镜像的镜像名会在后面加上 -alpine,例如 python:3.5-alpine。

可以在 Docker Hub 上搜索下载:

[root@server4 ~]$ docker search --filter=is-official=true alpine
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
alpine    A minimal Docker image based on Alpine Linux…   8012      [OK]    
[root@server4 ~]$ docker pull alpine
[root@server4 ~]$ docker images alpine
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
alpine       latest    14119a10abf4   8 weeks ago   5.6MB

运行时可以将需要在 alpine 中运行的命令写在 docker run 最后:

[root@server4 ~]$ docker run alpine echo '555'
555

在 alpine 容器中安装软件使用 apk add 命令,软件包名可以到 https://pkgs.alpinelinux.org/packages 搜索到:

~ # apk add vim
(1/5) Installing xxd (8.2.3437-r0)
(2/5) Installing lua5.3-libs (5.3.6-r0)
(3/5) Installing ncurses-terminfo-base (6.2_p20210612-r0)
(4/5) Installing ncurses-libs (6.2_p20210612-r0)
(5/5) Installing vim (8.2.3437-r0)
Executing busybox-1.33.1-r3.trigger
OK: 25 MiB in 19 packages

Debian/Ubuntu

Debian 和 Ubuntu 都属于 Debian 系列的服务器操作系统。在一些大型软件镜像中,被作为基础镜像使用。

在 Docker Hub 上搜索并下载相应镜像:

[root@server4 ~]$ docker search --filter=is-official=true debian
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu    Ubuntu is a Debian-based Linux operating sys…   12999     [OK]       
debian    Debian is a Linux distribution that's compos…   4039      [OK]       
[root@server4 ~]$ docker pull debian
[root@server4 ~]$ docker pull ubuntu

使用 docker run 命令可以直接运行镜像:

[root@server4 ~]$ docker run --rm -it debian
root@67c7d35efc34:/# echo $SHELL
/bin/bash
root@67c7d35efc34:/# cat /etc/issue
Debian GNU/Linux 11 \n \l

如果考虑以 Ubuntu 作为基础镜像,通常首先使用 apt-get 命令来更新和安装软件包:

[root@server4 ~]$ docker run --rm -it ubuntu
root@a5c5f0b0a7d5:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
root@a5c5f0b0a7d5:/# apt-get update
Fetched 19.5 MB in 5s (3616 kB/s)                
Reading package lists... Done
root@a5c5f0b0a7d5:/# apt-get install -y curl

CentOS/Fedora

CentOS 和 Fedora 都是基于 Red Hat 的 Linux 发行版:

[root@server4 ~]$ docker search --filter=is-official=true centos
NAME      DESCRIPTION                     STARS     OFFICIAL   AUTOMATED
centos    The official build of CentOS.   6810      [OK]    
[root@server4 ~]$ docker pull centos

CentOS 最新版为 8.4 版本,一般使用的是 CentOS:7 版本.

[root@server4 ~]$ docker run -it --rm centos
[root@be4eb8a8025a /]$ cat /etc/centos-release
CentOS Linux release 8.4.2105
[root@server4 ~]$ docker run -it --rm centos:7
[root@e6de73058535 /]$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)