Mryqu's Notes


  • 首页

  • 搜索
close

apt-get在基于Ubuntu基础镜像Dockerfile中的常见用法

时间: 2015-07-05   |   分类: Tool   Docker     |   阅读: 91 字 ~1分钟

首先,在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

参考

Ubuntu manuals: apt-get man page
使用Docker部署Python应用的一些最佳实践
docker部署OpenStack API

标题:apt-get在基于Ubuntu基础镜像Dockerfile中的常见用法
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#dockerfile# #ubuntu# #apt-get# #debian_frontend# #devops#
[Spring Boot] Hello Spring LDAP
Docker的镜像存储在哪里和长什么样子
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
    • 参考
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%