因为比赛项目需要,本人作为大三本科生,在之前完全没有接触docker的前提下,利用了不到一个星期的时间查阅了许多Docker镜像制作的资料,希望通过这个博客做一个学习笔记,同时帮助初次尝试Docker且需要快速制作出一个自己的镜像的朋友。如果有某些错误理解,希望大佬指正和原谅,最后希望帮助到大家。
Dockerfile是Docker镜像的构建文件,它像一个脚本,用来告诉Docker引擎,如何将一个基础镜像不断改装成我们需要的特殊镜像,同时规定了一些我们的镜像生成容器时的操作。Dockerfile文件里面,每一行指令在执行的过程中,都会产生一个临时的容器,用来被我们的指令操作,经过一系列的操作后,Dockerfile会产生一个新的镜像,这时的镜像就可以满足我们的其他操作了。
目前Dockerfile编写需要一套它自己独有的保留字语法,合理使用这些语法,才能创建合理的、轻量的Dockerfile,接下来就让我们看看这些语法都是什么吧!
所有的保留字全部需要大写,且保留字后要至少带有一个参数或语句,可以使用#
进行备注。
FROM scratch
引入一个名字为scratch
的镜像作为基础镜像,用于之后的操作。
MAINTAINER The Centos Project .com>
备注出作者名字和作者自己的邮箱地址。
RUN yum install -y git
在构建镜像时,安装一个git
,RUN后面加Linux操作的命令。
EXPOSE 8080
在镜像生成容器时,容器对外的端口号为8080
。
WORKDIR /root/project
在镜像生成容器后,进入容器时直接到默认的工作目录/root/project
下。Dockerfile如果不指定,默认为/
目录下。
ENV MYPATH /usr/project
定义MYPATH的地址为/usr/project
,后续指令可以直接使用$MYPATH
代替/usr/project
。
ADD go1.12.16.linux-amd64.tar.gz /usr/local/
将go1.12.16.linux-amd64.tar.gz
文件拷贝到/usr/local/
目录下,并解压。
COPY python_demo.py /usr/local/
将python_demo.py
文件拷贝到/usr/local/
目录下。
VOLUME ["/dataVolumeContainer"]
创建一个名为dataVolumeContainer
的文件夹,用来和宿主机进行数据和文件的共享。
CMD echo "image-is-OK!"
容器启动时,输出相关字符串信息。如果运行docker run
时添加了参数,将会覆盖Dockerfile里的内容。
ENTRYPOINT echo "image-is-OK!"
容器启动时,输出相关字符串信息。如果运行docker run
时添加了参数,也不会覆盖Dockerfile里的内容,而是追加执行。
ONBUILD RUN echo "image-is-OK!"
当父镜像被继承后,将会把字符串打印出来。
我将编写一个用于运行python项目的centos系统的镜像。
我们在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文件处于同一目录下。
镜像编译:
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的形式,创建一些需要部署在自己集群的特殊镜像了,当然如果你想继续了解进阶级的内容,创建更加复杂的镜像文件,还需要自己继续探索。最后希望这篇博客,可以帮助到你。