什么是Dockerfile
Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙
Dockerfile的基本结构
- 基础镜像信息
命令 | 说明 |
---|---|
FROM | 指定哪种镜像为新镜像的基础镜像,比如ubuntu,centos |
- 维护者信息
命令 | 说明 |
---|---|
MAINTAINER | 指明该镜像的作者和其电子邮件 |
- 镜像操作指令
命令 | 说明 |
---|---|
USER | 指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户 |
WORKDIR | 在构建镜像时,指定镜像的工作目录 |
(COPY/ADD) | COPY单纯的复制 ADD复制之后还会对文件进行提取和解压等操作 |
EVN | 配置坏境变量 |
EXPOSE | 指定容器要暴露的端口 |
VOLUME | 用来向基于镜像创建的容器添加数据卷 |
RUN | 在新镜像内部要执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行 |
- 容器启动时执行指令
命令 | 说明 |
---|---|
CMD | 比如:CMD [“java”,"-jar",“eureka-server-cluster.jar”,“spring.profiles=peer1”] 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。 |
ENTRYPOINT | 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效 |
结论:ENTRYPOINT 不能覆盖掉执行时的参数,CMD 可以掉覆盖默认的参数 |
使用Dockerfile基于centos创建JDK8的镜像
- 先换元
-
看一下自己之前是否安装过
yum list wget -
如果没有安装
yum -y install wget -
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak #备份Linux自带的EPEL源
-
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 下载yum
-
yum clean all #清空缓存
4)yum makecache #更新本地YUM缓存
5)yum -y install lrzsz
安装完lrzsz软件后上传jdk安装包
-
创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件
touch Dockerfile -
编写 Dockerfile 文件
vi Dockerfile
#1.指定基础镜像,并且必须是第一条指令
FROM centos:latest
#2.指明该镜像的作者和其电子邮件
MAINTAINER xyz "xyz@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后基于该镜像创建的容器都是基于此目录下工作,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
#5.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
Dockerfile文件中的内容1、2可以自己更改镜像本版号和作者名及电子邮件,3、4可以自己更改路径
-
执行Dockerfile文件,构建jdk8的镜像 (备注:依赖的基础镜像如果不存在,它会自动帮你下载)
docker build -t jdk8:v1.0 .
注1:-t jdk8:v1.0 给新构建的镜像取名为 jdk8, 并设定版本为v1.0
注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建
-
查看镜像
docker images
-
创建并启动容器
docker run -it -d --name tomcat02 jdk8:v1.0 /bin/bash
-
进入容器
docker exec -it tomcat02 bash
-
检查是否有问题-
javac 或者 java -version
基于最小的操作系统Alpine的镜像构建容器
-
docker images
-
docker pull alpine (备注:Alpine Linux是一个轻型Linux发行版,被称为最小的操作系统)
-
docker images
-
docker ps -a
-
docker run -itd --name tomcat03 jdk:v2.0 /bin/sh (备注:使用alpine镜像创建一个tomcat01的容器)
-
docker ps -a
-
docker exec -it tomcat01 sh (备注:进入tomcat01的容器)
-
ls(可以看到也是一个类似linux的坏境的容器)(备注:查看一下,可以看到alpin麻雀虽小,五脏俱全)