Docker应用-使用Dockerfile创建镜像

Docker应用-使用Dockerfile创建镜像

基本结构

Dockerfile是由一行行命令语句组成并且支持以#开头的注释行。一般而言Dockerfile分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时的执行指令。比如:

# This dockerfile uses the ubuntu image
#VERSION 2 - EDITION
#Author:docker_user
#Command format:Instruction [arguments / command] ..
#第一行必须指定基于的基础镜像
FROM ubuntu
# 维护者信息
MAINTAINER docker_user docker_user@email.com
# 镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/raring main unniverse" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemin off;" >> /etc/nginx/nginx.conf
# 容器启动时执行指令
CMD /usr/sbin/nginx

其中,一开始必须指明所基于的镜像名称,接下来一般会说明维护者的信息。后面是镜像的操作指令,例如RUN指令,RUN指令将对镜像执行跟随的命令。每运行一条RUN指令,镜像添加新的一层并提交。最后是CMD指令,来指定运行容器时的操作命令。以下是一些常用指令:

ONBUILD  #当构建一个被集成的dockerfile这个时候就会运行ONBUILD出3发指令
COPY     #类似add,将我们的文件拷贝到镜像中
EXPOSE   # 暴露端口配置,也可以是用-p
ENV      # 构建的时候设置环境变量

在这里插入图片描述

简单来说:通过这个dockerfile脚本可以生成镜像,镜像是一层一层的,脚本的命令是一行一行的,每个命令对应的都是一层镜像。如下图:
在这里插入图片描述

初识dockerfile

新建dockerfile文件

#文件中的内容,指令都是大写
FROM centos
VOLUME ["valume01","volume02"]
CMD echo "....end...."
CMD /bin/bash

# 通过该文件构建镜像
docker build -f dockerfile1 -t test/centos .

在这里插入图片描述

启动容器

# 通过刚才新建的镜像启动容器
docker run -it cb1617765743 /bin/bash

在这里插入图片描述

查看容器基本信息

以上可以看到通过dockerfile构建的镜像成功挂载了两个数据卷,这两个数据卷一定有一个同步的目录!在上一篇blog里面我们提到过,没有指定宿主机的挂载目录只指定了容器的目录这个叫匿名挂载,匿名挂载的文件路径在宿主机中:/var/lib/docker/volumns/***/_data目录下

# 通过docker inspect命令可以查看容器的基本信息
docker inspect 59cbcddbfefe

在这里插入图片描述

# 通过docker history imageId可以查看该镜像的构建步骤

在这里插入图片描述

Dockerfile制作Tomcat镜像

  1. 准备镜像文件:tomcat压缩包,jdk压缩包

在这里插入图片描述

  1. 编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,不需要-f指定

    #基础镜像为Centos
    FROM centos
    #维护者
    MAINTAINER  this is tomcat test image
    
    #创建文件夹/tomcat
    RUN mkdir -p /usr/local/tomcat
    
    #复制并解压apache-tomcat-7.0.92.tar.gz包到/tomcat目录下
    ADD apache-tomcat-9.0.85.tar.gz /usr/local/tomcat
    #复制并解压jdk-8u391-linux-x64.tar.gz包到/tomcat目录下
    ADD jdk-8u391-linux-x64.tar.gz /usr/local/tomcat
    
    #添加JAVA环境变量
    ENV JAVA_HOME /usr/local/tomcat/jdk1.8.0_391
    ENV CLASS_PATH $JAVA_HOME/lib:$JAVA_HOME/jre/lib
    ENV PATH $PATH:$JAVA_HOME/bin
    
    #暴露端口
    EXPOSE 8080 
    
    #启动tomcat并持续输出日志防止容器退出
    ENTRYPOINT /usr/local/tomcat/apache-tomcat-9.0.85/bin/startup.sh && /bin/bash && tail -f /usr/local/tomcat/apache-tomcat-9.0.85/logs/catalina.out 
    
    
    
  2. 构建镜像

    [root@VM-4-17-centos tomcat]# docker build -t tomcat:9.0.85 .
    [+] Building 84.5s (11/11) FINISHED                                             docker:default
     => [internal] load build definition from Dockerfile                                      0.0s
     => => transferring dockerfile: 731B                                                      0.0s
     => [internal] load .dockerignore                                                         0.1s
     => => transferring context: 2B                                                           0.0s
     => [internal] load metadata for docker.io/library/centos                            5.3s
     => [1/6] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a  47.6s
     => => resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5  0.0s
     => => sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487 1.20kB / 1.20kB  0.0s
     => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b53 529B / 529B  0.0s
     => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16 2.75kB / 2.75kB  0.0s
     => => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f255373 76.10MB / 76.10MB  42.8s
     => => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3b  4.4s
     => [internal] load build context                                                         0.0s
     => => transferring context: 303B                                                         0.0s
     => [2/6] COPY readme.txt /usr/local/readme.txt                                           0.8s
     => [3/6] ADD jdk-8u391-linux-x64.tar.gz /usr/local                                       4.2s
     => [4/6] ADD apache-tomcat-9.0.85.tar.gz /usr/local                                      0.3s
     => [5/6] RUN yum -y install vim                                                         24.4s
     => [6/6] WORKDIR /usr/local                                                              0.1s
     => exporting to image                                                                    1.6s 
     => => exporting layers                                                                   1.6s 
     => => writing image sha256:b74793dde9bc6f52c7147fb4432639ab14c64eb1408a631db57eda82e299  0.0s
     => => naming to docker.io/library/diytomcat          
    

    在这里插入图片描述

  3. 启动测试

    docker run -d -p 3366:8080 --name tomcat985 -v /home/tomcat/build/test:/usr/local/tomcat/apache-tomcat-9.0.85/webapps/test -v /home/tomcat/build/tomcatlogs:/usr/local/tomcat/apache-tomcat-9.0.85/logs tomcat:9.0.85
    
  4. 发布项目(由于做了数据卷挂载,我们在宿主机上的test目录下编写项目就可以发布)

#在挂载的test目录下新建WEB-INF文件夹,新建web.xml
<?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"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    
    
</web-app>
#在挂载test目录下新建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 holle world");
%>
</body>
</html>

访问容器后进入数据卷目录发现我们在宿主机的挂载目录下新建的文件已经同步

在这里插入图片描述

外网访问

在这里插入图片描述

项目部署成功,可以直接访问!

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉霍拉卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值