使用Dockerfile创建镜像

Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile赖快速创建自定义的镜像.
Dockerfile由一行行命令组成,#开头为注释.

1:Dockerfile基础内容

1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令从上到下,顺序执行
3:#表示注释
4:每条RUN指令都会创建一个新的镜像层,并且提交

2:Dockerfile基本结构和指令

Dockerfile分为四部分:基础镜像信息维护者信息镜像操作指令容器启动时执行指令

指令 解释
FROM 指明当前镜像是基于哪个镜像
MAINTAINER 镜像维护者姓名和邮箱地址
ENV 设置环境变量
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录
ADD 将宿主机目录下的文件拷贝进镜像,并自动处理URL和解压缩tar包
COPY 拷贝文件和目录到镜像中
VOLUME 容器数据卷
RUN 镜像构建时运行的命令,每条RUN指令都会创建一个新的镜像层,并且提交
EXPOSE 容器对外暴露的端口
CMD 指定一个容器启动时候要运行的命令,有多个CMD时,会覆盖,只有最有一个会生效;CMD会被docker run 后面的命令覆盖
ENTRYPOINT 指定一个容器启动时候要运行的命令,但是不会覆盖,会追加
ONBUILD 此镜像被作为父镜像是,会触发的命令

3:示例:自定义镜像

1:centos基本镜像没有vim,ifconfig工具
[root@docker ~]# docker run -it centos /bin/bash
[root@8414a93e2eba /]# vim test.txt
bash: vim: command not found
[root@8414a93e2eba /]# ifconfig
bash: ifconfig: command not found
[root@8414a93e2eba /]# 2:编写Dockerfile文件
[root@docker ~]# vim Dockerfile
FROM centos
MAINTAINER vargant007<923737581@qq.com> #设置变量
ENV MYPATH /usr/local #设置工作目录
WORKDIR $MYPATH RUN yum -y install vim
RUN yum -y install net-tools EXPOSE 8000 CMD echo $MYPATH
CMD echo "success ------OK"
CMD /bin/bash 3:构建自定义镜像
格式:docker build -f Dockerfile文件路径 -t 新镜像名字:标签 .
#注意有一个.指定镜像构建过程中的上下文环境的目录 [root@docker ~]# docker build -f /root/Dockerfile -t mycentos:1.3 .
Sending build context to Docker daemon 3.976MB
Step 1/10 : FROM centos
---> 0f3e07c0138f
Step 2/10 : MAINTAINER vargant007<923737581@qq.com>
---> Running in b399d6eb2708
Removing intermediate container b399d6eb2708
---> 99b5cde412f4
Step 3/10 : ENV MYPATH /usr/local
---> Running in e2382858994d
Removing intermediate container e2382858994d
---> 031eb583bc70
Step 4/10 : WORKDIR $MYPATH
---> Running in 9fc0ae050026
Removing intermediate container 9fc0ae050026
---> a4778a813e92
Step 5/10 : RUN yum -y install vim
---> Running in 73cc7539a7fc
CentOS-8 - AppStream 629 kB/s | 6.3 MB 00:10
CentOS-8 - Base 726 kB/s | 7.9 MB 00:11
CentOS-8 - Extras 446 B/s | 2.1 kB 00:04
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-10.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-10.el8 AppStream 6.3 M
vim-filesystem noarch 2:8.0.1763-10.el8 AppStream 48 k
which x86_64 2.21-10.el8 BaseOS 49 k Transaction Summary
================================================================================
Install 5 Packages Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 32 kB/s | 39 kB 00:01
(2/5): vim-filesystem-8.0.1763-10.el8.noarch.rp 254 kB/s | 48 kB 00:00
(3/5): which-2.21-10.el8.x86_64.rpm 93 kB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-10.el8.x86_64.rpm 585 kB/s | 1.4 MB 00:02
(5/5): vim-common-8.0.1763-10.el8.x86_64.rpm 969 kB/s | 6.3 MB 00:06
--------------------------------------------------------------------------------
Total 750 kB/s | 7.8 MB 00:10
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-10.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-10.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-10.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-10.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-10.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-10.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-10.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-10.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-10.el8.noarch 4/5
Verifying : which-2.21-10.el8.x86_64 5/5 Installed:
vim-enhanced-2:8.0.1763-10.el8.x86_64 gpm-libs-1.20.7-15.el8.x86_64
vim-common-2:8.0.1763-10.el8.x86_64 vim-filesystem-2:8.0.1763-10.el8.noarch
which-2.21-10.el8.x86_64 Complete!
Removing intermediate container 73cc7539a7fc
---> 40dee5128b87
Step 6/10 : RUN yum -y install net-tools
---> Running in 6dff3319a5c8
Last metadata expiration check: 0:00:18 ago on Mon Nov 25 21:34:01 2019.
Dependencies resolved.
================================================================================
Package Arch 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 178 kB/s | 323 kB 00:01
--------------------------------------------------------------------------------
Total 98 kB/s | 323 kB 00:03
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 6dff3319a5c8
---> 38ee719064bf
Step 7/10 : EXPOSE 8000
---> Running in f5d94def858c
Removing intermediate container f5d94def858c
---> cb7a32a28939
Step 8/10 : CMD echo $MYPATH
---> Running in d8849409e238
Removing intermediate container d8849409e238
---> c7aa85692260
Step 9/10 : CMD echo "success ------OK"
---> Running in de18e204d92c
Removing intermediate container de18e204d92c
---> ef8a6e27705a
Step 10/10 : CMD /bin/bash
---> Running in 2d9372a8083a
Removing intermediate container 2d9372a8083a
---> 3942972c5c9c
Successfully built 3942972c5c9c
Successfully tagged mycentos:1.3 4:查看当前镜像
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.3 3942972c5c9c About a minute ago 301MB
centos latest 0f3e07c0138f 7 weeks ago 220MB 5:使用自定义镜像构建容器
[root@docker ~]# docker run -it mycentos:1.3
[root@c390446635c6 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 7 bytes 586 (586.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@c390446635c6 local]# pwd
/usr/local 6:查看镜像创建历史
[root@docker ~]# docker history mycentos:1.3
IMAGE CREATED CREATED BY SIZE COMMENT
3942972c5c9c 32 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
ef8a6e27705a 32 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
c7aa85692260 32 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
cb7a32a28939 32 minutes ago /bin/sh -c #(nop) EXPOSE 8000 0B
38ee719064bf 32 minutes ago /bin/sh -c yum -y install net-tools 14.3MB
40dee5128b87 32 minutes ago /bin/sh -c yum -y install vim 66.8MB
a4778a813e92 33 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
031eb583bc70 33 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
99b5cde412f4 33 minutes ago /bin/sh -c #(nop) MAINTAINER vargant007<923… 0B
0f3e07c0138f 7 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 7 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 7 weeks ago /bin/sh -c #(nop) ADD file:d6fdacc1972df524a… 220MB

08Dockerfile基本使用的更多相关文章

随机推荐

  1. 异步机制 - IO完成端口

    1 KQUEUE KeInitializeQueue VOID KeInitializeQueue( IN PKQUEUE  Queue, IN ULONG  Count  OPTIONAL ); l ...

  2. csp-s模拟测试112 & csp-s模拟测试113

    考前两天模拟. Day1直接炸飞,T1浪费的时间太长,对拍+调试了一个多小时但复杂度还不能过,最后5分钟想出来了解决方案但是已经打不出来了.T2读入出了事故RE0.T3打了假贪心. Day2心态几乎也 ...

  3. Git 命令行使用

    一.git简介: Linux创建了Linux,但是Linux的发展壮大是由世界各地的热心志愿者参与编写的?那么那么多份的代码是怎么合并的呢?之前是在2002年以前,世界各地的志愿者把源代码文件通过di ...

  4. JS函数传递字符串参数(符号转义)

    原文链接:https://blog.csdn.net/Myname_China/article/details/82907965 JS函数传递字符串参数,如果没有转义处理,在接收的时候无法正确的接收字 ...

  5. 7 AOP

    AOP:Aspect Oriented Programming 面向切面编程.AOP是对面向对象编程的一种补充,在运行时动态地将代码切入到类的指定方法.指定位置的编程思想.将不同的方法的同一位置抽象成 ...

  6. 图解centos7如何关闭ipv6仅使用ipv4

    方法/步骤     使用ifconfig命令查看网卡信息,如果出现inet6 fe80::20c:29ff:fed0:3514,说明机器开启了ipv6,如下图所示:   编辑/etc/sysctl.c ...

  7. Flask中current_app和g对象

      Flask零基础到项目实战(七)请求方法.g对象和钩子函数 一.get方法 二.post方法 post请求在模板中要注意几点: input标签中,要写name来标识这个value的key,方便后台 ...

  8. java.util.concurrent.DelayQueue 源码学习

    jdk1.8 DelayQueue,带有延迟元素的线程安全队列,当非阻塞从队列中获取元素时,返回最早达到延迟时间的元素,或空(没有元素达到延迟时间).DelayQueue的泛型参数需要实现Delaye ...

  9. mongodb and 和 or 查询

    db.getCollection('gxyWarnEntity').find({ "schoolId" : "f11c8ea12f457dbc19c768a8bb6357 ...

  10. idea使用Snyk对项目进行安全漏洞审核、修复

    笔者今天早上打开idea,看到右侧插件栏有一个大狗头,不懂什么时候好奇心驱使安装了这个插件.按图索骥,打开插件. 打开狗,里面会出现好多英文,其中有一处蓝色标底,here 字样的,你点击进去, 用Go ...