首页 > 技术文章 > 4dockerfile之实例练习命令

tyjs09 2020-12-30 17:26 原文

实例1:构造一个含有vim编辑器的centos镜像

代码解释:

1,CMD /bin/bash为什么末尾要写上这一行代码?

答:在非shell环境中如果要执行shell,就必须要指定shell,需要注意的是用这种方式执行shell需要指定全路径。另外下面这段Dockerfile中只能有一个CMD被执行,因为在Dockerfile脚本中有且只能有一个CMD启动程序指令

2,如果下面的dockerfile去掉CMD后会出现什么情况?

答:程序依然会执行,因为CMD是dockerfile中默认执行的指令,除非你用具有和CMD相同功能的ENTEYPONT指定容器启动时要运行的命令,但两者用法又有区别,CMD是覆盖,ENTEYPONT是追加,区别用法实例请看后面。

上面的例子讲解了7个命令:

FROM:当前镜像要基于哪个基础镜像

MAINTAINER:镜像维护者姓名和邮箱地址

RUN:容器构建时需要运行的命令

EXPOSE:当前容器对外暴露的端口

WORKDIR:登陆终端后软件进入的工作目录

ENV:用来再构建镜像过程中设置环境变

CMD指定一个容器启动时要运行的命令格式

3还差五个命令未演示,如下:

实例2:演示CMD和ENTEYPOINT二者的区别

ADD:将宿主机目录下的文件拷贝至镜像并且ADD命令会自动处理URL和解压tar

COPY:类似于ADD,拷贝文件或目录至镜像中,语法COPY src dest COPY[“rc”,”dest”]

VOLUME:容器数据券,用于数据保存和持久化工作

 

ENTEYPOINT:指定一个容器启动时要运行的命令,ENTEYPONT的目的和CMD一样,都是在指定容器启动程序及参数

 

OBBUILD:当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承后触发父镜像的onbuild(了解即可)

 二简述CMD和ENTEYPONT的区别

二者都可以让容器跑起来,但似乎CMD更人性化一些

4还差3个命令

ADD:将宿主机目录下的文件拷贝至镜像并且ADD命令会自动处理URL和解压tar包

COPY:类似于ADD,拷贝文件或目录至镜像中

VOLUME:容器数据券,用于数据保存和持久化工作(https://www.cnblogs.com/tyjs09/p/14202676.html)

实例3:基于centos 创建一个tomcat镜像

1)解压jdk和tomcat压缩包,获取解压后的文件名

tar -zxf apache-tomcat-8.5.55.tar.gz
tar -zxf jdk-8u181-linux-x64.tar.gz

2)编写dockerfile文件

首先把下载好的tomcat和jdk包上传到linux的某个目录里,然后在这个目录中编写
Dockerfie文件:
1将文件添加到指定目录中,并对其进行重命名
2创建目录/usr/local/java
3把tomcat移到/usr/local里,把jdk移到/usr/local/java里
4配置java和tomcat的环境变了
5设置工作目录暴露端口执行CMD

自己理解的一种写法:

FROM centos
#1将文件添加到指定目录中,并对其进行重命名
ADD apache-tomcat-8.5.55.tar.gz /root/
ADD jdk-8u181-linux-x64.tar.gz /root/
RUN mv /root/apache-tomcat-8.5.55 /root/tomcat
#2创建目录/usr/local/java
RUN mkdir -p /usr/local/java
#3把tomcat移到/usr/local里,把jdk移到/usr/local/java里
RUN mv /root/tomcat /usr/local/
RUN mv /root/jdk1.8.0_181 /usr/local/java
#4配置java和tomcat的环境变了
ENV JAVA_HOME /usr/local/java/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASE /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/BIN:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#5设置工作目录暴露端口执行CMD
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD bin/startup.sh && tail -F logs/catalina.out

 网络上获取的一种写法:

#基于centos镜像
FROM centos
#设置作者和邮箱
MAINTAINER tyjs09<66907360@qq.com>
#声明变量
ENV MYPATH /usr/local/tomcat
#创建tomcat目录
RUN mkdir -p /usr/local/java
#把tocat和jdk拷贝到/root/目录下
ADD apache-tomcat-8.5.55.tar.gz /root/
ADD jdk-8u181-linux-x64.tar.gz /root/
#列出root目录下的所有内容
RUN ls -lh /root/
#修改目录名
RUN mv /root/apache-tomcat-8.5.55 /root/tomcat
#把tomcat放到/usr/local/目录里
RUN mv /root/tomcat /usr/local/
#把jdkjdk1.8.0_181移动到/usr/local/java里面去
RUN mv /root/jdk1.8.0_181 /usr/local/java
#设置工作目录
WORKDIR $MYPATH
#配置java和tomcat环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASE /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/BIN:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#安装vim
RUN yum -y install vim
#暴露端口
EXPOSE 8080
#在当前工作目录的binu路里执行终端,为了防止终端退出,添加一个查看日志的进程
CMD bin/startup.sh && tail -F logs/catalina.out

3)构造镜像

docker build -t mytomcat:1.0 .

4)运行镜像并浏览器测试

docker run -d -p 8080:8080 mytomcat:1.0

 

推荐阅读