标签:dir epo 操作系统 ls -l his poi 运维 ash str
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成脚本。
构建三个步骤:编写dockerfile文件,docker build , docker run
dockerfile内容基本要求:
Docker执行Docker的大致流程
从应用角度看,DockerFile,Docker镜像与Docker容器分别代表软件三个不同阶段:
DockerFile 需要定义一个Dockerfile,Dockerfile定义进程需要的一切东西,Dockerfile设计的内容包括执行代码或者是文件、环境变量、依赖包、运行环境、动态链库、操作系统的发型版,服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)
Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行Docker镜像时,会真正开始提供服务。
Docker容器,容器是直接提供服务
FROM
基础镜像,当前新镜像是基于那个镜像
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时候需要运行的命令
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登录进来工作目录。
ENV
用来在构建镜像过程中设置环境变量
ADD
在宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
类似于ADD,拷贝文件和目录到镜像中
将从构建上下文目录中<源路经>的文件/目录复制到新的一层的镜像内的<目标路径>位置。
书写方式有2种:
COPY src dest
COPY [‘src‘, ‘dest‘]
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时运行的命令
注意:dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run 之后的参数替换。
ENTRYPOINT
指定一个容器启动时运行的命令
注意:ENTRYPOINT的目的和CMD一样,都是指定容器启动程序及参数,会在docker run之后追加
ONBUILD
当构件一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
关闭所有容器
docker rm -f $(docker ps -q)
编写DockerFile
vim mydockerfile2
# 继承于centos
FROM centos
# 编写作者
MAINTAINER xkl<xxx@163.com>
# 环境目录
ENV MYPATH /usr/local
# 进入容器默认到此目录
WORKDIR $MYPATH
# 安装 vim,net-tools
RUN yum -y install vim
RUN yum -y install net-tools
# 暴露80端口
EXPOSE 80
# 打印信息
CMD echo $MYPATH
CMD echo ‘success---------[OK]‘
# 以shell脚本进入
CMD /bin/bash
构建
# 构建镜像mycentos,1.3版本成功。
docker build -f /mydocker/mydockerfile2 -t mycentos:1.3 .
运行
docker run -it REPOSITORY:TAG
docker run -it centos:1.3
[root@37911b322ad0 local]# ifconfig
# 可以查看网卡
查看镜像构建顺序
docker history [IMAGE ID]
Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run 之后的参数替换。
当我们执行:
docker run -it -p 7777:8080 tomcat ls -l
# 则会覆盖构建tomcat的dockerFile的最后一个CMD命令。并且会进入容器内执行ls -l
# 相当于,dockerFile中加了一句 CMD ["ls", "-l"]。并且容器没有被启动。
制作CMD版本的查询IP
vim mydockerfile3
# 写入dockerFile
FROM centos
RUN yum install -y curl
CMD ["curl", "-s", "http://ip.cn"]
# 构建镜像
docker build -f /mydocker/mydockerfile3 -t myip .
#运行,会返回ip 所在地。
docker run -it myip
# 但是存在问题,当我想看详细头信息时候,就会报错,原因是当前执行curl为CMD命令,而 -i会覆盖之前curl命令,导致dockerfile结尾添加依据 curl -i .所以会报错
docker run -it myip -i
ENTRYPONIT版本的查询IP
vim mydockerfile4
# 写入dockerFile
FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl", "-s", "http://ip.cn"]
# 构建镜像
docker build -f /mydocker/mydockerfile4 -t myip2 .
#运行,会返回ip 和 头信息 因为添加-i 可在 原有ENTRYPOINT命令下添加 -i
docker run -it myzip2 -i
ONBUILD 应用在原有mydockerfile4中添加此句
# 表示别的继承我这个镜像会打印此句,在原有mydockerfile4添加一句
ONBUILD RUN echo "father....1111"
构建父镜像
# 构建一个父镜像
docker build -f /mydocker/mydockerfile4 -t myip_father .
另写一个dockerfile 为mydockerfile5
# 另写一个dockerfile 为mydockerfile5
FROM myip_father #继承my_father的镜像
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn"]
# 此时用mydockerfile5 构建镜像
docker build -f /mydocker/mydockerfile5 -t myip_son .
# 构建镜像myip_son时,因mydockerfile5继承my_father 镜像,会执行ONBUILD,构件时候会打印"father......1111"这句话
标签:dir epo 操作系统 ls -l his poi 运维 ash str
原文地址:https://www.cnblogs.com/xujunkai/p/13031767.html