在docker容器中安裝軟件需先確認系統(tǒng)類型并選擇對應(yīng)包管理工具。一、確認系統(tǒng)類型以選擇apt-get(Debian/Ubuntu)、yum(centos/rhel)或apk(alpine),可通過cat /etc/os-release查看;二、使用apt-get時應(yīng)先執(zhí)行apt-get update再安裝軟件,加-y參數(shù)自動確認,并清理緩存以減小鏡像體積;三、使用yum安裝時同樣加-y參數(shù),一般無需手動更新源,舊鏡像可能需啟用epel源;四、dockerfile中建議合并多條命令為一行以減少圖層數(shù)量,如用apt的run apt-get update && apt-get install -y cURL git && apt-get clean && rm -rf /var/lib/apt/lists/* 或用yum的run yum install -y nginx && yum clean all。
在 docker 容器中安裝軟件其實和在普通 Linux 系統(tǒng)里差不多,區(qū)別主要是你得先確認容器用的是哪種系統(tǒng)(比如 Debian/Ubuntu 還是 centos/Alpine),然后才能決定該用 apt-get、yum 還是別的包管理工具。關(guān)鍵點就是:選對命令,注意更新源,盡量精簡操作步驟。
一、確認容器使用的操作系統(tǒng)類型
不同系統(tǒng)的包管理器不一樣,這是最基礎(chǔ)也是最容易忽略的一點:
- Debian / Ubuntu 系列使用 apt-get 或 apt
- CentOS / RHEL 系列使用 yum
- Alpine Linux 使用 apk
你可以通過運行 cat /etc/os-release 來查看當(dāng)前容器的操作系統(tǒng)信息。如果不確定,也可以從鏡像名大致判斷,比如 nginx:alpine 就是 Alpine 系統(tǒng),centos:7 當(dāng)然是用的 yum。
二、使用 apt-get 安裝軟件的正確方式
如果你是在基于 Debian 的容器里(比如 ubuntu、debian、node 等官方鏡像),那就用 apt-get。
常見寫法如下:
apt-get update && apt-get install -y 包名
幾點建議:
-
每次安裝前都要先執(zhí)行 apt-get update,否則可能找不到包。
-
加 -y 參數(shù)是為了自動確認,避免交互式提示中斷構(gòu)建過程。
-
安裝完記得清理緩存(尤其是寫 Dockerfile 的時候):
apt-get clean && rm -rf /var/lib/apt/lists/*
舉個例子,你想安裝 curl 和 net-tools:
apt-get update && apt-get install -y curl net-tools
三、使用 yum 安裝軟件的注意事項
對于 CentOS 或 RHEL 系列的容器,用的就是 yum:
yum install -y 包名
同樣建議加上 -y 自動確認。但不像 apt 那樣需要頻繁更新源(默認會自動檢查),所以一般不需要手動執(zhí)行 yum makecache,除非你修改了源配置。
例如安裝 telnet 和 vim:
yum install -y telnet vim
需要注意的是,有些舊版本的鏡像可能沒有 vim,只能用 vi,或者要額外啟用 EPEL 源才能安裝某些包。
四、Dockerfile 中安裝軟件的小技巧
在寫 Dockerfile 時,推薦把多個安裝命令合并成一行,這樣可以減少圖層數(shù)量,減小最終鏡像體積:
比如用 apt 的:
RUN apt-get update && apt-get install -y curl git && apt-get clean && rm -rf /var/lib/apt/lists/*
用 yum 的:
RUN yum install -y nginx && yum clean all
這樣不僅效率高,還能避免緩存殘留影響后續(xù)構(gòu)建。
基本上就這些。用對命令,注意系統(tǒng)類型,再加上一點優(yōu)化技巧,就能在容器里順利安裝你需要的軟件了。