实例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