IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker之dockerfile指令学习 -> 正文阅读

[系统运维]docker之dockerfile指令学习

Docker之Dockerfile

docker安装启动成功,只是docker学习的第一步。
下面我们要学习一个新的功能,那就是dockerfile。



前言

随着docker的学习,我们发现,虽然已经有了很多成熟的基础镜像,但是在我们的工作和学习中,为了更方便,更便捷的使用docker镜像,我们需要定制化构建镜像,dockerfile就是来帮助我们构建镜像的。


一、Dockerfile是什么?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
简单来说,就是用来构建镜像的一系列操作指令和注释的组合。
一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

二、Dockerfile怎么使用?

1.初出茅庐第一试

创建一个简单的Dockerfile文件,构建镜像,并且启动。

1.1 检查docker运行状态

systemctl status docker

展示如下,则表示docker启动
在这里插入图片描述

1.2 准备工作

在目录下/opt/docker目录下新建test.txt文件,输入:Hello Dockerfile!
同时,创建文件Dockerfile。不需要改名字。

# 基础镜像
FROM nginx
# 作者信息
MAINTAINER 11949@qq.com
# 添加文件
ADD test.java /opt/
# 执行
CMD '------------end----------------'

1.3 构建镜像

执行构建镜像命令,如果为了验证可以删除本地所有镜像和容器

docker build -t nginx01:1.1 .

关于此处的.,后面会讲
在这里插入图片描述

1.4 启动镜像

执行启动镜像的命令

docker run -itd nginx01:1.1

在这里插入图片描述
进去镜像中查看是否将test.txt文件上传到指定目录

docker exec -it -d d5d961660990 

在这里插入图片描述

2. 学习Dockerfile中的指令

放张图慢慢学
在这里插入图片描述

2.1 Dockerfile文件编写规则

  • 指令忽略大小写,建议使用大写
  • 每一行只支持一条指令,每条指令可以携带多个参数

2.2 FROM (指定基础镜像)

FROM必须是第一条非注释指令,它指定基础镜像且指定的镜像是已存在的。

FROM image		# 指定镜像
FROM image:tag	# 指定镜像和版本

2.3 MAINTAINER(标注作者信息)

格式:

MAINTAINER author email

实例:

MAINTAINER king 111222333@qq.com

2.4 RUN (执行命令或脚本)

RUN可以运行任何被基础脚本支持的命令
RUN支持两种格式命令:
shell格式:

# shell格式
#  <命令行命令> 等同于,在终端操作的 shell 命令。
RUN <命令行命令>

exec格式:

# exec格式 
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
RUN ["可执行文件", "参数1", "参数2"]

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大

例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
# 以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

2.5 ADD(复制文件)

复制文件到镜像指定目录
格式:

# 添加 源文件(本地相对路径或wget或curl获取) 目标位置(绝对路径)
ADD src dest
ADD tomcat.tar.xz /opt/tomcat/tomcat1.8

ADD和COPY的共同点是,都能复制文件到构建的镜像中,但是ADD包含tar文件的解压功能,但是COPY只能单纯的复制文件。

2.6 WORKDIR(切换目录)

等同于命令行的cd 目录,一定要使用绝对路径,如果使用相对路径,则路径会传递下去。
格式:

WORKDIR 目录

实例:

WORKDIR /home/docker

2.7 VOLUME(数据卷)

我们知道,处理docker容器中的数据是比较麻烦的,所以我们可以将容器内数据挂载到宿主机,VOLUME就是帮我们在构建镜像阶段即挂载目录的指令。
格式:

VOLUME <目录1> <目录2> ...

示例:

VOLUME /usr/local/nging/conf/nginx.conf

使用匿名挂载的方式将文件或目录挂载到宿主机,防止因为容器停止或删除而导致的数据丢失,同时避免容器变大。

容器在宿主机的默认挂载目录:/var/lib/docker/volumes

2.8 EXPOSE(暴露端口)

声明要与暴露的端口,或者说,声明要与宿主机做映射的端口,但仅仅是声明,在镜像构建完成,启动一个容器的时候,需要指定宿主机端口,如果是expose单个端口,可以不指定容器端口。
格式:

expose port1 [port2...]

示例:

# 映射单个端口
expose 80
# 映射多个端口
expose 8080 3306

为了更明白的解释清楚,什么叫做构建镜像时指定容器端口,启动容器时指定宿主机端口,请看下面代码

# 随机使用宿主机的某个端口与构建镜像时暴露的端口做映射,那么我们就不再关心容器内具体端口,我们可以通过宿主机进行访问
docker run -itd --name centos-tomcat -P 9625 centos 

# 写一个 多端口映射 假设dockerfile文件中暴露端口为8080 8090
docker run -itd --name centos-tomcat -p 8081:8080 -p 8090:8091 centos

2.9 ENV (环境配置)

环境变量配置,比如JAVA_HOME,会被后续的RUN指令使用。在容器启动时生效。
格式:

# 单个环境变量
ENV <key> <value>
# 多个环境变量
ENV <key1> <value1> <key2> <value2>

示例:

ENV JAVA_HOME /usr/local/java/jdk1.8

2.10 CMD(指定启动容器启动时执行的指令)

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

格式:

CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数

示例:

CMD ["/bin/echo", "this is a echo test"]

总结

主要写了一些关于Dockerfile指令的使用情况,具体的复杂的定制化镜像没有写,后续的话会补上来。其实吧,不是很难,但是需要一些linux基础、需要一些练习。好的,各位晚安。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:07:58  更:2021-08-16 12:10:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:56:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码