Docker基础镜像-从iso到image

操作系统:centos 6.5及以上

一、安装:

1、配置epel源: 
yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
2、安装 docker-io febootstrap 
# febootstrap用来制作centos镜像的工具
yum install docker-io febootstrap -y

3、安装完成后挂cgroup文件系统
vim /etc/fstab
添加一行:
none            /sys/fs/cgroup      cgroup  defaults    0 0


这一步似乎不是必须的,docker安装过程自动会挂载 cgroup。重启也会自动挂载cgroup

centos 默认并没有挂载cgroup文件系统,安装docker启动之后会cgroup会自动挂载到/sys/fs目录中
?

 


4、docker启动

 chkconfig docker on

 docker 开机后会自动启动,如果没有启动可以手动启动:docker -d & 或者service docker start 

二、使用iso来制作一个Centos 6.5 镜像

1、使用febootstrap制作CentOS镜像文件centos6-image目录
febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim -i openssh-server -i openssh-clients -i tar -i gzip centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/
 这里用的是http://mirrors.aliyun.com/centos/6/os/x86_64/这个镜像,我们可以使用自己的iso文件挂载到本地文件系统。

在Linux中挂载ISO文件 

mount -o loop filename.iso /cdrom
其中 filename.iso 是需要挂载的 ISO 文件的文件名,而 /cdrom 则是作为挂载点的目录,也就是说挂载之后 ISO 文件中的内容可以在该目录中找到,需要注意的是如果使用其他目录的话需要保证该目录已经存在

-i 镜像所需要安装的工具:把-i后面的参数传递给yum来实现安装,上面安装了ssh服务

centos6 是centos版本

centos6-image 是指定目录

命令的执行完成后,会在当前目录下生成一个目录centos6-image

 

bash-4.1.2#
bash-4.1.2#
bash-4.1.2# ls 
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
bash-4.1.2# ls -a root

这时root目录下没有任何文件,也不没有隐藏的点文件,如:.bash_logout  .bash_profile  .bashrc

如果这时制作出来的镜像使用ssh登录,会直接进入根目录下,如下:


bash-4.1.2#
bash-4.1.2#
bash-4.1.2# ls 
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
bash-4.1.2# ls -a root
. ..

这些文件可以自己新建。 为了避免这种情况,可以在centos6-image目录的root目录把.bash_logout  .bash_profile  .bashrc这三个文件设置一下

2、下面来创建一个基本的镜像
cd centos6-image && tar -c .|docker import - centos6-base

命令完成后,使用docker images来查看

docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6-base          latest              a01c3d440db8        1 minutes ago        311.3 MB

此时一个基本的镜像已完成

3、下面来用Dockerfile文件来创建一个可以ssh登录的镜像
#Dockerfile
FROM centos6-base
MAINTAINER zhou_mfk <zhou_mfk@163.com>
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
RUN echo 'root:redhat' | chpasswd
RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
RUN yum install tar gzip gcc vim wget -y
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
CMD /usr/sbin/sshd -D
#End
4、使用上面的Dockerfile文件来创建一个可ssh登录的镜像
docker build -t centos6- ssh   .

build: Build a container from a Dockerfile 这个是创建一个容器从Dockerfile文件

docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image

. 表示在当前目录下

docker build -t centos6-ssh /root/images/abc  这个表示Dockerfile文件在:/root/images/abc下

命令执行完成后,centos6-ssh镜像就创建完成了,

查看一下:

docker images

REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

centos6-ssh           latest              b8ca70e7adee        1 hours ago        311.3 MB

centos6-base          latest              a01c3d440db8        2 hours ago        311.3 MB

下面创建一个容器来登录下:

docker run -d -p 127.0.0.1:2222:22 centos6-ssh

ssh root@127.0.0.1 -p 2222

输入密码:redhat

即可登录了。

### 将 Docker 镜像转换为 ISO 文件的方法 将 Docker 镜像转换为 ISO 文件并不是一个常见的操作,因为两者的设计目标不同:Docker 镜像是为了轻量级容器化应用而设计的,而 ISO 文件通常用于创建操作系统启动盘或虚拟机磁盘。然而,在某些特殊场景下(例如需要在传统环境中部署基于 Docker 的应用程序),这种需求可能会存在。 以下是实现这一过程的一种方法: #### 方法概述 可以通过以下步骤将 Docker 镜像导出并最终转化为 ISO 文件: 1. **导出 Docker 镜像到 tar 文件** 使用 `docker save` 命令可以将 Docker 镜像保存为一个 `.tar` 文件。 ```bash docker save -o my_image.tar my_image_name ``` 2. **提取镜像中的文件系统** 导出后的 `.tar` 文件包含了镜像的所有层及其元数据。如果只需要其中的文件系统部分,则可以在运行该镜像的一个临时容器中复制其根文件系统。 ```bash docker run --name temp_container -d my_image_name /bin/sh -c "while true; do sleep 1000; done" docker cp temp_container:/ my_filesystem/ docker rm -f temp_container ``` 这样会将整个文件系统复制到主机上的 `my_filesystem/` 目录中[^1]。 3. **准备 ISO 文件结构** 创建一个新的目录作为 ISO 文件的基础结构,并将之前提取的文件系统放入此目录中。 ```bash mkdir iso_root cp -r my_filesystem/* iso_root/ ``` 4. **生成 ISO 文件** 使用工具如 `mkisofs` 或者更现代的替代品来生成 ISO 文件。 ```bash mkisofs -o output.iso -V "My_Docker_Image" -J -r iso_root/ ``` 如果系统未安装 `mkisofs`,可通过包管理器安装它(例如在 Ubuntu 中执行 `sudo apt-get install genisoimage`)。 5. **验证生成的 ISO 文件** 可以挂载生成的 ISO 文件以确认其内容是否正确。 ```bash sudo mount -o loop output.iso /mnt ls /mnt sudo umount /mnt ``` 以上流程能够有效地将 Docker 镜像的内容封装进一个可引导或者分发的 ISO 文件之中[^4]。 --- ### 注意事项 - 转换过程中需要注意源镜像的具体用途以及目标环境的要求。并非所有的 Docker 镜像都能直接适用于传统的物理机或虚拟机环境。 - 对于复杂的应用程序堆栈来说,可能还需要额外配置诸如服务初始化脚本、网络设置等内容才能让它们正常工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值