Docker数据管理与网络通讯之镜像的建立方法

Docker镜像的建立方法

Docker镜像除了是Docker的核心技术以外,也是应用发布的标准格式。 一个完整的Docker镜像能够支撑一个Docker容器的运行,在Doker的整个使用过程当中,进入一个已经定型的容器以后,就能够在容器中进行操做,最多见的操做就是在容器中安装应用服务,若是要把已经安装的服务进行迁移,就须要把环境以及搭建的服务生成新的镜像。html

建立镜像的方法有三种,分别为基于已有镜像建立、基于本地模板建立以及基于Dockerfile建立。web

基于已有镜像建立

基于已有镜像建立主要使用docker commit命令。实质就是把一一个 容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。docker

命令格式: docker commit [选项] 容器ID 名称 仓库名称:[标签]apache

经常使用选项:
-m:说明信息
-a:做者信息
-p:生成过程当中中止容器的运行

查看本地镜像,建立容器,将容器提交为新的镜像,须要记住该容器的ID号vim

docker images        //查看全部镜像
docker ps -a         //查看全部容器
docker create -it jasonlix/docker-cobbler /bin/bash       //建立容器
docker commit -m "new" -a "daoke" a2c2df6c8246 daoke:test      //建立一个新的镜像
docker images

Docker数据管理与网络通讯之镜像的建立方法

基于本地模板建立

经过导入操做系统模板文件能够生成镜像,模板能够从OPENVZ开源项目下载centos

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz      //下载debian模板压缩包
cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new       //将下载的模板导入为本地镜像
docker images | grep new         //查看本地镜像

Docker数据管理与网络通讯之镜像的建立方法

基于Dockerfile建立

Dockerfile是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。bash

Dockerfile结构大体分为四个部分:基础镜像信息、维护者信息、镜像操做指令和容器启动时执行指令。Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。网络

在编写Dockerfile时,有严格的格式须要遵循:第一行必须使用FROM指令指明所基于的镜像名称;以后使用MAINTAINER指令说明维护该镜像的用户信息;而后是镜像操做相关指令,如RUN指令,每运行一条指令,都会给基础镜像添加新的一层;最后使用CMD指令,开指定启动容器时要运行的命令操做。ide

FROM镜像:指定新镜像所基于的镜像,第一条指令必须为FROM指令,每建立一个镜像就须要一条FROM指令
MAINTAINER 名字:说明新镜像的维护人信息
RUN命令:在所基于的镜像上执行命令,并提交到新的镜像中
CMD["要运行的程序","参数1","参指2"]:指定启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,若是指定多条则只有最后一条被执行
EXPOSE端口号:指定新镜像加载到Docker时要开启的端口
ENV环境变量变量值:设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录:将源文件复制到目标文件中,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录:将本地主机上的源文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME["目录"]:在容器中建立一个挂载点
USER用户名/UID:指定运行容器时的用户
WORKDIR路径:为后续的RUN、CMD、ENTRYPOINT指定工做目录
ONBUILD命令:指定所生成的镜像做为一个基础镜像时所要运行的命令
一、创建工做目录
mkdir /opt/apache
cd /opt/apache
二、建立并编写Dockerfile文件
vim Dockerfile

#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER The porject <cloud-ops@centos.org>
#镜像操做指令安装apache软件
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

Docker数据管理与网络通讯之镜像的建立方法

三、编写执行脚本内容
vim run.sh

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

Docker数据管理与网络通讯之镜像的建立方法

四、建立测试页面
echo "web test" > index.html

此时/opt/apache目录下应有三个文件
Docker数据管理与网络通讯之镜像的建立方法测试

五、使用Dockerfile生成镜像

命令格式:docker build [选项] 路径

经常使用选项:
-t:指定镜像的标签信息
docker build -t httpd:centos .      //注意别忘了末尾有"."

Docker数据管理与网络通讯之镜像的建立方法
接上图
Docker数据管理与网络通讯之镜像的建立方法
能够看到整个建立过程当中,每运行一次Dockerfile中的指令,都会给初始镜像加上新的一层。

六、使用新的镜像运行容器
docker run -d -p 1216:80 httpd:centos

-p 选项实现从本地端口1216到容器中80端口的映射
Docker数据管理与网络通讯之镜像的建立方法

七、测试
http://192.168.1.29:1216/

Docker数据管理与网络通讯之镜像的建立方法

容器中的Apache服务已经成功运行

ps:建立镜像过程当中遇到以下警告:
WARNING: IPv4 forwarding is disabled. Networking will not work.

一条命令解决问题:sysctl -w net.ipv4.ip_forward=1
相关文章
相关标签/搜索