dockerfile

小钊4周前 (02-26)Linux34

3. 实战案例——使用Dockerfile构建镜像

注意:此实验确保可以上网。


3.1 Dockerfile的概述Dockerfile概述.mp4

Dockerfile是一个文本文档,其中包含了组合映像的命令,可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。


docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile,其语法如下所示:


# docker build -f /path/to/a/Dockerfile

Dockerfile一般分为4部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,“#”为Dockerfile中的注释。


Dockerfile主要指令如下所示:


● FROM:指定基础镜像,必须为第一个命令。


● MAINTAINER:维护者信息。


● RUN:构建镜像时执行的命令。


● ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。


● COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。


● CMD:构建容器后调用,也就是在容器启动时才进行调用。


● ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去“application”,只使用参数。


● LABEL:用于为镜像添加元数据。


● ENV:设置环境变量。


● EXPOSE:指定与外界交互的端口。


● VOLUME:用于指定持久化目录。


● WORKDIR:工作目录,类似于cd命令。


● USER:指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可通过该命令指定运行用户。


● ARG:用于指定传递给构建运行时的变量。


● ONBUILD:用于设置镜像触发器。


3.2 Dockerfile的编写Dockerfile的编写-实操.mp4

接下来以centos:latest为基础镜像,安装JDK 1.8并构建新的镜像centos-jdk。新建文件夹用于存放JDK安装包和Dockerfile文件,命令和结果如下所示。


[root@master ~]# mkdir centos-jdk

[root@master ~]# mv jdk/jdk-8u141-linux-x64.tar.gz ./centos-jdk/ 

[root@master ~]# cd centos-jdk/

编写Dockerfile,使用cat > Dockerfile << EOF命令,在界面内输入以下代码,然后按回车键结束。


[root@master centos-jdk]# cat > Dockerfile << EOF

FROM centos

MAINTAINER test

RUN mkdir /usr/local/java

ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/

RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk

ENV JAVA_HOME /usr/local/java/jdk

ENV JRE_HOME \${JAVA_HOME}/jre

ENV CLASSPATH .:\${JAVA_HOME}/lib:\${JRE_HOME}/lib

ENV PATH \${JAVA_HOME}/bin:$PATH

EOF

图1.png

图1

使用docker build命令构建新镜像,命令和结果如下所示。


[root@master centos-jdk]# docker build -t="centos-jdk" .

Sending build context to Docker daemon  185.5MB

Step 1/9 : FROM centos

 ---> 0f3e07c0138f

Step 2/9 : MAINTAINER test

 ---> Running in 1a6a5c210531

Removing intermediate container 1a6a5c210531

 ---> 286d78e0b9bf

Step 3/9 : RUN mkdir /usr/local/java

 ---> Running in 2dbbac61b2cf

Removing intermediate container 2dbbac61b2cf

 ---> 369567834d80

Step 4/9 : ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/

 ---> 8fb102032ae2

Step 5/9 : RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk

 ---> Running in d8301e932f7c

Removing intermediate container d8301e932f7c

 ---> 7c82ee6703c5

Step 6/9 : ENV JAVA_HOME /usr/local/java/jdk

 ---> Running in d8159a32efae

Removing intermediate container d8159a32efae

 ---> d270abf08fa2

Step 7/9 : ENV JRE_HOME ${JAVA_HOME}/jre

 ---> Running in 5206ba2ec963

Removing intermediate container 5206ba2ec963

 ---> a52dc52bae76

Step 8/9 : ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib

 ---> Running in 41fbd969bd90

Removing intermediate container 41fbd969bd90

 ---> ff44f5f90877

Step 9/9 : ENV PATH ${JAVA_HOME}/bin:$PATH

 ---> Running in 7affe7505c82

Removing intermediate container 7affe7505c82

 ---> bdf402785277

Successfully built bdf402785277

Successfully tagged centos-jdk:latest

使用相关的命令查看构建的新镜像,命令和查看到的新镜像结果如下所示。


[root@master centos-jdk]# docker images

REPOSITORY         TAG            IMAGE ID       CREATED           SIZE

centos-jdk         latest         bdf402785277   19 seconds ago    596MB

使用新构建的镜像运行容器验证JDK是否安装成功,命令和结果如下所示。


[root@master centos-jdk]# docker run -it centos-jdk /bin/bash

[root@2f9219541ca6 /]# java -version

java version "1.8.0_141"

Java(TM) SE Runtime Environment (build 1.8.0_141-b15)

Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)

[root@2f9219541ca6 /]# exit

[root@master centos-jdk]# cd

从结果可以发现JDK已经安装成功了,至此,使用Dockerfile构建镜像已完成。


3.3 构建Nginx镜像构建Nginx镜像-实操 .mp4

[root@master ~]# mkdir nginx

[root@master ~]# cp /etc/yum.repos.d/local.repo  nginx/

[root@master ~]# cd nginx

[root@master ~nginx]# curl -O http://mirrors.douxuedu.com/cloud/nginx-1.12.2.tar.gz

(1)根据要求编写Dockerfile文件,使用cat >> Dockerfile <<EOF命令,在界面输入以下代码,按回车键结束。


[root@master nginx]# cat >> Dockerfile <<EOF

FROM centos:7

MAINTAINER test

RUN yum -y update

RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make

RUN useradd -M -s /sbin/nologin nginx

ADD nginx-1.12.2.tar.gz /usr/local/src

WORKDIR /usr/local/src

WORKDIR nginx-1.12.2

RUN ./configure \

--prefix=/usr/local/nginx \

--user=nginx \

--group=nginx \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--with-http_flv_module

RUN make && make install

ENV PATH /usr/local/nginx/sbin:\$PATH

EXPOSE 80

EXPOSE 443

RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf

ADD run.sh /run.sh

RUN chmod 755 /run.sh

CMD ["/run.sh"]

EOF

(2)编写启动脚本文件,并构建镜像,命令如下所示。


[root@master nginx]# cat > run.sh <<EOF

#!/bin/bash

/usr/local/nginx/sbin/nginx

EOF         //按回车键结束

[root@master nginx]# docker build -t nginx:centos .

......

Step 16/17 : RUN chmod 755 /run.sh

 ---> Running in 12f5dc188264

Removing intermediate container 12f5dc188264

 ---> 7c9ad8959c34

Step 17/17 : CMD ["/run.sh"]

 ---> Running in 17404a6af1a7

Removing intermediate container 17404a6af1a7

 ---> 13adc5edfafa

Successfully built 13adc5edfafa

Successfully tagged nginx:centos

//注意:此镜像构建过程时间为1-2分钟,请耐心等待!

[root@master nginx]# cd

3.4 构建Tomcat镜像构建Tomcat镜像

 您阅读本篇文章共花了: 

相关文章

Linux基础基本操作

一、命令基础知识1.命令提示符[root@localhost ~]# root:当前登录用户 @:读做“at”,意思是在···之上 localhost:当前登录的主机名 ~:表示在当...

shell自动创建分区

vi disk.sh #!/bin/bash fdisk /dev/sdb <<EOF n p 1 #必须的空格,代表第一次回车 &nb...

docker容器

1. 实战案例——Docker容器命令1.1 docker run命令docker run命令-实操.mp4(1)命令使用语法:docker run [options]镜像名参数如下所示:● -i:表...

docker镜像加速器

1. 实战案例——Docker镜像加速器的使用(1)Docker加速器的配置Docker镜像加速器的使用-实操.mp4注意:此实验确保可以上网。在国内访问Docker官方的镜像,一直以来速度都比较慢。...

docker基本操作

2. 实战案例——Docker基本操作Docker基本操作-实操.mp4注意:此实验确保可以上网。2.1 查看镜像列表可以使用docker images命令来列出本地主机上的镜像,命令和结果如下所示。...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。