DockerFile理解与应用
1.DockerFile是什么?
DockerFile是用来构建Docker镜像的构建文件,一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
我们可以通过dockerfile来构建docker镜像。
如tomcat的dockerfile如下:
FROM adoptopenjdk:8-jdk-hotspot
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6
EXPOSE 8080
CMD ["catalina.sh", "run"]
2.DockerFile解析
1)基础结构由大写的保留字指令+参数构成。
2)指令从上到下顺序执行。
3)#表示注解。
4)每条指令都会创建新的镜像层,并对镜像进行提交。
3.DockerFile保留字指令解析
1)FROM
基础镜像,当前新建的镜像是基于哪个镜像的。
2)MAINTAINER
镜像维护者的姓名邮箱主页啥的
3)RUN
容器构建的时候需要的命令
4)EXPOSE
当前容器对外暴露的端口
5)WORKDIR
指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
6)ENV
镜像构建过程中需要设置的环境变量
7)ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
8)COPY
将宿主机目录下的文件拷贝进镜像,或者拷贝出来
9)VOLUME
容器数据卷,用于数据保存和持久化工作。可以将宿主机目录和容器绑定,这样两个文件夹下的文件都能共通,如tomcat镜像的项目部署文件夹,映射到宿主机后,部署项目不需要进入镜像,直接部署到宿主机对应目录就可以了。
10)CMD
制动一个容器启动时要运行的命令,dockerfile中可以有多个cmd命令,但是只有最后一个会生效,之前的都会被覆盖不会被执行。
11)ENTRYPOINT
指定一个容器启动时要运行的命令,和cmd一样,但是可以指定多个命令,在容器启动时,会顺序执行。
12)ONBUILD
当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后赴京向的onbuild被处罚
4.示例
1)基于centos构建一个能使用vim命令和ifconfig命令的,工作目录是/usr/locald的自定义的centos。
a.自定义的dockerfile
FROM centos
MAINTAINER panda_zhu@qq.com
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "sucess-----------ok"
CMD /bin/bash
b.执行以下命令,将dockerfile构建成docker镜像
docker build -f ./mydockerfile -t mycentos:1.1 .
./mydockerfile是新写的dockerfile
mycentos:1.1 是新镜像的名称和版本标签
最后还有一个点别忘了
弹出的日志如下:
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 0d120b6ccaa8
Step 2/10 : MAINTAINER panda_zhu@qq.com
---> Running in e72b7682d2a1
Removing intermediate container e72b7682d2a1
---> 0c169e4db377
Step 3/10 : ENV MYPATH /usr/local
---> Running in 4bcac118de46
Removing intermediate container 4bcac118de46
---> 361b12647c93
Step 4/10 : WORKDIR $MYPATH
---> Running in 1f7a11a85882
Removing intermediate container 1f7a11a85882
---> c8ca5793760e
Step 5/10 : RUN yum -y install vim
---> Running in c10b463ce61a
CentOS-8 - AppStream 4.9 MB/s | 5.8 MB 00:01
CentOS-8 - Base 942 kB/s | 2.2 MB 00:02
CentOS-8 - Extras 11 kB/s | 8.6 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-13.el8 AppStream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 AppStream 39 k
vim-common x86_64 2:8.0.1763-13.el8 AppStream 6.3 M
vim-filesystem noarch 2:8.0.1763-13.el8 AppStream 48 k
which x86_64 2.21-12.el8 BaseOS 49 k Transaction Summary
================================================================================
Install 5 Packages Total download size: 7.8 M
Installed size: 31 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 450 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 2.4 MB/s | 48 kB 00:00
(3/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm 8.4 MB/s | 1.4 MB 00:00
(4/5): which-2.21-12.el8.x86_64.rpm 496 kB/s | 49 kB 00:00
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm 9.6 MB/s | 6.3 MB 00:00
--------------------------------------------------------------------------------
Total 3.5 MB/s | 7.8 MB 00:02
warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - AppStream 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-13.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-13.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-13.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-13.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-13.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-13.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5 Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-13.el8.x86_64
vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch
which-2.21-12.el8.x86_64 Complete!
Removing intermediate container c10b463ce61a
---> e13ba4c98f4e
Step 6/10 : RUN yum -y install net-tools
---> Running in c44679e1b6f8
Last metadata expiration check: 0:00:10 ago on Sun Dec 6 09:09:43 2020.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.51.20160912git.el8 BaseOS 323 k Transaction Summary
================================================================================
Install 1 Package Total download size: 323 k
Installed size: 1.0 M
Downloading Packages:
net-tools-2.0-0.51.20160912git.el8.x86_64.rpm 1.8 MB/s | 323 kB 00:00
--------------------------------------------------------------------------------
Total 427 kB/s | 323 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : net-tools-2.0-0.51.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 Installed:
net-tools-2.0-0.51.20160912git.el8.x86_64 Complete!
Removing intermediate container c44679e1b6f8
---> e4635d92ce93
Step 7/10 : EXPOSE 80
---> Running in 80175acc1bb0
Removing intermediate container 80175acc1bb0
---> 648de32c0418
Step 8/10 : CMD echo $MYPATH
---> Running in 4bef6d09313d
Removing intermediate container 4bef6d09313d
---> ecf14f315d3e
Step 9/10 : CMD echo "sucess-----------ok"
---> Running in 2d6a349f1799
Removing intermediate container 2d6a349f1799
---> e01edd932e43
Step 10/10 : CMD /bin/bash
---> Running in 9b09a2ac5278
Removing intermediate container 9b09a2ac5278
---> 7c4be87820a6
Successfully built 7c4be87820a6
Successfully tagged mycentos:1.1
可以看到,每一步都执行一条dockerfile中的命令。
c.使用docker images查询镜像,自定义的镜像打好了。

d.启动镜像,可以看到工作目录已经更改了

vim和ifconfig也可以使用了。

DockerFile理解与应用的更多相关文章
- Docker学习笔记之通过 Dockerfile 创建镜像
0x00 概述 由于 Docker 镜像的结构优势,使它的占用空间远小于普通的虚拟机镜像,而这就大幅减少了 Docker 镜像在网络或者其他介质中转移所花费的时间,进而提高了我们进行迁移部署的效率.不 ...
- docker容器dockerfile详解
docker公司在容器技术发展中提出了镜像分层的理念,可以说也是这个革命性的理念让原本只不过是整合linux内核特性的容器,开始野蛮生长. docker通过UnionFS联合文件系统将镜像的分层实现合 ...
- Docker结合.Net Core初步使用
Docker是一项比较流行的容器化技术,可以让开发者将应用以及应用依赖的环境,依赖包一起打包到容器中,然后部署容器到生产环境就可以了,解决了应用程序部署到不同服务器环境带来的问题(很多开发人员都遇到过 ...
- 使用Dockerfile构建镜像命令自己的理解
1.FROM 基于那个基础命令开始构建镜像,我的理解就是选择一个操作系统 2.CMD 里面放的是指定一个容器启动时要运行的命令 3.ENTRYPOINT 类似于CDM命令,不过 docker run ...
- 理解Docker(5):Docker 网络
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- 理解Docker(2):Docker 镜像
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- 理解Docker容器的进程管理
摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)&qu ...
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- 【云计算】docker的小知识,帮你更深入理解容器技术
关于docker的15个小tip 1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu e ...
随机推荐
- php 之 excel导出导入合并
<?php class Excel extends Controller { //直属高校 public function __construct() { parent::Controller( ...
- 获取tp3.2 public所在的路径
//返回服务器真实路径 $Absolute_Path=$_SERVER['SCRIPT_FILENAME']; //截取index.php $Absolute_Path=substr($Absolut ...
- Spider_知识目录_基础
知识目录 静态网页抓取 Spider_基础总结1_Request(get/post__url传参_headers_timeout)+Reponse Spider_基础总结2_Requests异常 Sp ...
- .NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
随着2020进入4季度,.NET5正式版也已经与大家见面了.不过,尽管 .NET Core发布已经有四五年的时间,但到目前为止,依旧有很多.NET开发者在坚守者.NET4,原因不尽相同,但最大的问题可 ...
- 【webSocket】实现原理
服务端文件: import base64 import hashlib import socket # 将请求头格式化成字典 def get_headers(data): ""&q ...
- linux netfilter 五个钩子点
参考http://www.linuxtcpipstack.com/685.html#NF_INET_PRE_ROUTING https://opengers.github.io/openstack/o ...
- 多项目部署在同一个GitHub Pages
由于GitHub 的约定,一个账户只能拥有一个GitHub Pages,那么,如果你有多个想部署的静态网站(博客和文档等),它们是互相隔离的,如何用同一个GitHub账户进行部署呢? 从之前如何搭建G ...
- PIP安装Django
1. 2. 3.升级PIP 4. 原来我已经用pycharm装过了,囧~
- 新手避坑 -- 用 Jenkins +miniprogram-ci 自动构建微信小程序
先看看效果: 要实现这样的效果,需要下面3步: 1.下载 node 依赖包 miniprogram-ci,编写预览和上传功能 2. 登录微信公众平台, 下载项目的privateKey+添加代码上传IP ...
- Java 合并多个文件内容到一个文件(递归遍历某个文件夹下所有文件)
这段代码通过Java I/O流API实现将多个文件合并到一个文件中,输出为文本文件,提供一个支持语法高亮的网站,http://www.codeinword.com/ 适合粘贴代码到word文档,小巧实 ...