使用Docker快速部署不同版本CentOS容器

本文是快速部署CentOS系列Docker容器的快速指南

下载各个系列CentOS docker基础镜像

  • 下载CentOS 5/6/7 版本基础镜像

sudo docker pull centos:5
sudo docker pull centos:6
sudo docker pull centos:7
  • 检查下载的镜像:

sudo docker images

可以看到如下输出

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   196e0ce0c9fb        5 weeks ago         197 MB
docker.io/centos    6                   5dedbd63518e        6 weeks ago         194 MB
docker.io/centos    5                   1ae98b2c895d        14 months ago       285 MB

启动各版本创建一个基础容器

CentOS5容器

sudo docker run -it --hostname centos5 --name centos5 docker.io/centos:5 /bin/bash

注意:CentOS 5已经停止镜像,但是可以通过 http://vault.centos.org/5.11/ 下载更新,所以编辑 /etc/yum.repos.d/CentOS-Vault.repo(只需要这个配置文件就可以)

这里同时激活了base-sourceupdates-source源,可以方便下载SRPM进行自己的编译安装。

补充:

但是CentOS 5系列依然缺少一些基础软件(例如git),可参考CentOS 5平台通过yum安装git方法,添加EPEL的软件仓库作为补充:

CentOS6容器

CentOS7容器

升级和安装

  • 进入容器安装必要的软件包

默认的docker镜像中不安装ssh客户端(5)或ssh服务器(7),并且CentOS 7不安装 initscripts 软件包,则会缺乏/etc/rc.d/init.d/functions这样的/etc/init.d目录下sysv基础脚本,会导致一些传统脚本失效或报错(例如,无法执行sshd-keygen)。

  • CentOS 5/6激活sshd

  • CentOS 7激活sshd

CentOS 7上也可以使用sshd-keygen来生成服务器的key,然后就可以启动/usr/sbin/sshd

实际轻量级微服务部署的docker,不需要安装如此多的软件,应该部署一个精简容器,只启动必要的服务 - 下次实践一个Django容器

制作镜像

此后检查镜像

使用镜像创建容器

  • centos 5

  • centos 6

  • centos 7

添加ssh密钥

  • 通过Dockerfilei添加ssh密钥

为了实现ssh登陆到docker容器中,建议使用的是密钥登陆方式。docker支持将host主机中的文件添加到容器中,可以在Dockerfile使用的指令是ADD。此外,在docker build指令时候,也可以通过--build-arg将host主机上的密钥内容转换成变量传递给docker,以便在Dockerfile中引用。

参考 Using SSH keys inside docker container

举例,以下添加一个github账号的私钥到容器中,以便能够方便开发

以下Dockerfile中将源代码目录复制到docker容器中,并且将私钥复制到容器中,安装nodejs模块,映射端口,最后启动服务,是一个比较完整的案例,值得参考

Using SSH Private keys securely in Docker build也有一个比较有意思的解决方法,是通过在docker容器中运行wget,从host主机的一个本地运行的web服务器上下载密钥,也算一种解决方法:

通过Dockerfile创建镜像

上述手工完成的工作,可以改写成Dockerfile如下

  • Dockerfile

  • 执行命令

  • 从构建的镜像启动容器

Last updated

Was this helpful?