初识 Dockerfile
Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层
dockerfile 是面向开发的,我们以后要发布项目,作镜像,就需要编写 dockerfile 文件,这个文件十分简单。
Dockerfile 镜像之间成为了企业交付的标准,必须掌握!
编写一个自己的 docker 镜像:
查看一个镜像是怎么生成的:
点击并拖拽以移动
构建步骤:
1、编写一个dockerfile文件
2、docker build 构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
复制代码
点击并拖拽以移动
编写 Dockerfile 文件:
#创建一个dockerfile文件,名字可以随机,建议Dockerfile
#文件中的内容:指令(大写) 参数
#实例测试:
#创建目录存放dockerfile文件的目录:
[root@localhost ~]# mkdir docker_test
#进入目录创建dockerfile文件:
[root@localhost ~]# mkdir docker_test
[root@localhost ~]# cd docker_test/
[root@localhost docker_test]# touch dockerfile
#编写dockerfile文件,在文件中写入dockerfile指令:
[root@localhost docker_test]# vim dockerfile
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
复制代码
点击并拖拽以移动
将 Dockerfile 文件转为镜像:
#使用docker build . 命令将dockerfile文件转为镜像
[root@localhost docker_test]# docker build -f /root/docker_test/dockerfile -t hzw/centos .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in d4b23ae86ace
Removing intermediate container d4b23ae86ace
---> 8f39792fbef7
Step 3/4 : CMD echo "----end----"
---> Running in 1bb4751f04ef
Removing intermediate container 1bb4751f04ef
---> 2e2bb5e2a502
Step 4/4 : CMD /bin/bash
---> Running in 82a0b5905405
Removing intermediate container 82a0b5905405
---> 39a1fd86fd73
Successfully built 39a1fd86fd73
Successfully tagged hzw/centos:latest
#由此可以发现docker创建镜像也是一层层创建的。每个命令都是镜像的一层。
复制代码
点击并拖拽以移动
查看自己构建的 docker 镜像
[root@localhost docker_test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hzw/centos latest 39a1fd86fd73 2 minutes ago 231MB
复制代码
点击并拖拽以移动
使用自己构建的 docker 镜像生成容器:
[root@localhost docker_test]# docker run -it hzw/centos /bin/bash
[root@f62a714bb306 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
#可以看见我们构建的镜像也是能正常进去使用的,并且我们在dockerfile写指令挂载的目录也在这个容器里。
复制代码
点击并拖拽以移动
DockerFile
dockerfile 时用来构建 docker 镜像文件!命令参数脚本!构建步骤:
1、编写一个 dockerfile 文件
2、docker build . 构建称为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)
Dockerfile 指令:
FROM #指定基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOST #暴露端口配置
CMD #指定这个容器启动时候要运行的命令,Dockerfile里有多个CMD指令的话,只有最后一个CMD指令会生效,可被替代
ENTRYPOINT #指定这个容器其董事会要运行的命令,可以追加命令
ONBUILD #当构建一个被继承dockerfile,这个时候就会运行ONBUILD的指令。是一个触发指令
COPY #类似ADD,将我们文件拷贝到镜像
ENV #构建的时候设置环境变量!
复制代码
点击并拖拽以移动
点击并拖拽以移动
编辑
docker build . 命令
构建好 dockerfile 文件后,我们就用 docker build 命令将文件构建成镜像。
#命令使用方法:
docker build -f dockerfile文件路径 -t 取个镜像名 .
#参数详解:
-f dockerfile的文件路径,可以写绝对路径,也可以写相对路径
-t 给构建的镜像取个名字,名字格式: 名字:标签
. 构建上下文的路径 必须写
复制代码
点击并拖拽以移动
查看镜像是如何生成的
点击并拖拽以移动
docker 命令总结:
点击并拖拽以移动
编辑
实操训练:Dockerfile 构建 Nginx 镜像:
编写 Dockerfile 制作镜像,生成镜像名为 my_build:Nginx1。首先创建目录 dockerfile-nginx1,保存 Dockerfile 文件。具体要求如下:
(1)基于镜像 centos:7
(2)安装 Nginx
a.安装相关依赖
b.下载并解压 Nginx
(3)工作目录设为:nginx-1.9.7
(4)编译安装 Nginx
(5)对外暴露 80,443 端口
(6)修改 Nginx 配置文件,以非 daemon 方式启动
(7)复制服务启动脚本并设置权限
(8)启动容器时执行脚本 run.sh
run.sh 内容如下所示:
开始操作:
创建 dockerfile-nginx1 文件夹,进入该文件夹,编写 Dockerfile 文件
mkdir dockerfile-nginx1
cd dockerfile-nginx1/
vim Dockerfile
复制代码
点击并拖拽以移动
点击并拖拽以移动
编辑
编写 Dockerfile 文件内容:
#该文件时基于centos7镜像为基础创建的
FROM centos:7
#下载nginx依赖源
RUN yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
#下载wget
RUN yum install -y wget
#下载nginx
RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz
#解压nginx
RUN tar -zxvf nginx-1.9.7.tar.gz
#执行编译命令,通过--prefix=安装目录,指定nginx安装目录
RUN ./configure --prefix=/usr/localinx && make && make install
#设置工作目录
WORKDIR nginx-1.9.7
#暴露端口80和443
EXPOSE 80
EXPOSE 443
#将虚拟机文件复制到容器里
ADD run.sh /run.sh
#给run.sh授予可执行权限
RUN chmod 775 /run.sh
#启动容器后执行run.sh脚本
CMD ["/run.sh"]
复制代码
点击并拖拽以移动
点击并拖拽以移动
编辑
在该文件夹里再编写一个 run.sh
vim run.sh
run.sh里的内容:
#!/bin/bash
/usr/local/nginx/sbin/nginx
复制代码
点击并拖拽以移动
点击并拖拽以移动
编辑
docker build 构建镜像
docker build -t my_build:nginx1 .
点击并拖拽以移动
编辑
docker images 查看镜像:
点击并拖拽以移动
编辑
使用该镜像构建容器:
点击并拖拽以移动
编辑
可以看到镜像成功启动,东西也下载安装好了,工作目录设置好了,文件也复制到容器里了
评论