Docker镜像制作——编写Dockerfile和基础操作总结

Docker镜像制作——编写Dockerfile和基础操作总结

因为比赛项目需要,本人作为大三本科生,在之前完全没有接触docker的前提下,利用了不到一个星期的时间查阅了许多Docker镜像制作的资料,希望通过这个博客做一个学习笔记,同时帮助初次尝试Docker且需要快速制作出一个自己的镜像的朋友。如果有某些错误理解,希望大佬指正和原谅,最后希望帮助到大家。


一、Dockerfile是什么?

Dockerfile是Docker镜像的构建文件,它像一个脚本,用来告诉Docker引擎,如何将一个基础镜像不断改装成我们需要的特殊镜像,同时规定了一些我们的镜像生成容器时的操作。Dockerfile文件里面,每一行指令在执行的过程中,都会产生一个临时的容器,用来被我们的指令操作,经过一系列的操作后,Dockerfile会产生一个新的镜像,这时的镜像就可以满足我们的其他操作了。
目前Dockerfile编写需要一套它自己独有的保留字语法,合理使用这些语法,才能创建合理的、轻量的Dockerfile,接下来就让我们看看这些语法都是什么吧!


二、Dockerfile保留字和用法

所有的保留字全部需要大写,且保留字后要至少带有一个参数或语句,可以使用#进行备注。

1.FROM :基础镜像引入

FROM scratch          

引入一个名字为scratch的镜像作为基础镜像,用于之后的操作。

2.MAINTAINER:标注镜像维护者的身份信息

MAINTAINER The Centos Project .com>

备注出作者名字和作者自己的邮箱地址。

3.RUN:镜像构建时要运行的命令

RUN yum install -y git

在构建镜像时,安装一个git,RUN后面加Linux操作的命令。

4.EXPOSE:生成容器时暴露对外的端口号

EXPOSE 8080

在镜像生成容器时,容器对外的端口号为8080

5.WORKDIR:容器创建时默认的地址

WORKDIR /root/project

在镜像生成容器后,进入容器时直接到默认的工作目录/root/project下。Dockerfile如果不指定,默认为/目录下。

6.ENV:用来设置环境变量

ENV MYPATH /usr/project

定义MYPATH的地址为/usr/project,后续指令可以直接使用$MYPATH代替/usr/project

7.ADD:将宿主机的文件拷贝到容器里,并解压tar和处理URL

ADD go1.12.16.linux-amd64.tar.gz /usr/local/

go1.12.16.linux-amd64.tar.gz文件拷贝到/usr/local/目录下,并解压。

8.COPY:仅将宿主机的文件拷贝到容器里

COPY python_demo.py /usr/local/

python_demo.py文件拷贝到/usr/local/目录下。

9.VOLUME:设置镜像的数据卷,实现数据持久化

VOLUME ["/dataVolumeContainer"]

创建一个名为dataVolumeContainer的文件夹,用来和宿主机进行数据和文件的共享。

10.CMD:指定容器启动时要运行的命令,可以被运行时的参数替代

CMD echo "image-is-OK!"

容器启动时,输出相关字符串信息。如果运行docker run时添加了参数,将会覆盖Dockerfile里的内容。

11.ENTRYPOINT:指定容器启动时要运行的命令,不可被运行时参数替代

ENTRYPOINT echo "image-is-OK!"

容器启动时,输出相关字符串信息。如果运行docker run时添加了参数,也不会覆盖Dockerfile里的内容,而是追加执行。

12.ONBUILD:当构建一个被继承的Dockerfile时运行,父镜像被子继承后父镜像触发

ONBUILD RUN echo "image-is-OK!"

当父镜像被继承后,将会把字符串打印出来。


三、Dockerfile镜像创建的关键指令

我将编写一个用于运行python项目的centos系统的镜像。

1.根据Dockerfile的保留字,编写Dockerfile

我们在root/dockerproject/demo1目录下创建一个名为Dockerfile的文件,并编写内容。

sudo cd root/dockerproject/demo1
sudo touch Dockerfile
sudo vim Dockerfile          #编写完成后,保存退出
#Dockerfile里的内容
FROM centos
MAINTAINER FatTiger.com>
#将kubedemo2.py文件拷贝到容器中
COPY kubedemo2.py /usr/local/kubedemo2.py
#下载python3和相关第三方库
RUN yum install -y python3
RUN pip3 install requests
#创建容器后运行kubedemo2.py
CMD python3 /usr/local/kubedemo2.py
#指定端口
EXPOSE 80

在此保证,要拷贝的文件要和Dockerfile文件处于同一目录下。

2.根据Dockerfile生成镜像并运行

镜像编译:

docker build -f  -t <镜像名>:<版本号> .          #最后有一小点不要忽视

替换成实际路径和所需内容,例如:

docker build -f ~/kubeapp/demo1/Dockerfile -t myapp:V0.1 .

查看本机的镜像: 可以通过查看本地镜像库,检测是否成功生成镜像。

docker images

显示的结果为
结果
运行镜像

docker run -it <镜像名>:<版本号>          #如果不设置版本号,将默认为latest版本

例如,利用我们之前的镜像,生成一个容器:

docker run -it myapp:V0.1

删除指定镜像

docker rmi -f <镜像ID(IMAGE ID)>

拉取官方镜像

docker pull <镜像名>

检查Docker正在运行的容器

docker ps

了解了这些内容,我们就可以通过自己编写Dockerfile的形式,创建一些需要部署在自己集群的特殊镜像了,当然如果你想继续了解进阶级的内容,创建更加复杂的镜像文件,还需要自己继续探索。最后希望这篇博客,可以帮助到你。

你可能感兴趣的:(Docker)