dockerfile 指定volume_Docker七天系列之DockerFile 入门

39c38e4607927e982592f791329e3f46.png

f60ef1180ed1838f3fd7a3522498e036.gif

配置文件

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。

下面创建 Dockerfile 配置文件如下:

# 使用的源镜像
FROM    ubuntu
# RUN 执行的容器命令
RUN     apt -y update && apt -y upgrade && apt install -y vim 
nginx 
# 开放端口
EXPOSE  80
# 启动后执行的命令,在执行docker run ... 命令时添加 /bin/bash ,CMD设置将无效
# 以前台运行NGINX
CMD      ["nginx","g","daemon off;"]
  • RUN指令是在镜像构建时执行,RUN 经常用于安装软件包。
  • CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换,有多个 CMD 指令时只有最后一个 CMD 有效。

构建镜像

在 Dockerfile 文件所在目录执行编译镜像操作。

docker build -t pfinal/nginx .

查看镜像编译是否成功

docker images

使用镜像

修改 /etc/hosts添加 pfinal.test 本地域名的解析记录

127.0.0.1       pfinal.test

运行容器

docker run -tid -p 8080:80 -v /www:/var/www/html --name nginx pfinal/nginx

宿主使用 pfinal.testlocalhost:8080 (如果宿主机没有使用80也可以将80端口映射) 访问nginx

镜像上传

制作好的镜像可以上传到网上,以供其他人使用。

登录 docker hub

docker login

推送镜像到仓库

docker push pfinal/lamp

登录 https://hub.docker.com/ 就可以在 Repositories 中查看到刚者提交的镜像了。

现在其他用户可以使用以下命令安装我们的镜像了。

docker pull pfinal/lamp

退出 docker hub

docker logout

f60ef1180ed1838f3fd7a3522498e036.gif

指令详解

合起来就是下面这张图:

318ba54d331f9b4d29cde6944ae61957.png

FROM

指令:FROM
功能描述:设置基础镜像
语法:FROM < image>[:< tag> | @< digest>]
提示:镜像都是从一个基础镜像(操作系统或其他镜像)生成,可以在一个Dockerfile中添加多条FROM指令,一次生成多个镜像
注意:如果忽略tag选项,会使用latest镜像

MAINTAINER
功能描述:设置镜像作者
语法:MAINTAINER < name>

RUN

功能描述: 用来执行命令行命令的
语法:RUN < command>
RUN [“executable”,”param1”,”param2”]
提示:RUN指令会生成容器,在容器中执行脚本,容器使用当前镜像,脚本指令完成后,Docker Daemon会将该容器提交为一个中间镜像,供后面的指令使用
补充:RUN指令第一种方式为shell方式,使用/bin/sh -c < command>运行脚本,可以在其中使用将脚本分为多行
RUN指令第二种方式为exec方式,镜像中没有/bin/sh或者要使用其他shell时使用该方式,其不会调用shell命令
例子:

RUN source $HOME/.bashrc; 
          echo $HOME
          RUN [“/bin/bash”,”-c”,”echo hello”]
          RUN [“sh”,”-c”,”echo”,”$HOME”]

使用第二种方式调用shell读取环境变量

ADD

功能描述:更高级复制文件到镜像中
语法:ADD < src>… < dest>|[“< src>”,… “< dest>”]
注意:当路径中有空格时,需要使用第二种方式
当src为文件或目录时,Docker Daemon会从编译目录寻找这些文件或目录,而dest为镜像中的绝对路径或者相对于WORKDIR的路径
提示:src为目录时,复制目录中所有内容,包括文件系统的元数据,但不包括目录本身
src为压缩文件,并且压缩方式为gzip,bzip2或xz时,指令会将其解压为目录
如果src为文件,则复制文件和元数据
如果dest不存在,指令会自动创建dest和缺失的上级目录

WORKDIR

功能描述:设置RUN CMD ENTRYPOINT ADD COPY指令的工作目录
语法:WORKDIR < Path>
提示:如果工作目录不存在,则Docker Daemon会自动创建
Dockerfile中多个地方都可以调用WORKDIR,如果后面跟的是相对位置,则会跟在上条WORKDIR指定路径后(如WORKDIR /A WORKDIR B WORKDIR C,最终路径为/A/B/C)

VOLUME

功能描述:设置定义匿名卷
语法:VOLUME [“/data”]
VOLUME /data1 /data2
提示:容器运行时应该尽量保持容器存储层不发生写操作,对于数据库需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在Dockerfile中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。

VOLUME /data

这里的/data目录就会在运行时自动挂载为匿名卷,任何向/data中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。当然,运行时可以覆盖这个挂载设置。

EXPOSE

功能描述:声明端口
语法:EXPOSE < port> < port> …
延伸:镜像暴露端口可以通过docker inspect查看
提示:容器启动时,Docker Daemon会扫描镜像中暴露的端口,如果加入-P参数,Docker Daemon会把镜像中所有暴露端口导出,并为每个暴露端口分配一个随机的主机端口(暴露端口是容器监听端口,主机端口为外部访问容器的端口)
注意:EXPOSE只设置暴露端口并不导出端口,只有启动容器时使用-P/-p才导出端口,这个时候才能通过外部访问容器提供的服务

e420e9ec4ff95f9bae8251689c92040b.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值