【Docker】Dockerfile制作DockerImage

本文介绍如何使用Dockerfile从基础镜像出发,安装特定软件如gcc、g++、cmake和Java,创建适合开发环境的Docker镜像。通过示例展示Dockerfile的编写和构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile制作DockerImage

Docker服务器提供了许多Images,可以很方便的pull到本地使用。

# 拉取ubuntu16.04的镜像
docker pull ubuntu:16.04
# 进入到容器内
# -t 在容器内运行一个终端或伪终端
# -i 与容器内的标准输入进行交互(其实就是,交互式)
# 一般-t与-i一起使用
docker run -t -i ubuntu:16.04 /bin/bash

由于开发中存在不同的编译、运行环境,所以需要自制定Images(配好开发环境的系统)以便使用。这时候,可以利用Dockerfile生成自定制的Images。

Dockerfile参数

Dockfile通过一些指定的命令,告诉Docker在需要对Images做哪些操作(比如安装Java,gcc等等)。详细的命令可以参照Docker File。这里给出几个常用命令的含义。

  • FROM
    该命令位于Docker File第一行,告诉Docker使用原生的Images(比如Ubuntu16.04)。
# 使用Docker官网提供的unbuntu 16.04。之后,可以在该Images的基础上,安装环境。
# 下面的介绍,都以Ubuntu系统为例。
FROM ubuntu:16.04
  • RUN,执行指定命令。
# 安装gcc&g++
RUN apt-get update && \
apt-get install -y \
 software-properties-common python-software-properties \
 gcc-5 g++-5 \
 g++-5-multilib g++-multilib && \
rm -rf /var/lib/apt/lists/*

# 配置gcc&g++
# config gcc5.4 && g++5.4
RUN update-alternatives --install "/usr/bin/gcc" "gcc" "/usr/bin/gcc-5" 50 && \ 
 update-alternatives --install "/usr/bin/g++" "g++" "/usr/bin/g++-5" 50 
  • WORKDIR,指定当前工作路径。其实就是相当于Ubuntu的cd命令。
# 指定当前工作路径为根路径
WORKDIR /
  • ENV,设置系统环境变量。
# 配置Java环境变量。
ENV JAVA_HOME=/usr/lib/java8/jdk1.8.0_162
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH=${JAVA_HOME}/bin:$PATH
  • ADD,将文件复制到DockerImages中。如果是压缩文件,会自动解压。
# 安装Java
ADD jdk-8u162-linux-x64.tar.gz /
WORKDIR /
RUN mkdir /usr/lib/java8/ && \
 mv jdk1.8.0_162/ /usr/lib/java8/ && \
 update-alternatives --install "/usr/bin/java" "java" "/usr/lib/java8/jdk1.8.0_162/bin/java" 10 && \
 update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/java8/jdk1.8.0_162/bin/javac" 10 && \
 update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/java8/jdk1.8.0_162/bin/javaws" 10 && \
 update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/java8/jdk1.8.0_162/bin/jar" 10
Dockerfile小例
  • 使用DockerFile,基于ubuntu:16.04,生成一个Images。该Image安装了g++&gcc5、cmake、Java8等。
  • 目录格式
- TestDocker
---   Dockerfile
---   jdk-8u162-linux-x64.tar.gz
  • Dockerfile内容如下
FROM ubuntu:16.04

# install g++ & gccc
RUN apt-get update && \
apt-get install -y \
 software-properties-common python-software-properties \
 cmake bzip2 ccache gcc-5 g++-5 \
 g++-5-multilib g++-multilib && \
rm -rf /var/lib/apt/lists/*

# config gcc && g++
RUN update-alternatives --install "/usr/bin/gcc" "gcc" "/usr/bin/gcc-5" 50 && \ 
 update-alternatives --install "/usr/bin/g++" "g++" "/usr/bin/g++-5" 50 

# install java
ADD jdk-8u162-linux-x64.tar.gz /
WORKDIR /
RUN mkdir /usr/lib/java8/ && \
 mv jdk1.8.0_162/ /usr/lib/java8/ && \
 update-alternatives --install "/usr/bin/java" "java" "/usr/lib/java8/jdk1.8.0_162/bin/java" 10 && \
 update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/java8/jdk1.8.0_162/bin/javac" 10 && \
 update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/java8/jdk1.8.0_162/bin/javaws" 10 && \
 update-alternatives --install "/usr/bin/jar" "jar" "/usr/lib/java8/jdk1.8.0_162/bin/jar" 10

#config java
ENV JAVA_HOME=/usr/lib/java8/jdk1.8.0_162
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH=${JAVA_HOME}/bin:$PATH
  • 运行DockerFile生成Images。
# -t 指定什么的Images名称。
# . Dockerfile所在路径,相对路径,绝对路径都可以
cd ~/TestDocker/
docker build -t linduo/unbuntu:16.04 .

# 终端会输出系列命令,最终什么images。
  • 使用该Images
# 查看images
docker images
# 使用该images运行容器
docker run -t -i linduo/unbuntu:16.04 /bin/bash
Docker系列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值