比如在工作中Docker中的镜像并不满足工作的需要,需要进行自己的配置
这里以centos为例:
上图centos容器不支持vim、ifconfig等,是因为镜像只有linux的内核,舍弃了不需要的很多东西。当我们在拿到镜像后就需要有vim、ifconfig这样的情况下,可以使用DockerFile进行构建自己的镜像
新建文件夹mydata,编写DockerFile:
FROM 基础镜像,当前新镜像是基于哪个镜像的,基于centos
EVN 用来构建镜像的环境变量
WORKDIR 构建镜像的落脚点
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令 这里下载了vim和net-tools
EXPOSE 当前容器对外暴露出的端口 比如自己构建tomcat时的EXPOSE就可以设置为8080
构建镜像运行容器:docker build -f /mydata/DockerFile -t my/centos .
如果要定义TAG/版本,比如1.1版本,不定义版本默认lastest:docker build -f /mydata/DockerFile -t my/centos:1.1 .
以上就完成了自己的需求的镜像,以后需要直接使用就可以了,不需要额外再次构建或者下载,可以上传到Docker镜像库,运维也可以直接拉镜像下来即可,tomcat、mysql、redis等同理
做一个稍微复杂点的tomcat镜像:
创建一个目录:mkdir -p /ypp/mydockerfile/tomcat9
将jdk和tomcat9的压缩包放入tomcat9这个目录,新建c.txt,用于测试COPY命令拷贝
DockerFile:
FROM centos
MAINTAINER ypp<ypp@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下并重命名为cincontainer.txt,不写默认为c.txt
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.17.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.17
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.17
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.17/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.17/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.17/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.17/logs/catalina.out
以上方式各种各样,比如服务器正在运行着一个tomcat,可以将tomcat/webapps下面的项目,通过ADD的命令把正在运行的项目放入构建的tomcat镜像里面的webapps里面,微服务等都可以
构建自己的tomcat以及运行,页面直接访问.运行tomcat后台进程运行 docker run -d -p 9080:8080 --name tomcat mytomcat
上面运行了自己构建的tomcat,是直接可以运行的一个tomcat、包括jdk。中间出现了一个小插曲,容器名tomcat已经被使用了。换成了mtomcat
访问页面9080端口:
成功