通过DockerFile可以生成一个镜像

一、DockerFile的介绍

狂神:dockerfile是用来构建docker镜像的文件命令参数脚本。

狂神:dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件

狂神:Docker镜像逐渐成为企业交付的标准,必须要掌握!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品。

DockerContainer:容器就是镜像运行起来提供服务的。

二、DockerFile的指令

指令 说明
FROM 设置镜像使用的基础镜像
MAINTAINER 设置镜像的作者
RUN 编译镜像时运行的脚本
CMD 设置容器的启动命令
LABEL 设置镜像的标签
EXPOSE 设置镜像暴露的端口
ENV 设置容器的环境变量
ADD 编译镜像时复制文件到镜像中
COPY 编译镜像时复制文件到镜像中
ENTRYPOINT 设置容器的入口程序
VOLUME 设置容器的挂载卷
USER 设置运行RUN CMD ENTRYPOINT的用户名
WORKDIR 设置RUN CMD ENTRYPOINT COPY ADD指令的工作目录
ARG 设置编译镜像时加入的参数
ONBUILD 设置镜像的ONBUILD指令
STOPSIGNAL 设置容器的退出信号量

2.1、CMD和ENTRYPOINT的区别

CMD:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

(1)编写dockerfile并构建镜像,之后启动镜像;

(2)直接运行镜像,会执行CMD处配置的命令。如果执行docker run 2b06f9641629 -l会报错。

(3)追加参数会报错:docker run 2b06f9641629 -l

ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令

(1)编写dockerfile:dockerfile-entrypoint-test

FROM centos
ENTRYPOINT ["ls","-a"]

(2)构建镜像:docker build -f dockerfile-entrypoint-test -t entrypointtest .

(3)启动镜像:docker images | grep entrypoint

(4)追加参数:docker run a58b53c50da3 -l

三、DockerFile构建过程

3.1、docker file语法规范

1、每个保留关键字(指令)都必须是大写字母

2、执行从上到下顺序执行

3、# 表示注释

4、每一个指令都会创建一个新的镜像层,并提交

示例:centos的dockerfile

FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c7-docker.tar.xz /
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-03-04" # Volumes for systemd
# VOLUME ["/run", "/tmp"] # Environment for systemd
# ENV container=docker # For systemd usage this changes to /usr/sbin/init
# Keeping it as /bin/bash for compatability with previous
CMD ["/bin/bash"]

3.2、docker file构建步骤

(1)编写一个dockerfile文件

(2)docker build构建成为一个镜像

(3)docker run运行镜像

(4)docker push发布镜像(DockerHub、阿里云镜像仓库)

(1)编写dockerfile文件:dockerfile1

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash

(2)docker build构建成为一个镜像:harleycentos:1.0

docker build -f dockerfile1 -t harleycentos:1.0 .

mydockerfile-centos:dockerfile文件路径

mycentos:0.1镜像名

(3)docker run运行镜像:docker run -it harleycentos:1.0 bash

(4)可以使用docker inspect看到demo中的挂载属于匿名挂载

(5)docker push发布镜像

3.3、制作一个centos镜像

(1)编写dockerfile文件:mydockerfile

# 以哪个镜像作为基础
FROM centos
MAINTAINER harley<hhl686666@163.com> # 设置环境变量MYPATH
ENV MYPATH /usr/local
# 设置工作目录(docker run -it运行镜像之后所在的目录)
WORKDIR $MYPATH # 安装vim、net-tools
RUN yum -y install vim
RUN yum -y install net-tools # 暴露80端口
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash

(2)构建镜像:docker build -f mydockerfile -t mycentos:0.1 .

— 要养成终身学习的习惯 —

docker - [11] 数据卷之DockerFile的更多相关文章

  1. Docker容器数据卷-Volume详解

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume).数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享.数据 ...

  2. docker基础---数据卷volumes

    1.数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 卷会一直存在 ...

  3. 5、docker容器数据卷: -v添加共享传递容器数据卷

    1.是什么 1.docker理念 先来看看Docker的理念:*  将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的*  容器之间希望有可能共享数据 2.保 ...

  4. Docker学习笔记 - Docker的数据卷

    一.什么是数据卷? 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据 ...

  5. docker之数据卷管理

    转自:https://www.cnblogs.com/jsonhc/p/7777811.html docker之数据卷的备份和还原 1.现在利用镜像创建一个nginx的服务容器,并挂载一个数据卷 [r ...

  6. Docker数据管理(数据卷&数据卷容器)

    生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷(Data Volumes):容 ...

  7. docker定义数据卷及数据卷的备份恢复

    前言:生产环境中使用docker时,往往需要对数据进行持久化(只有把容器导出为镜像,才能够保存写的数据,否则容器删除或者停止,所有数据都会没有),或者需要在多个容器之间进行数据共享,这必然涉及容器的数 ...

  8. docker.[7] 数据卷容器

    docker.[7] 数据卷容器 挂在数据卷容器的方法: # docker run --volumes-from [Container Name]

  9. docker.[6] 数据卷

    docker.[6] 数据卷 操作指令: # docker run -v /data1:/data2 -i -t centos /bin/bash 参数说明: data1 : 这里指的是宿主机的目录( ...

  10. docker挂载数据卷

    1.Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷,简单的理解就是将数据持久化的工具. 2.在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们 ...

随机推荐

  1. nginx-tengine-invalid IPv6 address in resolver-解析器中无效的IPv6地址

    问题描述:解析器中无效的IPv6地址 [root@dm ~]# nginx -t nginx: [emerg] invalid IPv6 address in resolver "[fe80 ...

  2. 【Vue】Vue项目创建的两种方式

    目录 0.提前准备 (2)webpack (3)vue全局脚手架 查看已安装版本 (4)CNPM 1.创建Vue项目的两种方式 (1)Vue2.x项目 (2)创建Vue3.x项目 (1)使用vue c ...

  3. 跨语言国密SM4加解密实战:Java与Golang无缝对接

    概述 本文详细介绍了如何在Java和Golang中使用SM4算法进行对称加密和解密操作.通过使用CBC模式和PKCS5填充,成功实现了跨语言的数据加密和解密.无论是Java加密后在Golang解密,还 ...

  4. Spring Boot中通过RabbitTemplate主动pull(get)消息的例子

    import java.util.Properties; import java.util.function.Consumer; import org.slf4j.Logger; import org ...

  5. Mac下如何添加User到group中

    原因: 使用mac的时候需要像linux一样对用户和群组进行操作,但是linux使用的gpasswd和usermod在mac上都不可以使用,mac使用dscl来对group和user操作. 介绍: $ ...

  6. NoSuchAlgorithmException

    今天在写UT时遇到了下面的问题: 1. 使用的powermock来处理static方法; 2. 静态方法里的却有使用到org.apache.http.client(4.3.1)的方法 异常如下: Ca ...

  7. Pycharm IDE中导入和移除python项目

    1.Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: ...

  8. 微信团队分享:微信后端海量数据查询从1000ms降到100ms的技术实践

    本文由微信技术团队仇弈彬分享,原题"微信海量数据查询如何从1000ms降到100ms?",本文进行了内容修订和排版优化. 1.引言 微信的多维指标监控平台,具备自定义维度.指标的监 ...

  9. biancheng-Maven依赖

    目录http://c.biancheng.net/maven2/profile.html 1Maven简介2Maven安装与配置3Maven POM4创建Maven项目5Maven项目的构建与测试6M ...

  10. Qml 中实现时间轴组件

    [写在前面] 时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件. 本文将介绍如何使用 Qml 实现一个灵活且可定制的时间轴组件,并探讨其设计思路和实现细节. [正文开始] 效果图 组件概述 ...