Dockerfile的初体验+创建私有仓库

本文介绍如何使用Dockerfile构建Apache镜像,并详细解析Dockerfile指令。此外,还介绍了基于现有容器和本地模板创建镜像的方法,以及如何搭建Docker私有仓库。

Dockerfile的初体验+本地私有仓库

一: Dockerfile简述

  • Docker在运行之前,需要以镜像作为基础环境,可以说镜像是整个Docker容器创建的关键,而创建镜像的三种方法中基于Dockerfile创建的方法使用最为灵活。

  • Dockerfile可以看作是被Docker程序所解释翻译的脚本,是由一组命令集合而成,每条命令对应一条操作指令,由docker翻译为Linux下的具体命令。用户可以通过自定义其内容来快速创建镜像。

  • 在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化,所以Docker镜像是分层的

  • 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 命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
  • 我们构建镜像一般有三种方式:

    1、基于Dockerfile(最常用)创建

    2、基于已有的镜像容器进行创建镜像

    3、基于本地模板进行构建

  • Docker镜像的分层

    Dockerfile中每个指令都会创建一个新的镜像层

    镜像层将被缓存和复用

    当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效

    某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效

    镜像层是不可变的,如果在某一层中添加一个文件,然后再下一层中删除它,则镜像中依然会包含该文

  • 什么是Dockerfile?

    Dockerfile是由一组指令组成的文件

    Dockerfile结构分成四个部分:

    1、基础镜像信息

    2、维护者信息

    3、镜像操作指令

    4、容器启动时指定指令

二: 基于Dockerfile构建Apache镜像

1、编写Dockerfile文件

mkdir apache
cd apache
cat > Dockerfile <<-'EOF'
#1.基于的基础镜像
FROM centos:7
#2.维护镜像的用户信息
MAINTAINER this is kgc
#3.更新yum源,安装httpd
RUN yum -y update
RUN yum install -y httpd
#4.暴露容器内部端口
EXPOSE 80
#5.复制网站首页文件
ADD index.html /var/www/html/index.html
#6.将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#7.启动容器时执行的脚本
CMD ["/run.sh"]
EOF

2.编写执行脚本与首页内容

[root@docker apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*	'//清除缓存'
exec /usr/sbin/apachectl -D FOREGROUND	'//启动apache'
[root@docker apache]# echo "web test" > index.html

3、生成镜像

docker build -t httpd:centos .

4.新镜像运行容器

docker run -d -p 8081:80 httpd:centos

5.测试容器

mark

三: 基于已有的容器创建镜像

  • 创建容器
root@docker01<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值