通过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. Flutter TickerProvider使用

    Flutter TickerProvider使用 当需要使用Animation controller时,需要在控制器初始化时传递一个vsync参数,此时需要用到TickerProvider,例如 cl ...

  2. 【前端】【H5 API】地理定位(获取经纬度)

    H5 API 地理定位 地理定位在日常生活中应用比较广泛,例如,互联网打车.在线地图等.在HTML 5的规范中,增加了获取用户地理位置信息的接口Geolocation,开发者可以通过经纬度来获取用户的 ...

  3. 比特币源码分析--深入理解区块链16.Base58编码和解码

    比特币源码分析--深入理解区块链16.Base58编码和解码   Base58是比特币中使用的一种独特编码方式,它主要用于比特币的钱包地址,在前面文章已经介绍过如何通过椭圆曲线方程算法,通过私钥来生成 ...

  4. Ubuntu下安装和开启telnet

      安装命令如下 sudo apt-get install openbsd-inetd sudo apt-get install telnetd sudo /etc/init.d/openbsd-in ...

  5. Idea如何关闭单词拼写检查

    打开Intellij Idea,在代码中输入lisi或zhangsan单词,可见这两个单词下面出现了绿色波浪线,表明词库中找不到这两个单词 2 鼠标移到波浪线上,可以看到如下提示信息,点击[more] ...

  6. 基于极坐标参数方程的直线Hough变换

  7. Object.freeze冻结属性和v-if结合requestAnimationFrame分帧渲染解决白屏

    计算100W条数据的长度造成2s延迟 <template> <div> <h1>数据总长度{{ arrList.length }}</h1> </ ...

  8. 【译】GitHub Copilot Free 在 Visual Studio 中

    可能您还没有听说过,GitHub 刚刚宣布了 Copilot Free(免费版)!好消息是:您现在已经可以在 Visual Studio 中开始使用 Copilot Free 了.它现在已经可用了,我 ...

  9. document.querySelector 有多个类 的情况

    document.querySelector 有多个类 document.querySelector 方法用于返回文档中匹配指定 CSS 选择器的第一个元素.如果要查询具有多个类的元素,可以将它们作为 ...

  10. 第五章 dubbo源码解析目录

    第十章 dubbo线程模型 一 netty的线程模型 在netty中存在两种线程:boss线程和worker线程. 1 boss线程 作用: accept客户端的连接: 将接收到的连接注册到一个wor ...