我们使用apache-tomcat-8.0.50.tar.gz和jdk-8u172-linux-x64.tar.gz来创建一个名字为tomcat8.0.50-jdk8的镜像
我们在服务器中创建一个文件夹,dockfile,然后将apache-tomcat-8.0.50.tar.gz和jdk-8u172-linux-x64.tar.gz放到该文件夹中,并编写Dockfile文件和tomcat.sh脚本管理tomcat的启动、关闭、重启
-rw-r--r-- 1 root root 9417189 Sep 19 15:12 apache-tomcat-8.0.50.tar.gz
-rw-r--r-- 1 root root 644 Sep 19 15:56 Dockerfile
-rw-r--r-- 1 root root 190921804 Sep 19 15:21 jdk-8u172-linux-x64.tar.gz
-rw-r--r-- 1 root root 308 Sep 19 15:53 tomcat.sh
一、编写Dockerfile
#基础镜像
FROM ubuntu
##设置维护者信息
MAINTAINER prince "yaoshengting7@163.com"
##安装jdk
COPY jdk-8u172-linux-x64.tar.gz /tmp/jdk-8u172-linux-x64.tar.gz
RUN cd /tmp && tar xf jdk-8u172-linux-x64.tar.gz -C /usr/local/ && rm -rf /tmp/jdk-8u172-linux-x64.tar.gz
##设置环境
ENV JAVA_HOME /usr/local/jdk1.8.0_172
ENV PATH $PATH:/$JAVA_HOME/bin
#ENV TZ=Asia/Shanghai
##检索软件包的新列表 安装curl
RUN apt-get update && apt-get install -y curl
##安装 tomcat
COPY apache-tomcat-8.0.50.tar.gz /tmp/apache-tomcat-8.0.50.tar.gz
RUN cd /tmp && tar xf apache-tomcat-8.0.50.tar.gz && mv apache-tomcat-8.0.50 /usr/local/apache-tomcat-8.0.50 && rm -rf /tmp/apache-tomcat-8.0.50.tar.gz
##添加tomcat脚本
ADD tomcat.sh /usr/local/
RUN chmod 755 /usr/local/tomcat.sh
#设置时区
#这个设置时区的方式已经不能使用了
#RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
##现在使用ls来设置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
##Expose ports
EXPOSE 8080
##配置容器启动后执行的命令
ENTRYPOINT /usr/local/tomcat.sh start && tail -f /usr/local/apache-tomcat-8.0.50/logs/catalina.out
#CMD ["/usr/local/tomcat.sh","start"]
编写tomcat的启动、关闭、重启管理脚本
#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.8.0_172
export TOMCAT_HOME=/usr/local/apache-tomcat-8.0.50
case $1 in
start)
sh $TOMCAT_HOME/bin/startup.sh
;;
stop)
sh $TOMCAT_HOME/bin/shutdown.sh
;;
restart)
sh $TOMCAT_HOME/bin/shutdown.sh
sh $TOMCAT_HOME/bin/startup.sh
;;
esac
exit 0
二、创建镜像
进入到Dockerfile所在的目录,执行docker build -t yaoshengting/tomcat8.0.50-jdk8:v1.0 . 来创建镜像
注意:命令的最后有个小点点,不能忽略了,代表dockfile在当前目录下。
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]# docker build -t yaoshengting/tomcat8.0.50-jdk8:v1.0 .
Sending build context to Docker daemon 200.3MB
Step 1/10 : FROM centos
---> 67fa590cfc1c
Step 2/10 : MAINTAINER prince "yaoshengting7@163.com"
---> Running in 1cb32b20cd74
Removing intermediate container 1cb32b20cd74
---> 4a4068197aca
Step 3/10 : COPY jdk-8u172-linux-x64.tar.gz /tmp/jdk-8u172-linux-x64.tar.gz
---> 30b023ed3432
Step 4/10 : RUN cd /tmp && tar xf jdk-8u172-linux-x64.tar.gz -C /usr/local/ && rm -rf /tmp/jdk-8u172-linux-x64.tar.gz
---> Running in 9b2d826da0bb
Removing intermediate container 9b2d826da0bb
---> 049a9bc455dc
Step 5/10 : ENV JAVA_HOME /usr/local/jdk1.8.0_172
---> Running in baae5a0afbb9
Removing intermediate container baae5a0afbb9
---> c2a0f5420a18
Step 6/10 : ENV PATH $PATH:/$JAVA_HOME/bin
---> Running in 15de44e33f84
Removing intermediate container 15de44e33f84
---> 309d484eaa8a
Step 7/10 : COPY apache-tomcat-8.0.50.tar.gz /tmp/apache-tomcat-8.0.50.tar.gz
---> 381683a8db6f
Step 8/10 : RUN cd /tmp && tar xf apache-tomcat-8.0.50.tar.gz && mv apache-tomcat-8.0.50 /usr/local/ && rm -rf /tmp/apache-tomcat-8.0.50.tar.gz
---> Running in 1e91d4f757cb
Removing intermediate container 1e91d4f757cb
---> 5540a77ae710
Step 9/10 : EXPOSE 8080
---> Running in 42b94dbc020c
Removing intermediate container 42b94dbc020c
---> d8fc7815f157
Step 10/10 : ENTRYPOINT tomcat.sh start && tail -f /usr/local/apache-tomcat-8.0.50/logs/catalina.out
---> Running in 7cc77372cd8e
Removing intermediate container 7cc77372cd8e
---> 5f8c840d290b
Successfully built 5f8c840d290b
Successfully tagged yaoshengting/tomcat8.0.50-jdk8:v1.0
上面是执行创建镜像的命令后打出的信息,我们看到镜像已经创建成功,镜像id为5f8c840d290b
我们执行docker images查看本服务器上的镜像,出现了刚才创建成功的镜像
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yaoshengting/tomcat8.0.50-jdk8 v1.0 5f8c840d290b 29 seconds ago 803MB
tomcat latest 365b0a528e2e 5 days ago 506MB
centos latest 67fa590cfc1c 4 weeks ago 202MB
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]#
三、根据镜像创建容器并运行
执行 docker run -it -p:8889:8080 5f8c
看到容器启动成功后,我们通过8889端口访问服务器(要保证8889端口可以访问),如下图,表明制作的tomcat镜像成功的运行了。
这里略过docker命令的讲解。
四、将镜像推送到DockerHub上
首先需要有一个DockerHub的帐号,我申请了一个Public的repo,免费的,和GitHub类似,public的免费,private的要钱。网址为https://hub.docker.com/
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yaoshengting
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]#
执行docker push yaoshengting/tomcat8.0.50-jdk8:v1.0 ,将镜像推送到DockerHub上
yaoshengting表示DockerHub上的用户名,tomcat8.0.50-jdk8是repo的名字,v1.0表示tag号
若在创建docker image的时候,-t选项不是yaoshengting/tomcat8.0.50-jdk8:v1.0,而是tomcat8.0.50-jdk8:v1.0,那么即使用yaoshengting用户名登录了DockerHub,最后也无法push的;因此在创建镜像的时候,一定要在前面加上你在DockerHub上的用户名,如yaoshengting
执行后,开始进行推送,下面表示推送中
The push refers to repository [docker.io/yaoshengting/tomcat8.0.50-jdk8]
39429097b3c0: Pushing [===========> ] 3.112MB/13.57MB
38eb26903728: Pushing [=============> ] 2.557MB/9.417MB
985538b9b8d7: Pushing [> ] 4.368MB/387.4MB
8d44bbdc55be: Pushing [> ] 2.754MB/190.9MB
877b494a9f30: Pushing [=> ] 5.945MB/201.9MB
推送成功
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]# docker push yaoshengting/tomcat8.0.50-jdk8:v1.0
The push refers to repository [docker.io/yaoshengting/tomcat8.0.50-jdk8]
39429097b3c0: Pushed
38eb26903728: Pushed
985538b9b8d7: Pushed
8d44bbdc55be: Pushed
877b494a9f30: Pushed
v1.0: digest: sha256:24fab6be1a840736dff1a4ad702381a746dd5be1ddbbd4702e45a1322d6fe4b6 size: 1377
[root@iZbp13pwlxqwiu1xxb6szsZ dockerfile]#
登录到我们的 DockerHub上,在仓库中就可以找到这个镜像