手把手教你用 Docker 构建自己的 CentOS 基础镜像

相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!!

事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。

好文章 记得收藏+点赞+关注额 !!!

---- Nick.Peng


一、准备CentOS基础镜像

  • 常用的国内 Docker 仓库:
    • 阿里云: https://promotion.aliyun.com/ntms/act/kubernetes.html
    • DaoCloud: https://hub.daocloud.io/repos/bf207788-d7de-4044-bdeb-521a998f748b
  • 解决拉取镜像速度慢的方法:
  • 注意: 这里不需要我们手动拉取CentOS镜像,下面我们在写Dockerfile时,用FROM指定基础镜像,在build时会为我们自动下载基础镜像;

二、撰写Dockerfile

  • 一个 docker 镜像的好坏取决于 Dockerfile 写的好不好,写好的Dockerfile以及解释如下:

    #
    # MAINTAINER        Nick,Y.Peng <[email protected]>
    # DOCKER-VERSION    1.6.2
    #
    # Dockerizing CentOS7: Dockerfile for building CentOS images
    #
    
    # 构建Docker镜像必须要有一个基础镜像,即父镜像(可从官网pull也可自己制作)
    FROM       centos:centos7.1.1503
    # 指定维护者信息
    MAINTAINER Nick,Y.Peng <[email protected]>
    
    # 设置时区环境变量(ENV环境变量在Dockerfile中可以写多个)
    # 这些指定的环境变量,后续可以被RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量
    ENV TZ "Asia/Shanghai"
    ENV TERM xterm
    
    # ADD:添加/拷贝文件到container里面,还有一个拷贝命令是COPY
    # 两者的区别如下:
    # 前者比后者多两个功能;
    #     1. 可直接将url对应的文件直接复制到container里面;
    #     2. 如果复制的是tar压缩包文件,用ADD拷贝结束后会自动帮我们解压;
    ADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo
    ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo
    
    # RUN 后面是要执行的命令,每执行一条指令就是一层,所以Dockerfile采用的是分层的技术
    RUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
        yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
        yum install -y --enablerepo=epel pwgen python-pip && \
        yum clean all
    
    RUN pip install supervisor  # 安装进程管理工具
    ADD supervisord.conf /etc/supervisord.conf  # 添加进程管理工具的主配置文件到指定目录下,一般是/etc目录
    
    RUN mkdir -p /etc/supervisor.conf.d && \    # 为进程管理工具新建一个目录,用来存放启动其他服务的配置文件
        mkdir -p /var/log/supervisor            # 新建进程管理日志目录
    
    EXPOSE 22   # Docker服务器开放的端口,供容器外部连接使用(在启动容器时做端口映射)
    
    # 如果有多条ENTRYPOINT语句,那么只有最后一条生效
    # ENTRYPOINT指的是container每次启动的时候需要执行的命令
    ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
    

三、构建Docker镜像

  • 准备文件明细如下:
    在这里插入图片描述
  • 执行命令: docker build -t csphere/centos:7.1 .
  • 命令解析: 后面.的意思是指 Dockerfile 所在目录的相对路径,这里 Dockerfile 在当前路径下,所以用.表示,如果不在当前路径,就写相对路径,例如:./xxx
  • 构建进行中, 如图:
    在这里插入图片描述
  • 构建成功, 如图:
    在这里插入图片描述
  • 验证是否构建成功: 在终端输入命令:docker images,如下图 centos:7.1 已被我们成功构建;
    在这里插入图片描述

四、生成Docker容器

  • 通过我们刚刚构建的 Docker 镜像,生成 Docker 容器;
  • 创建容器命令如下:
    docker run -d -p 2222:22 --name centos_base csphere/centos:7.1
  • 查看是否创建成功:
    输入命令:docker ps -a,如图,centos_base 容器已被成功创建;
    在这里插入图片描述

发布了168 篇原创文章 · 获赞 578 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/PY0312/article/details/104666805