相信码农们经常会听说:虚拟机将成为历史,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
- 解决拉取镜像速度慢的方法:
- 参考这篇文章:《Docker配置国内镜像站点进行加速》
- 注意: 这里不需要我们手动拉取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 容器已被成功创建;