在bitahub上孩子都是用的平台上的镜像,多多少少是有点不方便的。
镜像还是自己写的放心 —某同门师兄
镜像(Image): Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
**容器(Container):**镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
什么是 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
如果是两个命令的话会用 &&\ 做间隔,如果是一个命令里面的两个东西的话用\
看底下的最后一行,就算有空格也是可以用 \的哦
当然也可以写一堆RUN,但是Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。
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