0
点赞
收藏
分享

微信扫一扫

Docker 中Dockerfile使用

栖桐 2022-03-23 阅读 134
dockerfile三步骤
1.编写dockerfile
说明:每条指令都必须大写字母 且后面必须跟随至少一个参数
指令从上至下顺序执行
#表示注释
每条指令都会创建一个新的镜像层 并对镜像进行提交

dockerfile 执行流程
1.从基础镜像运行一个容器
2.执行一条命令对容器作修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的容器
5.执行dockerfile的下一条指令 直到所有指令执行完成 形成新的镜像
2.docker build
3.docker run

1.Dockerfile体系结构

FROM:基础镜像,当前镜像是基于哪个镜像的
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构件时需要运行的命令
EXPOSE:当前容器对外暴露出的端口
WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录 没指定就是/ 一个落脚点
ENV:用来在构建镜像过程中设置环境变量
ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
比如:WORKDIR $MY_PATH
ADD:比COPY 多了可以解压缩
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY:只是拷贝
类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
例如:COPY src dest
COPY ["src","dest"]
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定一个容器启动时要执行的命令,
dockerfile中可以存在多个CMD,但是只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT:指定一个容器启动时要执行的命令,
和CMD一样,都是在指定容器启动程序和参数 CMD会被docker run之后的参数追加
ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发

2.案例

1.Base镜像(scratch)

Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

2.自定义镜像(mycentos)

示例1:自定义一个mycentos镜像

要求:更改登录后的默认路径

VIM编辑器集成在镜像中

可以查看网络配置ifconfig

1.编写dockerfile 文件 
vim Dockerfile 建立一个Dockerfile文件
代码如下

FROM centos
MAINTAINER 777888222@QQ.COM
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success-------OK"
CMD /bin/bash

2.构建
docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
#docker build -f dockerfile的存放路径 -t 新的镜像名字:TAG标签 最后有个点.
3.运行
docker run -it mycentos:1.3

4.列出镜像变更的历史
docker history 镜像ID

示例2:自定义一个tomcat镜像

1.建立一个目录存放Dockerfile文件
mkdir -p /mydocker/tomcat9
2.建立一个文件c.txt 一会会拷贝到tomcat 中 为了演示CAPY功能
touch c.txt
3.建立Dockerfile文件
vim Dockerfile
如下

#使用的基础镜像
FROM centos
MAINTAINER 333344@qq.com
#拷贝文件C.TXT 到/usr/local目录 并重命名为cincontainer.txt 并建立一个目录chenglei
COPY c.txt /usr/local/cincontainer.txt
RUN mkdir -p /usr/chenglei
#把javz和tomcat添加到容器中
ADD apache-tomcat-9.0.60.tar.gz /usr/local
ADD jdk-8u171-linux-x64.tar.gz /usr/local
# 设置工作路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置JAVA变量
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.60
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.60
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_HOME/bin
#暴露8080端口
EXPOSE 8080
#启动时运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.60/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.60/bin/catalina.sh",[run]]
CMD /usr/local/apache-tomcat-9.0.60/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.60/bin/logs/catalina.out


4.构建build
docker build -f /mydocker/tomcat9/Dockerfile -t chengleitomcat9:2.0 .
显示如下 构建完成
Successfully built 5d752f88b45d
Successfully tagged chengleitomcat9:2.0

5.查看IMAGES
docker images

[root@localhost tomcat9]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 798d1656acba Less than a second ago 698MB
chengleitomcat9 2.0 5d752f88b45d 28 seconds ago 635MB
6.运行自己构建的tomcat 并将test和logs目录 挂载
docker run -d -p 9080:8080 --name chengleitomcat09 -v /mydocker/tomcat9/test:/usr/local/apache-tomcat-9.0.60/webapps/test -v /mydocker/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.60/logs --privileged=true chengleitomcat9:2.0
7.验证
验证1
http://10.10.201.154:9080 可以访问并看到tomcat
验证2
挂载的目录test 和 tomcat9logs 也完成
[root@localhost tomcat9]# ls
apache-tomcat-9.0.60.tar.gz c.txt Dockerfile jdk-8u171-linux-x64.tar.gz test tomcat9logs
验证3
docker exec 9728ac95769a java -version
显示
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

示例3:发布部署 新的网站 一个页面

建立一个a.jsp

cd /mydocker/tomcat9/test

vi a.jsp

如下
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>JSP and servlet login</title>
<style>
.main {
float:left;
min-width:1200;
}
</style>
</head>
<body>
<div class="main">
<h1>请输入账号密码</h1>
<div class="logindiv">
<form id="loginid" action="login" method="post">
<span>请输入账号:</span><input type="text" name="account"><br>
<span>请输入账号:</span><input type="password" name="mypassword"><br>
<input type="submit" value="提交">
</form>
</div>
</div>
</body>
</html>


测试:http://10.10.201.154:9080/test/a.jsp






举报

相关推荐

0 条评论