最近项目中有使用docker,组内做了关于docker的培训,然后自己跟着研究了一下,大概了解如何使用。我是基于tomcat镜像制作(不需要安装jdk,配置环境变量),基于centos镜像制作需要安装jdk,配置环境变量,下面会详细写到。前提准备:在centos机器上安装好docker。
一、基于tomcat镜像
1. 搜索并tomcat镜像
docker search tomcat
2. 第一个的 stars最多,而且是官方的,就是你了~
下载镜像:
docke pull tomcat
查看本地镜像:
docker images
3. 制作Dockfile文件
(1)touch Dockerfile (没有Dockerfile 文件的话会自动创建一个)
(2)vim Dockerfile
# Base image to use, this nust be set as the first line(form会先从本地镜像查找,如果没有回去docker仓库下载)
FROM tomcat # Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER xtt #拷贝配置文件和项目war包
COPY xtt_only/usr/local/xinsight /usr/local/xinsight
ADD xtt_only/etl.war /usr/local/tomcat/webapps #配置端口号
EXPOSE 8080 # Commands when creating a new container
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh", "run"]
(3)编译Dockerfile文件
docker build -t xtt:v1 .
备注:
1) -t xtt:v1 指定镜像名称为xtt ,tag为v1
2) 最后的一点(.)表示当前目录下的Dockerfile文件,会自动识别到当前路径下的Dockerfile文件
4. 运行此镜像,启动容器看是否成功
- 查看本地镜像:
docker images
- 运行此镜像:
docker run ee4
容器运行成功~
- 检查一下,查看当前正在运行的容器:
docker ps
二、基于centos镜像
需要下载jdk和tomcat安装包,并且在Dockerfile里面配置环境变量,其它保持不变。
1. 将jdk和tomcat安装包拷贝到虚拟机上
2. 修改Dockerfile文件
FROM docker.io/centos MAINTAINER xtt #切换镜像目录(类似cd命令),进入/usr目录
WORKDIR /usr #在/usr/下创建jdk目录,用来存放jdk文件
RUN mkdir jdk1.8.162 #将宿主机的jdk目录下的文件拷至镜像的/usr/jdk目录下
ADD jdk1.8.0_162 /usr/jdk1.8.162/ #将宿主机的tomcat目录下的文件拷至镜像的/usr/tomcat目录下,将etl的war拷贝到webapps目录下
RUN mkdir tomcat8.5.32
COPY tomcat8.5.32 /usr/tomcat8.5.32/
ADD xtt_only/etl.war /usr/local/tomcat/webapps
#拷贝项目环境配置文件
COPY xtt_only/usr/local/xinsight /usr/local/xinsight
#设置环境变量 ENV JAVA_HOME=/usr/jdk1.8.162 ENV JRE_HOME=$JAVA_HOME/jre ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH=/sbin:$JAVA_HOME/bin:$PATH #公开端口 EXPOSE 8080 #设置启动命令 ENTRYPOINT ["/usr/tomcat8.5.32/bin/catalina.sh","run"]
备注:
1) FROM 表示基于哪个基础镜像制作镜像,这里是基于ubuntu的最新镜像
2) MAINTAINER 表示由哪个人维护这个镜像
3) ADD 、COPY表示将宿主机上的文件复制到镜像的指定目录,ADD比COPY多一个特性:如果是压缩包拷贝过去会自动解压(源路径一定要是Dockerfile的相对路径)
4) ENV 表示指定环境变量
5) RUN 运行指定的命令,格式:RUN+ linux命令(RUN mkdir 创建目录)
6) EXPOSE 8080 指定暴露8080端口
7) ENTRYPOINT 进入点,后面跟的是需要执行的脚本