版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxc024000/article/details/84646103
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