Dockerfile镜像构建

Dockerfile



在本章中,主要学习如何构建Docker镜像,其实在Docker公共仓库中已经有大量的镜像,但是并不一定满足我们对镜像的需求,所以我们需要学习如何的构建自己所需要的镜像。

Docker镜像构建


Docker镜像可以通过Docker hub或者阿里云等仓库中获取,这些镜像是由官方或者社区人员提供的,对于Docker用户来说并不能满足我们的需求,但是从无开始构建镜像成本大。常用的数据库、中间件、应用软件等都有现成的Docker官方镜像或社区创建的镜像,我们只需要稍作配置就可以直接使用。

使用现成镜像的好处除了省去自己做镜像的工作量外,更重要的是可以利用前人的经验。特别是使用那些官方镜像,因为Docker的工程师知道如何更好的在容器中运行软件。
当然,某些情况下我们也不得不自己构建镜像,比如找不到现成的镜像,比如自己开发的应用程序,需要在镜像中加入特定的功能。

Docker提供了三种构建镜像的方法:

  • docker commit命令
  • 基于本地模板导入
  • Dockerfile构建文件

Docker commmit

docker commit命令可以基于容器创建镜像,创建过程大致分为三步,先创建容器,在容器中安装我们所需要的内容,再使用docker commit将容器打包为镜像即可。

下面展示一个示例:在centos的base镜像中安装vim-common并保存为新镜像。

1、先基于centos7运行容器,容器名为axi,并使用-it生成终端进入容器。
[root@localhost ~]# docker run -it --name axi centos:7
2、在容器中安装vim-common。
[root@194e67bda157 /]# dnf -y install vim-common
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.bupt.edu.cn
 * extras: mirrors.cqu.edu.cn
 * updates: mirrors.cqu.edu.cn
base                                                                             | 3.6 kB  00:00:00     
extras                                                                           | 2.9 kB  00:00:00     
updates                                                                          | 2.9 kB  00:00:00     
(1/4): base/7/x86_64/group_gz                                                    | 153 kB  00:00:00     
(2/4): extras/7/x86_64/primary_db                                                | 247 kB  00:00:00     
(3/4): base/7/x86_64/primary_db                                                  | 6.1 MB  00:00:13     
(4/4): updates/7/x86_64/primary_db                                               |  16 MB  00:00:22     
Resolving Dependencies
--> Running transaction check
---> Package vim-common.x86_64 2:7.4.629-8.el7_9 will be installed
--> Processing Dependency: vim-filesystem for package: 2:vim-common-7.4.629-8.el7_9.x86_64
--> Running transaction check
---> Package vim-filesystem.x86_64 2:7.4.629-8.el7_9 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package                    Arch               Version                        Repository           Size
========================================================================================================
Installing:
 vim-common                 x86_64             2:7.4.629-8.el7_9              updates             5.9 M
Installing for dependencies:
 vim-filesystem             x86_64             2:7.4.629-8.el7_9              updates              11 k

Transaction Summary
========================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 5.9 M
Installed size: 21 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/updates/packages/vim-filesystem-7.4.629-8.el7_9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for vim-filesystem-7.4.629-8.el7_9.x86_64.rpm is not installed
(1/2): vim-filesystem-7.4.629-8.el7_9.x86_64.rpm                                 |  11 kB  00:00:00     
(2/2): vim-common-7.4.629-8.el7_9.x86_64.rpm                                     | 5.9 MB  00:00:27     
--------------------------------------------------------------------------------------------------------
Total                                                                   221 kB/s | 5.9 MB  00:00:27     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:vim-filesystem-7.4.629-8.el7_9.x86_64                                              1/2 
  Installing : 2:vim-common-7.4.629-8.el7_9.x86_64                                                  2/2 
  Verifying  : 2:vim-common-7.4.629-8.el7_9.x86_64                                                  1/2 
  Verifying  : 2:vim-filesystem-7.4.629-8.el7_9.x86_64                                              2/2 

Installed:
  vim-common.x86_64 2:7.4.629-8.el7_9                                                                   

Dependency Installed:
  vim-filesystem.x86_64 2:7.4.629-8.el7_9                                                               

Complete!
[root@194e67bda157 /]# 
3、退出容器后,使用docker commit将axi容器打包为镜像,新镜像名为centosac:7
[root@docker ~]# docker commit axi centosac:7
sha256:282e38de865e6063499df3829e1a6b3854a178b03976472ef3e2b8ffd40a0008
[root@docker ~]# docker images | grep centos
centosac     7         282e38de865e   24 seconds ago   391MB
centos       axi        5279aaca23bc    25 minutes ago   204MB
centos       7         6ac490b1c4a0   9 months ago     204MB
[root@docker ~]# docker run --name ac -it centosac:7 
[root@30f05c39a0c7 /]# rpm -q vim-common
vim-common-7.4.629-8.el7_9.x86_64
[root@30f05c39a0c7 /]# 

这样一个新的镜像就构建完成了,centosac:7镜像是在centos:7镜像基础之上创建的,通过查看镜像属性,发现centoscy:7要比centos:7镜像大一些。
然而,Docker并不建议用户通过这种方式构建镜像。这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。更重要的,使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患.

基于本地模板导入

用户可以直接从一个操作系统模板文件导入一个镜像,主要使用 docker [container] import 命令。命令 格式为 docker [image] import [OPTIONS] file|URL|-[REPOSITORY[:TAG]] ,要直接导入一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导入的镜像模板来创建。OpenVZ 模板的下载地址为 http://openvz.org/Download/templates/precreated。
如:下载了 ubuntu:12.04 的模板压缩包,之后使用以下命令导入即可:

[root@docker ~]# cat ubuntu-12.04-x86-minimal.tar.gz | docker import - ubuntu:12.04
sha256:88216a4bfde304bde7e1195756880acab7921b368da20e3a8591e71afc81b11e
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
ubuntu       12.04     88216a4bfde3   5 seconds ago       146MB

Dockerfil

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值