dockerfile萌新基础版

在bitahub上孩子都是用的平台上的镜像,多多少少是有点不方便的。
镜像还是自己写的放心 —某同门师兄

dockerfile萌新基础版_第1张图片

镜像(Image): Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
**容器(Container):**镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

看一下dockerfile的书写格式吧。

什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

比较基础的两个:(其实这些的大小写无所谓,但是为了区分一般用大写)

FROM: 定制的镜像都是基于 FROM 的镜像
RUN: 用于执行后面跟着的命令行命令。
看一小段例子:

FROM nvidia/cuda:11.7.1-cudnn8-runtime-ubuntu20.04
RUN apt update && \
    apt install -y bash \
                   build-essential \
                   git \    
                   curl \
                   openssh-client \
	   openssh-server \
                   ca-certificates \

前面是FROM
如果是两个命令的话会用 &&\ 做间隔,如果是一个命令里面的两个东西的话用\

看底下的最后一行,就算有空格也是可以用 \的哦

dockerfile萌新基础版_第2张图片

当然也可以写一堆RUN,但是Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

CMD 在docker run 时运行。
RUN 是在 docker build。

举个例子:
在这里插入图片描述
那你要在运行的时候输入这个玩意:
dockerfile萌新基础版_第3张图片

ENTERPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。


FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

1、不传参运行

$ docker run nginx:test
容器内会默认运行以下命令,启动主进程。

nginx -c /etc/nginx/nginx.conf
2、传参运行

$ docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)

nginx -c /etc/nginx/new.conf

大概就先这样,这docker就这么让我把门入了,以后慢慢琢磨了

部分参考:https://www.runoob.com/docker/docker-architecture.html

你可能感兴趣的:(实验室的xml,java,开发语言)