dockerfile创建镜像

2023-12-13 04:02:35

dockerfile:创建镜像,创建自定义的镜像。里面的内容自行编写。

包括配置文件,挂载点,对外暴露的端口。设置环境变量。

docker的创建镜像方式:

1,基于已有镜像进行创建。

根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,只能提供基础的功能,扩展的功能还是需要自定义(进入容器进行操作)

2,基于模板,

模板地址: Index of /template/precreated

导入到本地:

创建:

3,dockerfile 联合文件系统(UnionFS),docker镜像的基础,

镜像通过分层来进行集成,特性:一次可以加载多个文件系统,但是从外面来看就是一个文件系统。

docker镜像实际上就是由一层一层的文件系统组成,这种层级的文件系统就是UnionFS.

每一层都是layers,每一层都包含文件系统的一部分,这写层次叠加在一起,最终形成的就是rootfs

bootfs:宿主机的引导文件系统,启动操作系统的内核文件,启动容器需要的最基本的文件。包含宿主机的bootloader和kernel。宿主机提供内核和引导程序

rootfs镜像的操作系统:会给镜像自动创建一个操作系统,在dockerfile中,我们可以自己指定。roofts是多个基础镜像和应用镜像结合起来的只读层。镜像实际上就是一个只读文件。

创建容器时需要执行命令和依赖环境

container 镜像

在dockerfile当中每创建一个指定都是一个镜像层。

镜像层会被缓存和复用。

一旦有一层镜像失败,那么所有的进行层都会失败,镜像也不会创建。

镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了做了,镜像中基于这个命令创建的文件依然存在,但在容器中看不见。

1,touch 123

2,rm-rf 123

dockerfile的核心:用户的个性化定制docker的镜像。

dockerflie的结构:

1,基础镜像信息

2,维护者信息

3,镜像的操作指令

4,容器启动时,执行的命令。

nginx定义好了容器执行的命令 /bin/bash,覆盖率容器内的标准输出。

dockerfile的语法:

FROM:指定基础镜像信息。指定容器的操作系统。

MAINTAINER:指定维护者的信息(可有可无)

RUN:在基础镜像上执行的命令,每个RUN就是一层,分层越多,镜像就越大。

ENTRYPOINT:设置容器运行时的默认命令(容器内部运行的主程序。)

CMD:指定容器运行时的默认命令(docker run /bin/bash 后面加了其他命令。cmd的做了将会被覆盖。)

EXPOSE:暴露端口(指定容器的运行端口)

ENV:设置容器的环境变量,环境变量可以被RUN命令使用(声明容器运行需要的环境变量)

ADD:复制,解压。解压不支持.zip和.rar tar.gz tar.bz2支持url当中解压和复制(解压)

COPY:复制文件,不能解压,而且只能复制本地文件。文件要和dockerfile在一个目录。(官方推荐复制用copy)

VOLUME:创建一个容器内的挂载点,既可以未宿主机挂载,也可以公容器挂载。

USER:设置运行镜像时使用的用户或者UID(可以不加)

WORKDIR:未后续指令设置的工作目录。为了ENTRYPOINT和CMD运行

ONBUILD:这个镜像可以被其他镜像引用,需要这个命令。

ARG:传参,用于创建容器时,传递参数。EVN用于容器运行时设置环境变量。

CMD和ENTRYPOINT的区别:

都是可以作为容器启动时的默认命令。

区别:

1,CMD可以把参数传给ENTRYPOINT

2,多个entrypoint和多个cmd只会运行最后一个 (一个dockerfile当中只会有一个entrypoint和cmd)

3,ENTRYPOINT的指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖。

4,ENTRYPOINT和CMD的指令都是在容器启动时执行,都会成为容器的主进程,主进程复制结束信息,处理容器的生命周期,主进程退出,容器也将终止运行。

基础的dockerflie

1,在opt下创建一个test1目录

vim Dockerfile 以D为开头

根据文件创建镜像:

创建容器

多个entrypoint和多个cmd只会运行最后一个 (一个dockerfile当中只会有一个entrypoint和cmd)

覆盖:

RUN命令的优化:

主要是减少镜像的层数:把多个run命令写在一块。

&&符号:主要用&&

前一个命执行成功才会执行下一个命令。

;符号:

不管前一个命令是否成功,后面的命令都会执行。

||:

或:如果前面的命令执行失败,才会执行后面的操作

反斜杠 \:换一行

可读性更高。

copy和add区别:

copy和add都可以把本地文件复制到镜像中,但是官方推荐如果是复制使用copy。

区别:ADD可以解压,如果是一个压缩文件,add在复制之后会自动解压。(tar.gz和tar.bz2)可以支持URL下载源文件,支持下载,但是不能解压。通过URL拷贝的文件无法自动解压。

copy只能复制,不能解压,而且只能是本地文件,不支持URL路径。

构建更高级别的Dockerflie:

centos7 构建一个apache的dockerfile(编译安装)

必须和Dockerfile在同一目录

执行文件,创建镜像

创建容器

不要加/bin/bash

如何基于镜像进行二层构建:

通过二层构建,可以大大的减少前一次的镜像大小

重新构建:

你在工作中用的docker的网络模式

你是怎么对docker资源进行资源控制

如何查看正在运行的容器

文章来源:https://blog.csdn.net/weixin_51694382/article/details/134954417
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。