前言:学习Docker,仅拿别人的镜像是不够的。在公司真实项目中常常要为公司项目创建镜像(虽然大多情况下已经有前辈为我们搭建好了环境,但是我们总该能看懂,如果有兴趣更应该自己尝试搭建)。

一、Docker概述

自我理解:Docker是一个容器化平台,让开发人员可以为应用程序打包环境,移植环境。

优点:

   1. 减少开发人员和实施人员因环境差异导致对应功能产生效果不同(然后就开始互怼了);

   2. 减少上岗新人浪费大量时间配置环境等优势。

其他:Docker的模式有点类似于Maven、Git。不过Maven是依赖包自动管理,Git是代码自动管理,而Docker是整个环境自动管理。

 

二、DockerFile概述

自我理解:DockerFile相当于Docker镜像文件生成的源码。

 

我们可以去Docker-hub中打开任意一个镜像查看,例如centos

docker git 自动构建 dockerfile git_centos

 

 

 点开上述的任意一个链接就可以看到他们自己的DockerFile文件了,例如:centos8,像这些代码前面的标志就是这里要记录并学习的内容

FROM scratch
ADD centos-8-x86_64.tar.xz /
LABEL org.label-schema.schema-version="1.0"     org.label-schema.name="CentOS Base Image"     org.label-schema.vendor="CentOS"     org.label-schema.license="GPLv2"     org.label-schema.build-date="20201204"
CMD ["/bin/bash"]

 

三、DockerFile保留字指令

FROM:当前镜像继承于哪个镜像,scratch是最底层(相当于Java中的Object)

FROM scratch

MAINTAINER:作者的姓名和邮箱。

MAINTAINER zjqq6666

RUN:构建时运行的额外命令(Linux命令)。

#会在构建时安装vim
RUN yum -y install vim

EXPOSE:对外暴露的端口。

#对外暴露80端口
EXPOSE 80

ENV:设置环境变量。

#设置MY_PATH环境变量为/etc/
ENV MY_PATH /etc/

WORKDIR:容器登陆后(centos登陆后),终端默认的目录(如果不配置,则为/目录)。

#在上面如果已经使用ENV设置了环境变量,这里就直接使用
WORKDIR $MY_PATH
#如果没有设置环境变量也可以直接写死
WORKDIR /etc/

ADD:添加额外的包(压缩包等),在Copy指令的基础上还支持解压。

#添加外部包
ADD centos-8-x86_64.tar.xz /

COPY:仅添加,无解压。

#添加外部包。相比于ADD,COPY仅复制,不解压,所以引入的是压缩文件,那么它就是个文件而已
COPY centos-8-x86_64.tar.xz /
VOLUME /dataVolume

CMD:指定容器启动时运行的命令。

CMD echo "sucess-----ok"
CMD ls

ENTRYPOINT:同CMD。区别在CMD只有最后一个命令生效,其会被docker run之后的参数替换掉。但是ENTRYPOINT不会,ENTRYPOINT是在原命令的基础上append的

#当使用docker build -f dockerfile -t zjqq6666/centos:1.0 . -l 时,对于写CMD ls的会直接报错,因为-l并不是命令,而ENTRYPOINT 
ENTRYPOINT ls

 

四、利用DockerFile创建镜像

docker build -f dockerfile -t zjqq6666/centos:1.0 .

 

刚刚接触容器化,刚刚学习Docker,望各位大神多指点~