1. 程式人生 > >apt-get在基於Ubuntu基礎映象Dockerfile中的常見用法

apt-get在基於Ubuntu基礎映象Dockerfile中的常見用法

首先,在Ubuntu的Docker官方映象中是沒有快取Apt的軟體包列表的。因此在做其他任何基礎軟體的安裝前,都需要至少先做一次apt-get update。有時為了加快apt-get安裝軟體的速度,還需要修改Apt源的列表檔案/etc/apt/sources.list。相應的操作用命令表示如下:

使用Ubuntu官方的Apt源,也可以根據實際需要修改為國內源的地址

echo “deb http://archive.ubuntu.com/ubuntu trusty main universe\n” > /etc/apt/sources.list
echo “deb http://archive.ubuntu.com/ubuntu

trusty-updates main universe\n” >> /etc/apt/sources.list
在容器構建時,為了避免使用apt-get install安裝基礎軟體的過程中需要進行互動操作,使用-y引數來避免安裝非必須的檔案,從而減小映象的體積。
apt-get -y --no-install-recommends install
使用apt-get autoremove命令移除為了滿足包依賴而安裝的、但不再需要的包;使用apt-get clean命令清除所獲得包檔案的本地倉庫。
DEBIAN_FRONTEND這個環境變數,告知作業系統應該從哪兒獲得使用者輸入。如果設定為"noninteractive",你就可以直接執行命令,而無需向用戶請求輸入(所有操作都是非互動式的)。這在執行apt-get命令的時候格外有用,因為它會不停的提示使用者進行到了哪步並且需要不斷確認。非互動模式會選擇預設的選項並以最快的速度完成構建。請確保只在Dockerfile中呼叫的RUN命令中設定了該選項,而不是使用ENV命令進行全域性的設定。因為ENV命令在整個容器執行過程中都會生效,所以當你通過BASH和容器進行互動時,如果進行了全域性設定那就會出問題。

正確的做法 - 只為這個命令設定ENV變數

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python3

錯誤地做法 - 為接下來的任何命令都設定ENV變數,包括正在執行地容器

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get install -y python3
我的示例如下:

FROM ubuntu:trusty
MAINTAINER mryqu
RUN
DEBIAN_FRONTEND=noninteractive apt-get update &&
DEBIAN_FRONTEND=noninteractive apt-get -y install wget curl &&
DEBIAN_FRONTEND=noninteractive apt-get -y autoremove &&
DEBIAN_FRONTEND=noninteractive apt-get clean