【13】Docker

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1、DockerFile的定义

2、DockerFile内容基本知识

3、Docker执行DockerFile的大致流程

4、DockerFile的关键字

5、举例


1、DockerFile的定义

Dockerfile是用来构建Docker镜像的文本文件是由一条条构建镜像所需的指令和参数构成的脚本。

2、DockerFile内容基本知识

1:每条保留字指令(关键字)都必须为大写字母且后面要跟随至少一个参数

2:指令按照从上到下顺序执行

3:#表示注释

4:每条指令都会创建一个新的镜像层并对镜像进行提交

3、Docker执行DockerFile的大致流程

(1) docker从基础镜像运行一个容器

(2) 执行一条指令并对容器作出修改

(3) 执行类似docker commit的操作提交一个新的镜像层

(4) docker再基于刚提交的镜像运行一个新容器

(5) 执行dockerfile中的下一条指令直到所有指令都执行完成

从应用软件的角度来看Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

  • Dockerfile是软件的原材料
  • Docker镜像是软件的交付品
  • Docker容器则可以认为是软件镜像的运行态也即依照镜像运行的容器实例Dockerfile面向开发Docker饶像成为交付标准Docker容器则涉及部署与运维三者缺一不可合力充当Docker体系的基石。

1、 Dockerfle需要定义一个DockerfleDockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环培变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

2 、Docker镜像在用Dockerfile定义一个文件之后docker build时会产生一个Docker镜像当运行 Docker镜像时会真正开始提供服务

3 、Docker容器容器是直接提供服务的。

4、DockerFile的关键字

【1】 FROM

基础镜像当前新镜像是基于哪个镜像的指定一个已经存在的镜像作为模板第一条必须是from

【2】 MAINTAINER maintainer

镜像维护者的姓名和邮箱地址

【3】 RUN

容器构建时需要运行的命令

两种格式shel格式和exec格式

RUN是在 docker build时运行

【4】 EXPOSE

当前容器对外暴露出的端口

【5】 WORKDIR

指定在创建容器后终端默认登陆的进来工作目录一个落脚点

【6】 USER

指定该镜像以什么样的用户去执行如果都不指定默认是root

【7】 ENV

用来在构建镜像过程中设置环境变量

【8】 ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

【9】 COPY

类似ADD拷贝文件和目录到镜像中。将从构建上下文目录中 的文件/目录复制到新的一层的镜像内的位置

【10】 VOLUME

容器数据卷用于数据保存和持久化工作

【11】 CMD

指定容器启动后的要干的事情

#注意Dockerfile 中可以有多个CMD.但只有最后一个生效CMD会被docker run 之后的参数替换

它和前面RUN命令的区别

【12】 ENTRYPOINT entry point

也是用来指定一个容器启动时要运行的命令

类似于 CMD 指令但是ENTRYPOINT不会被docker run后面的命令覆盖而且这些命令行参数会被当作参数送给 ENTRYPOINT 指今指定的程序

5、举例

【1】编写dockerfile

[root@localhost myfile]# vi Dockerfile
FROM centos
MAINTAINER xiaoniba<xiaoniba@126.com>
ENV MYPATH/usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools

RUN yum -y install glibc.i686
RUN mkdir /mnt/123

EXPOSE 80
CMD echo $MYPATH
CMD echo"success----------OK"
CMD /bin/bash

【2】构建我没有联网所以去掉了下载的命令注意命令后面的一个“ . ”不要忘了

[root@localhost myfile]# docker build -t centos:1.5 .
Sending build context to Docker daemon  2.048kB
Step 1/9 : FROM centos
 ---> 5d0da3dc9764
Step 2/9 : MAINTAINER xiaoniba<xiaoniba@126.com>
 ---> Using cache
 ---> 65702f8177b2
Step 3/9 : ENV MYPATH /usr/local
 ---> Using cache
 ---> ed71a4e3beeb
Step 4/9 : WORKDIR $MYPATH
 ---> Using cache
 ---> a30d704069c9
Step 5/9 : RUN mkdir /mnt/123
 ---> Running in a41f2162ca25
Removing intermediate container a41f2162ca25
 ---> a65f3eae1ad7
Step 6/9 : EXPOSE 80
 ---> Running in 5f47630a76f7
Removing intermediate container 5f47630a76f7
 ---> 063b337dc89f
Step 7/9 : CMD echo $MYPATH
 ---> Running in 88a6da7267d4
Removing intermediate container 88a6da7267d4
 ---> a6b827cc2532
Step 8/9 : CMD echo"success----------OK"
 ---> Running in 31639224ba24
Removing intermediate container 31639224ba24
 ---> 8f5861d7fb5a
Step 9/9 : CMD /bin/bash
 ---> Running in 211838246e78
Removing intermediate container 211838246e78
 ---> b1324e41a28a
Successfully built b1324e41a28a
Successfully tagged centos:1.5

 【3】运行

[root@localhost myfile]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
centos            1.5       b1324e41a28a   2 minutes ago   231MB
[root@localhost myfile]# docker run -it centos:1.5 /bin/bash
[root@b9a707322558 local]# cd /mnt     
[root@b9a707322558 mnt]# ls
123
[root@b9a707322558 mnt]# 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker