上一章我进行了数据卷的学习,这一章我就来总结对DockerFile的学习
下面是我找的两幅docker常用命令的简介图。大家可以好好看看有对命令的详细介绍。
可以看到ENTRYPOINT和CMD的功能描述几乎是一样的,但是他们还是有区别的,CMD的命令是执行最后一个,ENTRYPOINT命令则是追加。
所以这里我就通过编写DockerFile来演示他们的区别。
[root@VM-0-3-centos ~]# cd dockerFile/
[root@VM-0-3-centos dockerFile]# vim docker-test-cmd
[root@VM-0-3-centos dockerFile]# cat docker-test-cmd
FROM centos
CMD ["ls","-a"]
这样我们就创建好了一个dockerfile,很简单的一个dockerfile,这个的意思就是当我们运行这个镜像的时候自动ls -a
。我们接下来用build
命令来创建镜像。
docker build -f docker-test-cmd -t test01-cmd .
现在我们就创建好了。run一下试试。
现在我们在run命令后面加上一个-l
,理论上来说的话如果我们加上了一个-l
那么这个镜像在run的时候执行的命令应该是ls -a -l
对吧,我们试试看。
可以看到报错了,这是为什么呢,因为前面说了CMD
命令是只执行最后一项,所以当我们在run
的时候加上命令-l
的话实际镜像运行时执行的命令-l
替换了ls -a
,那么这时centos就无法识别-l
是什么意思了。而ENTRYPOINT
则是可以进行追加的,像这种情况entrypoint
就可以运行命令为ls -a -l
。这里就不对其再进行演示。
我们需要先去准备几个安装包,大家可以去官网上搜索,jdk下载,tomcat下载
下载完用xftp上传上去就行。
接下来就可以编写Dockerfile文件了
FROM centos:centos7
MAINTAINER Aasee<[email protected]>
COPY readme.txt /usr/local/readme.txt
#导入压缩包会自动解压
ADD apache-tomcat-9.0.63.tar.gz /usr/local/
ADD jdk-8u333-linux-x64.tar.gz /usr/local/
#安装vim
RUN yum -y install vim
#设置工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#jdk环境配置
ENV JAVA_HOME /usr/local/jdk1.8.0_333
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#tomcat环境配置
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.63
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.63
#配置path环境
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#暴露端口
EXPOSE 8080
# 启动tomcat和打印日志
CMD /usr/local/apache-tomcat-9.0.63/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.63/logs/catalina.out
我这的命名为官方推荐名Dockerfile。所以不需要再用-f来指定文件。直接可以用
docker build
来创建
docker build -t 命名 .
docker run -d -p 9090:8080 --name aaseetomcat -v /root/dockerFile/tomcat/test:/usr/local/apache-tomcat-9.0.63/webapps/test -v /root/dockerFile/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.63/logs aasee-tomcat01
这是我的命令你们也可以按自己需要改,相信看到这里,大部分命令大家都是能看懂的了。
可以看到运行成功并且也挂载成功了。访问页面看看
日志也能查看了。
再用
docker inspect 容器id
来看看卷数据是否绑定成功
让我们看看tomcatlogs里的目录是否挂载成功。
可以看到已经成功了
接下来我们就给他新建一个自定义网页试试看。由于我们已经通过卷挂载了
webapps/test
,所以我们可以直接在宿主机的test
目录下进行更改。同时也能反推看看两个目录是否卷挂载成功。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello world</title>
</head>
<body bgcolor="F6F3D6">
<!--用HTML语言向世界打声招呼吧!-->
<h1 align="center">Hello World</h1>
<p align="center">Aasee-Docker</p>
</body>
</html>
接着我们去看看页面的效果吧
当我们做好镜像之后要怎么给别人使用呢,有两种方法一种是打包到本地然后发给别人,另一种是上传到docker官方仓库或者是阿里云,腾讯云等这些大厂的官方仓库。但是由于docker官方仓库节点在国外,速度时好时坏的,而且操作都差不多,这里就以阿里云为例子(腾讯云相同操作)。
首先先登录阿里云。
直接搜索容器镜像服务,我们个人测试使用就直接用个人版就行,然后根据提示创建命令空间再创建镜像仓库选择本地仓库之后就可以看到push的教程了。
这些内容就大家自己去看了。官方的命令很详细了。根据官方的命令我们就能很容易得将镜像推送到官方仓库。
到这里我们就基本能独立构建镜像并且使用镜像用来搭建发布项目了!