Docker使用Alpine镜像
介绍
希望使用 docker 来制作镜像,首先需要选择一个基础镜像
下面是 docker 中几个系统镜像的大小
root@debian:~# docker images
REPOSITORY | TAG | IMAGE ID | SIZE |
---|---|---|---|
debian | bullseye | 5c17865bcd0f | 118MB |
ubuntu | 22.04 | f3d495355b4e | 69.2MB |
busybox | stable | 3c277069c6ae | 1.41MB |
alpine | 3.15 | 3fb3c9af89a9 | 5.32MB |
centos | latest | e6a0117ec169 | 272MB |
其中最小的是 busybox
,只是缺少了包管理工具
BusyBox
是一个集成了一百多个最常用 Linux 命令和工具(如cat
、echo
、grep
、mount
、telnet
等)的精简工具箱,它只需要几 MB 的大小,很方便进行各种快速验证,被誉为“Linux 系统的瑞士军刀”。
第二小的是 alpine
,他的大小也远比其他的系统镜像小得多
Alpine
操作系统是一个面向安全的轻型Linux
发行版。它不同于通常Linux
发行版,Alpine
采用了musl libc
和busybox
以减小系统的体积和运行时资源消耗,但功能上比busybox
又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine
还提供了自己的包管理工具apk
,可以通过https://pkgs.alpinelinux.org/packages
网站上查询包信息,也可以直接通过apk
命令直接查询和安装各种软件。
Alpine 相关命令
一、包管理工具 apk
1、更新本地仓库索引
1 | apk update |
2、升级所有已安装的包
1 | apk upgrade |
3、搜索
1 | apk search <NAME> |
4、安装
1 | apk add <NAME> |
附件参数
--no-cache
:允许不在本地缓存索引,这对于保持容器较小非常有用
--virtual
:创建虚拟包,安装的软件包不会添加到全局软件包
比如说需要 gcc
来编译程序,vim
编辑内容, wget
下载程序,但是用完以后就不会再用了,就可以用创建虚拟包的方式,这里虚拟包的包名起的是 mypacks
,在使用完以后就可以通过一个卸载命令全部卸载
1 | apk add --no-cache --virtual mypacks gcc vim wget |
5、卸载
1 | apk del <NAME> |
6、查看包信息
1 | # 列出所有已安装的包 |
二、服务管理
alpine 没有使用 systemctl
来进行服务管理,使用的是 rc
系列命令
首先需要安装
1 | apk add --no-cache openrc |
- rc-update [参数] 服务 :主要用于不同运行级增加或者删除服务
- add, -a :新建服务
- del, -d :删除服务
- show, -s :显示状态
- rc-status [参数] :主要用于运行级的状态管理
- –all, -a :列出所有运行等级(runlevel)下的服务状态
- –list, -l :列出指定运行等级下的状态,若不指定运行等级,则以目前的运行等级为准
- –unused, -u :列出未指定运行等级的服务
- rc-service [服务] [参数] : 主用于管理服务的状态
- –list :列出所有可用服务
- start/stop/restart :启动/停止/重启 已有服务
比如设置 docker
开机启动
1 | rc-update add docker boot |
- rc-update add xxxx default
- rc-update add xxxx boot
这里
default
、boot
等等代表不同的runlevel
,对应所需的不同服务,默认启动就是default
boot
启动在default
之前完成,而且通常boot
里面的 service 不能被停止
启动
1 | rc-service docker start |