Docker应用-使用Dockerfile创建镜像

这篇具有很好参考价值的文章主要介绍了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      # 构建的时候设置环境变量

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

简单来说:通过这个dockerfile脚本可以生成镜像,镜像是一层一层的,脚本的命令是一行一行的,每个命令对应的都是一层镜像。如下图:
Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

初识dockerfile

新建dockerfile文件

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

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

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

启动容器

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

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

查看容器基本信息

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

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

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

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

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

Dockerfile制作Tomcat镜像

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

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

  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          
    

    Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

  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>

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

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

外网访问

Docker应用-使用Dockerfile创建镜像,docker,docker,容器,运维

项目部署成功,可以直接访问!文章来源地址https://www.toymoban.com/news/detail-831823.html

到了这里,关于Docker应用-使用Dockerfile创建镜像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker容器:docker镜像的三种创建方法及dockerfile案例

    目录 一、基于现有镜像创建 1、创建启动镜像 2、生成新镜像 二、基于本地模板创建  1、OPENVZ 下载模板 2、导入容器生成镜像 三、基于dockerfile创建  1、dockerfile结构及分层 2、联合文件系统 3、docker镜像加载原理 4、dockerfile操作常用的指令 (1)FROM指令 (2)MAINTAINER 指令 (3)RUN指令

    2023年04月20日
    浏览(48)
  • Docker容器学习:Dockerfile制作Web应用系统nginx镜像

    目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像  4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 1.文件内容需求: 基于centos基础镜像。 指定作者信息。 安装nginx服

    2024年02月11日
    浏览(55)
  • Docker容器化技术(使用Dockerfile制作镜像)

    Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在

    2024年03月19日
    浏览(41)
  • 【Docker】初识 Docker,Docker 基本命令的使用,Dockerfile 自定义镜像的创建

    在部署大型项目时,常常面临多组件、复杂的依赖关系和不同环境之间的差异,这些因素可能导致以下问题: 复杂的依赖关系: 由于项目组件众多,各个组件之间的依赖关系变得复杂,容易出现版本不匹配或兼容性问题。 兼容性问题: 项目在不同的环境中可能会遇到兼容性

    2024年02月05日
    浏览(45)
  • SpringBoot项目部署(Docker)——通过Dockerfile将打包好的jar包创建成镜像 & 在IDEA中配置docker,一键启动容器 & 用swagger进行测试

    1.Dockerfile命令初识,CMD…; 2.idea配置docker,图形化界面; 3.编写Dockerfile把jar包制作成镜像,并用idea一键生成和启动容器; 4.在Linux中测试,在宿主机用swagger进行测试; SpringBoot项目部署(jar包)——项目用maven打包成jar包 windows + Linux平台运行 Linux安装java 遇到的问题 Docker是一

    2024年02月05日
    浏览(40)
  • Docker:使用dockerFile创建镜像(war包和jar包)

    1、使用war包打镜像 (1)在war的当前路径下,新建一个文件——Dockerfile (2)编辑Dockerfile文件    vim Dockerfile Dockerfile文件内容: FROM java:8                # 选择项目中要求的版本 MAINTAINER ylb             # 作者 WORKDIR /穿件文件夹的路径    # 选择项目中要求的

    2024年02月15日
    浏览(36)
  • 案例:Docker 镜像的创建及使用(commit与dockerfile方式)

    我要将一个包含nginx的容器做成一个镜像,供其他人使用,这样其他人就不必再执行nginx安装等操作。 首先,还是启动一个容器: 命名为n1。 然后在容器内部安装nginx: 这里yum源出现问题: 解决看这里 安装成功并启动运行: 在另一个终端,查看nginx情况: 然后看到 ip是 17

    2024年02月14日
    浏览(27)
  • 【云原生】Docker镜像的创建 Dockerfile 多阶段构建原理和使用场景

    创建镜像有三种方法,分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 (1)首先启动一个镜像,在容器里做修改  docker run -it --name web centos:7 /bin/bash     #启动容器  ​  yum install -y epel-release  #安装epel源  yum install -y nginx         #安装ng

    2024年02月12日
    浏览(40)
  • 如何在 Linux 命令行下玩转 Docker——如何使用 Dockerfile 来构建和运行容器镜像

    作者:禅与计算机程序设计艺术 Docker 是一款开源的容器化技术,它利用 Linux 内核的容器特性,将应用部署到独立的进程环境中。基于容器技术可以极大地提高开发者和运维人员的效率,降低部署、测试和生产环节中的成本,有效地实现云计算资源的弹性伸缩。 本文主要介绍

    2024年02月07日
    浏览(41)
  • Docker学习入门(二):常用软件安装、掌握Docker迁移与备份、运用Dockerfile编写创建容器的脚本、搭建与使用docker私有仓库;

    Docker的学习目标: 4.掌握Tomcat Nginx等软件的常用的安装 5.掌握Docker迁移与备份相关命令 6.能够运用Dockerfile编写创建容器的脚本 7.能够搭建与使用docker私有仓库 8.学习总结 1.MYSQL的部署     (1)拉取mysql镜像          docker pull centos/mysql-57-centos7               (2)创建容

    2024年02月21日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包