Docker进阶 dockerfile指令构建docker镜像

简介: Docker进阶 Dockerfile指令,编译dockerfile文件构建镜像,dockerfile常用指令,实操训练:Dockerfile构建Nginx镜像:FROM #指定基础镜像,一切从这里开始构建MAINTAINER #镜像是谁写的,姓名+邮箱RUN #镜像构建的时候需要运行的命令ADD #步骤:tomcat镜像,这个tomcat压缩包!添加内容WORKDIR #镜像的工作目录VOLUME #挂载的目录EXPOST #暴露端口配置


目录

初识Dockerfile

DockerFile

docker build . 命令

查看镜像是如何生成的

实操训练:Dockerfile构建Nginx镜像:

初识Dockerfile
Dockerfile就是用来构建docker镜像的构建文件!命令脚本!

通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层

dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单。

Dockerfile镜像之间成为了企业交付的标准,必须掌握!

编写一个自己的docker 镜像:
查看一个镜像是怎么生成的:
docker history 镜像ID或镜像名
构建步骤:
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 #构建的时候设置环境变量!
image.png

docker build . 命令
构建好dockerfile文件后,我们就用docker build命令将文件构建成镜像。

命令使用方法:

docker build -f dockerfile文件路径 -t 取个镜像名 .

参数详解:

-f dockerfile的文件路径,可以写绝对路径,也可以写相对路径

-t 给构建的镜像取个名字,名字格式: 名字:标签

. 构建上下文的路径 必须写

image.png

查看镜像是如何生成的
docker history 镜像ID
 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内容如下所示:

开始操作:
image.png

创建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"]
image.png

在该文件夹里再编写一个run.sh
vim run.sh
image.png

run.sh里的内容:

!/bin/bash

/usr/local/nginx/sbin/nginx

docker build 构建镜像
docker build -t my_build:nginx1 .
image.png

 docker images查看镜像:
image.png

 使用该镜像构建容器:
image.png

 可以看到镜像成功启动,东西也下载安装好了,工作目录设置好了,文件也复制到容器里了

相关文章
|
13天前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
167 75
|
1月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
19天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
44 3
docker push推送自己搭建的镜像
|
23天前
|
Docker 容器
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
59 9
|
1月前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
51 4
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
5月前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
405 5
|
5月前
|
存储 Ubuntu 应用服务中间件
在Docker中,怎么快速查看本地的镜像和容器?
在Docker中,怎么快速查看本地的镜像和容器?
|
6月前
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
541 5
docker常用命令大全(基础、镜像、容器、数据卷)

热门文章

最新文章