目录
Docker镜像的创建方法
1)基于已有镜像创建(类似于最新快照,适用于保存新容器文件)
2)由本地模板创建镜像(适用于创建全新纯净版底层系统)
3)基于Dockfile创建(适用于高级服务搭建和配置)
Docker镜像除了是Docker的核心技术之外,也是应用发布的标准格式。一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境及搭建的服务生成新的镜像。
创建镜像的方法有三种分别为:
- 基于已有镜像创建
- 基于本地模板创建
- 基于Dockerfile创建
1.基于已有镜像创建(类似于最新快照,适用于保存新容器文件)
基于已有镜像创建主要使用“docker commit”命令,其实质就是把一个容器里面运行的程序及该程序的运行环境打包起来生成新的镜像。
常用的选项:
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
如:把容器id为df3b34be596c ,做成镜像111:111
[root@localhost ~]# docker ps -a //先查看容器ID
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df3b34be596c dhcp:dhcp "/entrypoint.sh" 2 days ago Exited (1) 2 days ago stoic_jennings
[root@localhost ~]# docker commit -m "newdhcp" -a "t3117" df3b34be596c 111:111 //生成镜像
sha256:454893fd71c3a491a6d0745dc7f9dc817061068546fc715dfd37f604cda9956a
[root@localhost ~]# docker images //查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
111 111 454893fd71c3 18 seconds ago 105 MB
centos7 dhcp 645089167d00 4 days ago 84.7 MB
dhcp dhcp 52cbff801df2 11 months ago 105 MB
docker.io/networkboot/dhcpd latest 52cbff801df2 11 months ago 105 MB
2.由本地模板创建镜像(适用于创建全新纯净版底层系统)
模板下载地址:wget http://download.openvz.org/template/precreated/
实验使用centos-7-x86_64-minimal.tar.gz,现实中可以按环境任意选择
[root@localhost ~]# wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz
--2020-02-19 13:15:11-- http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz
Resolving download.openvz.org (download.openvz.org)... 185.231.241.69
Connecting to download.openvz.org (download.openvz.org)|185.231.241.69|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 145639219 (139M) [application/x-gzip]
Saving to: ‘centos-7-x86_64-minimal.tar.gz’
100%[=============================================>] 145,639,219 393KB/s in 8m 37s
2020-02-19 13:23:51 (275 KB/s) - ‘centos-7-x86_64-minimal.tar.gz’ saved [145639219/145639219]
创建镜像:
[root@localhost ~]# cat centos-7-x86_64-minimal.tar.gz |docker import - docker:centos7.1
//docker后面是新的镜像名字
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker centos7.1 fe688f03fa33 35 seconds ago 435 MB
3.基于Dockfile创建(适用于高级服务搭建和配置)
除了手动生成docker镜像之外,还可以使用Dockerfile自动生成镜像。Dockerfile是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。
Dockerfile结构大致分为4个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时候执行指令。Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。
- 项描述:
- FROM centos \\指定基于的基础镜像,镜像centos必须存在
- MAINTAINER \\维护该镜像的用户信息
- RUN yum -y install openssh-server \\镜像中的操作命令,可写多条
- EXPOSE 22 \\容器开放的端口
- CMD ["/usr/sbin/sshd","-D"] \\启动容器时执行命令,可写多条但仅最后一条生效
1) 建立工作目录并进入
mkdir /root/apache
cd /root/apache
2) 编写Dockerfile文件
在编写Dockerfile时,有严格的格式需要遵循:第一行必须使用FROM指令指明所基于的镜像名字,之后使用MAINTAINER 维护该镜像的用户信息。
[root@localhost ~]# vim Dokerfile
FROM centos //这里centos是镜像名字,不是标签
#第一行必须指明基于的基础镜像
MAINTAINER The CentOS project <qinziteng>
#维护该镜像的用户信息
RUN yum -y update
RUN yum -y install openssh-server
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
#镜像操作指令
EXPOSE 22
#开启22端口
CMD ["/usr/sbin/sshd","-D"]
#启动容器时执行指令
此Dockerfile文件使用的基础镜像是centos,所以要保证首先获取此基础镜像,使用“docker pull docker.io/centos” 获取镜像,之后的容器运行才会有效.
3)编写运行脚本文件
[root@localhost apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/* //清理httpd的缓存
exec /usr/sbin/apachectl -D FOREGROUND //启动apache服务
//启动容器时,进程、脚本都要在前台启动
[root@localhost apache]# echo "qinziten" > index.html //创建首页文件
[root@localhost apache]# ls
Dockerfile index.html run.sh //保持三个文件在一个目录下
5)使用Dockerfile生成镜像
编写完成Dockerfile及相关内容后,通过“docker build”命令来创建镜像
语法:docker build [选项] 路径
常用选项“-t”指定镜像的标签信息
[root@localhost apache]# docker build -t httpd:centos .
注意后面有“.”表示当前路径
6)使用新的镜像运行容器
[root@localhost ~]# docker run -d -p 12345:80 httpd:centos
ee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243
//使用新生成的镜像加载到容器中运行
//“-p”选项实现从本地端口12345到容器中80端口的映射
[root@localhost ~]# docker ps -a //查看镜像确认结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee9adf324443 httpd:centos "/run.sh" About a minute ago Up About a minute 0.0.0.0:12345->80/tcp admiring_bardeen
秦子腾 发布了42 篇原创文章 · 获赞 5 · 访问量 1366 私信 关注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。