dockerfile1.0

docker的数据卷

docker file ------------- 自动自定义镜像

docker的数据卷:

容器与宿主机之间,或者容器和容器之间的数据共享(目录)

创建容器的时候,通过指定目录,实现容器于宿主机之间,或者容器和容器之间的数据共享

容器的生命周期是有限的,容器一旦销毁,内部的数据也会一并消失,所以我们创建了数据集的方式,将容器内的数据持久化的保存到宿主机

cd /opt

mkdir test1

docker run -itd --name nginx1 -v /usr/share/nginx/html: /opt/test1 -p 80:80 nginx:1.22
↓
-v:volume(数据卷,挂载卷)

-v /opt/test1: /opt/test1:ro:容器内的目录,宿主机的目录,数据卷的默认权限是rw,ro:只读模式(宿主机的目录在前,容器在后)

以宿主机的目录为准,容器的生命周期是有限的保存到宿主机的数据,可以在下一次创建容器的时候继续使用

数据卷容器:

容器和容器之间共享数据

docker run -itd --name test2 -v /opt/data1 -v /opt/data2 centos : 7

#-v:指定目录,如果没有冒号,这个目录就是容器内的数据目录,不会和宿主机挂载

docker run -itd  --name test3 --volumes -from test2 centos:7

#-volume from:另外一个容器,使用其他容器提供的数据目录,这个目录仅限于容器内数据共享,一旦容器销毁,内部的数据目录也会一并销毁

docker exec -it test2 bash

cd /opt

创建容器,指定挂载卷容器内的nginx的日志目录和宿主机挂载,nginx的映射端口为随机端口,然后访问容器,可以在主机显示日志的内容

创建容器的三要素:★★★★★★

创建容器的时候,一定要做宿主机和容器之间的端口映射(容器对外提供访问)

一定要对容器做资源限制

一定要做数据卷


dockerfile:

自定义镜像★★★(dockerfile的核心)

基于dockerfile创建,联合文件系统,UnionFs 是创建docker镜像的基础,镜像可以通过分层来进行继承,继承是基于基础的镜像,可以制作各种应用的镜像

特点一次性加载多个文件系统,但是创建好容器之后,对于用户来说只有一个文件系统

docker镜像的定制化操作,实际上就是定制每一层所添加的配置和文件等等

把所有需要的操作写入一个脚本当中,然后一键运行,就是dockerfile

dockerfile作为一个脚本,由四部分组成: ★★★★★

1、基础镜像:程序的运行环境

2、维护者信息(可选项,相当于注释)可不写

3、镜像的操作命令(自定义应用)

4、容器启动时的命令(容器没有可执行的命令,就是退出,stop状态,必须要给容器一个可执行的持久化的命令)

dockerfile的命令格式: ★★★★★

  • FROM:指定程序的基础镜像

  • MAINTAINER:维护者信息(可不写),版本较高使用的是LABEL

镜像的操作命令: ★★★★★

  • RUN :在基础镜像上运行命令,结果会提交到新镜像上,每执行一次run就相当于是镜像的一层

    run的命令太多,镜像的分层就越多,镜像越大

  • ADD:将宿主机的文件复制到镜像的内部,可以URL和解压

  • COPY:仅限于复制,将宿主机的文件复制到镜像内部,只能是宿主机的本地文件,不支持下载

  • ENV:指定镜像内的容器运行之后的环境变量

  • WORKDIR:容器的工作目录,也是进入容器之后的默认目录

  • USER:指定容器运行时的用户名或者uid

  • VOLUME:创建容器内的挂载点,可以被外部使用,既可以和宿主机挂载,也可以和容器使用

  • EXPOSE:声明容器对外的网络端口

  • ARG:用来传递变量,把宿主机的参数传递到容器内部的参数

容器启动的命令

  • CMD:指定容器运行的默认命令

  • ENTRYPOINT:指定容器运行的默认命令

CMD和ENTRYPOINT是有区别的,CMD可以给ENTRYPOINT传参,ENTRYPOINT会覆盖CMD的命令,当创建容器时,外部定义了参数,如果是CMD,会被外部的传参覆盖,只会执行外部传参的命令,但是ENTRYPOINT的命令是不会被外部传参的命令覆盖★★★★★

如果有多个cmd和entrypoint,只会执行最后一个

vim Dockerfile 
↓
FROM  centos:7

MAINTAINER "xy104"

ENTRYPOINT ["ls","-a","/opt"]
ENTRYPOINT ["ls","-a","/etc"]

CMD ["ls","/boot"]
CMD ["-lh","/usr"]

docker build -t centos:test1 .

开启镜像的制作

-t:创建完成之后给镜像指定名称和标签

.点表示直接从当前目录的dockerfile文件创建镜像

run命令在一个dockerfile当中不能太多,每执行一次run就相当于是镜像的一层

run的命令太多,镜像的分层就越多,镜像越大

RUN apt -y install nginx
RUN apt -y install httpd
RUN apt -y install nginx && apt -y install httpd

&&:在run命令中,表示连接多个命令,确保前一个命令执行成功,才会运行第二个命令

;:apt -y install nginx;apt -y install httpd

不管前面的命令是否成功,都会执行后面的目录

ll :或者(只有前面的失败了,后面的命令才会执行)

add和copy:

1、add和copy在复制文件时,表现的是一致的,尤其是复制本地文件

找和dockerfile在一个目录下的文件,自动复制到指定路径

2、解压和下载 ···························· 》add

ADD的优点:

没有格式的限制 ······················· 》解压,gz,bz2,直接跟上路径,自动解压到目标目录

ADD的缺点:在不解压的前提下,无法复制

docker用ubuntu实现nginx:1.22的编译版本,暴露端口为84,设置nginx的默认访问目录为/var/www/html

宿主机和访问目录实现挂载,限制cpu只能使用百分之10,以及一个g的内存,以上配置都要通过dockerfile自动完成

相关推荐
qq_312920117 小时前
VSCode连接远程docker环境
ide·vscode·docker
凌鲨7 小时前
OpenSeaOtter使用手册-项目简介
docker
R-sz8 小时前
如何清理docker垃圾
spring cloud·docker·eureka
UTF杠88 小时前
Sonatype Nexus OSS 构建私有docker 仓库
运维·docker·容器·开源
wit_@8 小时前
什么是docker?关于docker容器的全面详细介绍
人工智能·docker·容器·eureka·aigc·agi
qq_448941088 小时前
4、dockerfile实现lnmp和elk
docker
胡八一9 小时前
docker 部署 Kafka 单机和集群
docker·容器·kafka
hawk2014bj13 小时前
jenkins docker 遇到 /var/run/docker.sock: permission denied 解决方案
docker·jenkins
ihengshuai14 小时前
Gitlab搭建npm仓库
前端·docker·npm·gitlab