Docker-Dockerfile讲解(二)

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile(本小节属于)

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

接上一节讲过的FROM,MAINTAINER,RUN,EXPOSE,WORKDIR,USER,我们这一节继续讲解其他参数。

ENV

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。包括运行的容器也可以使用该环境变量,当然我们也可以在run容器的手工注入环境变量。如果出现冲突的环境变量,run的优先级最高,dockerfile自带的env次之,最后是操作系统自带的最低。

ENV 设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用。

css 复制代码
ENV a=b

ARG

构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

ini 复制代码
ARG NODE_ENV=development
#也可以在构建的添加
docker build --build-arg NODE_ENV=production -t myapp:latest .

ADD

ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件拷贝到镜像中。同时如果文件是压缩格式,ADD后会自动解压。支持的压缩格式包括:tar.gz ,tgz ,tar.bz2 ,tar.xz (个人习惯一般都用tar.gz)

其格式是:ADD 源路径 目标路径

bash 复制代码
# 如果abcd是个文件
# 把当前目录abcd文件复制到/root目录下
ADD abcd /root

# 如果aaa是个目录
# 把aaa目录下的文件复制到 /root目录下
ADD aaa /root

# 如果aaa是个目录
# 把aaa目录及目录下的文件复制到/root目录下
ADD aaa /root/aaa

[root@b034f711ba34 /]# cd /root/
[root@b034f711ba34 ~]# ls
aaa  abcd  anaconda-ks.cfg
[root@b034f711ba34 ~]# cd aaa/
[root@b034f711ba34 aaa]# ls
xxx

# 会把这个文件解压到/root/目录下
ADD centos.tar.gz /root/

#下载文件上传到/root目录
ADD https://example.com/centos.tar.gz /root/centos.tar.gz

注意:解压和url不能同时使用。

COPY

COPY指令和ADD指令功能和使用方式类似。只是COPY指令不支持自动解压工作,同时也无法下载url中的文件。

VOLUME

数据卷,当容器运行的时候自动创建一个volume,挂载到容器指定的目录,不需要在docker run的时候添加任何参数,就会自动创建。

bash 复制代码
#容器里面自动创建2个目录  /voluuem1和 /volume2
VOLUME ["/volume1", "/volume2"]

#可以看到匿名的数据卷
docker volume ls

这个问题以前我曾经踩过坑,使用了某开源的镜像,具体是那个已经忘记,这个容器运行中会产生较多的数据的数据在这个volume里面。由于经常删除重建,所以遗留了很多volume,占用了大量的磁盘;而当时对docker的理解并没有现在深入,找了很久才找到原因。

volume是不会跟着容器和镜像的删除而会自动删除的,只有使用docker volume才能进行删除,而且由于是匿名的,你根本不知道谁是谁,谁在用,谁没用。下图就是上面的dockerfile构建的镜像运行过后的情况。而且我们在讲Docker-详细信息和目录的时候也说过,docker的目录下有一个专门的目录就是存储这个volume的。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
王八八。6 小时前
linux后台java、postSQL部署命令
java·linux·运维
瑞熙贝通实验室综合管理平台6 小时前
实验动物管理系统|以痛点为核心 构建动物房数字化管理新体系
linux
TheRouter6 小时前
LLM 应用的Evals 工程实践:从手动测试到自动化回归测试体系
运维·ai·自动化·log4j
黎阳之光8 小时前
黎阳之光:以视频孪生重构智慧防火,打造“天空地人智”一体化森林防火新范式
大数据·运维·人工智能·物联网·安全
黄筱筱筱筱筱筱筱8 小时前
LINUX-防火墙
linux·服务器·网络
сокол9 小时前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
utf8mb4安全女神10 小时前
Linux系统服务相关命令【定时任务设置】【任务进程管理】【防火墙区域应用】
linux·运维·服务器
凯丨10 小时前
Claude Code 自动化开发的完整体系
运维·自动化
月走乂山12 小时前
Windows 10 WSL2 安装问题排查与解决全记录
windows·docker·hyper-v·故障排查·wsl2
SilentSamsara13 小时前
concurrent.futures 实战:进程池与线程池的统一抽象
运维·开发语言·python·青少年编程