Docker 数据管理与网络通信

Docker 镜像的创建方法

Docker 镜像除了是 Docker 的核心技术之外也是应用发布的标准格式。一个完整的 Docker镜像可以支撑一个 Docker容器的运行。
创建镜像的三种方法:基于已有镜像创建、基于本地模板创建、基于 Dockerfile创建。

  • 1. 基于已有镜像创建
    实质是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。
docker commit [选项] 容器ID/名称 仓库名称:[标签]
#常用选项
-m :说明信息
-a :作者信息
-p :生成过程中停止容器的运行
  • 基于本地模板创建
    通过导入操作系统模板文件可以生成镜像,模板可以从 OPENVZ开源项目下载,
    http://openvz.org/Download/template/precreated。
    使用 docker导入命令将下载的 ubuntu模板压缩包导入为本地镜像。
cat ubuntu-12.04-x86_64-minimal.tar.gz |docker import - ubuntu:v12
#导入操作完成后,会返回生成镜像的ID信息。
sha256:ad4be005a6bf7ba5730221f96dbfcaadc5ceb57feaf7638543285f5a73d0b236
#查看本地镜像列表可以看到新创建的镜像信息
docker images
#REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
#ubuntu              v12                 ad4be005a6bf        26 seconds ago      149MB
  • 基于Dockerfile 创建
    可以使用 Dockerfile自动生成镜像。
    Dockerfile 是由一组指令组成的文件,其中每条指令对应 Linux中的一条命令,Docker程序将读取 Dockerfile中的指令生成指定镜像。
    Dockerfile 结构大致分为四个部分:基础镜像信、维护者信息、镜像操作指令和容器启动时执行指令。
    Dockerfile 每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。
vim Dockerfile
# 第一行必须指明基于的基础镜像
FROM centos
#维护该镜像的用户信息
MAINTAINER The CentOS Project <cloud-ops@centos.org>
#镜像操作指令
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
#开启22端口
EXPOSE 22
#启动容器时执行指令
CMD ["/usr/sbin/sshd", "-D" ]
  • 编写 Dockerfile时,需要遵循严格的格式:
  • 第一行必须使用 FROM指令指明所基于的镜像名称;
  • 之后使用 MAINTAINER 指令说明维护该镜像的用户信息;
  • 然后是镜像操作相关指令,如 RUN指令,每运行一条指令,都会给基础镜像添加新的一层;
  • 最后使用 CMD指令,来指定启动容器时要运行的命令操作。

常用的 Dockerfile操作指令

指令含义
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 命令指定所生成的镜像作为一个基础镜像时所要运行的命令。
  • 实例
    首先需要建立目录,作为生成镜像的工作目录,然后分别创建编写 Dockerfile文件、需要运行的脚本文件以及要复制到容器中的文件。
    (1) 建立工作目录
mkdir apache
cd apache

(2) 创建并编写 Dockerfile 文件

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

(3) 编写执行脚本内容

vim run.sh
#!/bin/bash
rm -rf /run/httpd/*      //清理httpd缓存
exec /usr/sbin/apachectl -D FOREGROUND    //启动 apache服务

(4) 创建测试页面

echo "web test" > index.html

(5) 使用 Dockerfile 生成镜像
编写完成 Dockerfile以及相关内容之后,可以通过 docker build 命令来创建镜像。

docker build [选项] 路径
#常用选项
-t 指定镜像的标签信息。
使用刚才编写的 Dockerfile 自动生成镜像。
docker build -t httpd:centos
  • 每运行一次 Dockerfile中的指令,都会给初始镜像加上新的一层。
    (6) 使用新的镜像运行容器
docker run -d -p 49180:80 httpd:centos
  • -p:选项实现从本地端口 49180到容器中 80端口的映射。
#查看镜像状态
docker ps -a 
#测试
curl 192.168.10.22:49180
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值