先看一下Docker官网提示:In general, you’ll want to start with a working machine that is running the distribution you’d like to package as a parent image. 意思是你制作镜像的机器运行的系统版本要与你要制作的镜像的系统版本相同。

1、安装debootstrap

# aptitude update
# aptitude install -y debootstrap

2、查看帮助,debootstrap的使用方法

# debootstrap --help

debootstrap [OPTION]... <suite> <target> [<mirror> [<script>]]

--arch=A:set the architecture to install (use if no dpkg) [ --arch=powerpc ]
--include=A,B,C:adds specified names to the list of base packages
--no-check-gpg:avoid checking Release file signatures

3、建立debian系统到指定目录

# debootstrap --no-check-gpg --arch=amd64 --include=vim,ca-certificates,net-tools,iputils-ping,iputils-tracepath,iproute,bash,aptitude,locales-all,openssh-server,openssh-client jessie debian-jessie http://mirrors.ustc.edu.cn/debian

4、打包系统目录,并导入到docker(这里仅作测试,可以省略这一步)

# tar -C debian-jessie -c . | docker import - debian-jessie:0.0.1
sha256:10aad891ca3f1db689459b8a230146107eeb6e6f7264051b4adafff25303a3f1

5、打包系统目录,放到指定位置

# cd debian-jessie/
# tar cvzf ../jessie.tar.gz ./
# mkdir -pv /docker/imagesbuilder/opera/debian8-0.0.1/
# mv jessie.tar.gz /docker/imagesbuilder/opera/debian8-0.0.1/

6、编写dockerfile

# cd /docker/imagesbuilder/opera/debian8-0.0.1/
# tree
.
├── Dockerfile
├── jessie.tar.gz
└── source
├── authorized_keys
├── autoboot.sh
├── oupeng-alias.sh
├── oupeng-history.sh
├── sources.list
└── sshd_config # vim Dockerfile
FROM scratch
MAINTAINER KeithTt shengyongp@oupeng.com ADD jessie.tar.gz /
ADD source/sources.list /etc/apt/
ADD source/sshd_config /etc/ssh/
ADD source/authorized_keys /root/.ssh/
ADD source/oupeng-alias.sh /etc/profile.d/
ADD source/oupeng-history.sh /etc/profile.d/
ADD source/autoboot.sh /root/bin/autoboot.sh ENTRYPOINT /root/bin/autoboot.sh && /bin/bash
# cat autoboot.sh
#!/bin/bash
. /etc/profile.d/oupeng-alias.sh
. /etc/profile.d/oupeng-history.sh
services=($(grep 'Default-Start' /etc/init.d/* | grep -v '^[ ]*#' | awk -F: '{print $1":"$NF}' |sed -e 's/[\t ]\+//g'))
for((i=0;i<${#services[@]};i++))
do
levels=$(echo ${services[$i]} | awk -F: '{print $2}')
if [[ $(echo $levels |grep -c '3') -eq 0 ]];then
continue
fi
service=$(echo ${services[$i]} | awk -F: '{print $1}')
if [[ -x $service ]];then
echo "$service" >> /$$
fi
done
for p in $(cat /$$)
do
$p start
done
rm -f /$$

7、build镜像

# docker build -t oupeng/debian8:0.0.1 .
# docker images

8、启动镜像,安装项目所需要的基础程序包

# docker run -it oupeng/debian8:0.0.1
# aptitude update
# aptitude install -y lrzsz vim bash-completion nagios-nrpe-server nagios-plugins-basic supervisor nginx libc6-dev
# aptitude clean

9、安装好基础环境后,提交一个新的镜像

# docker commit -a "KeithTt <shengyongp@oupeng.com>" -m "debian-jessie-transcoder" tender_bardeen oupeng/o12_transcoder:0.1.0
# docker images
# docker save -o o12_transcoder.0.1.0.tar oupeng/o12_transcoder:0.1.0

10、将镜像加载到线上环境

# scp o12_transcoder.0.1.0.tar 117.119.33.166:/root/
# ssh 117.119.33.166
# docker load -i o12_transcoder.0.1.0.tar

11、启动容器,分配IP

# docker run -it -v /proc:/wproc -v /docker/vdisk/v01:/data -m 8G -h $(hostname)-v08 --name $(hostname)-v08 --net=none oupeng/o12_transcoder:0.1.0
# /root/bin/mkipinner.sh uy-s-123-v08 192.168.10.179 20 192.168.1.248
# ssh 192.168.10.179
# aptitude install -y locales-all

这样,一个docker虚拟机就运行起来了。

参考:

https://docs.docker.com/develop/develop-images/baseimages/

https://github.com/KingBing/blog-src/blob/master/使用 debootstrap 建立完整的 Debian 系統.org

https://www.jianshu.com/p/47c4a06a84a4

最新文章

  1. px和em区别-在font-size的 css 的使用
  2. IOS试题收集1
  3. MySQL优化之COUNT(*)效率
  4. linux的终端,网络虚拟终端,伪终端(转)
  5. canvas 之 - 精灵 钟表动画
  6. LU分解(1)
  7. uva 10026 Problem C: Edit Step Ladders
  8. 及格率 不谢 cast(cast (sum(case when res&gt;=60 then 1 else 0 end)*100/(count(1)*1.0) as float) as nvarchar)+&#39;%&#39; &#39;及格率&#39;
  9. 【转】URL和URI的区别
  10. linkin大话面向对象--java关键字
  11. UNIX环境高级编程——Linux系统调用列表
  12. C# Unity依赖注入
  13. SPLAY,LCT学习笔记(四)
  14. 对象引用 方法传参 值传递 引用传递 易错点 MD
  15. Adb 获取手机信息
  16. Report_SRW工具的基本用法(概念)
  17. Python Basics
  18. redis删除指定前缀的缓存
  19. Windows Phone 8 Programming Considerations
  20. 红茶一杯话Binder (初始篇)

热门文章

  1. 更换pip源到国内镜像
  2. JVM规范系列:总结
  3. Xamarin开发的一个简单画图程序分享
  4. libmysqlclient.so.16: cannot open shared object file: No such file or directory
  5. 树莓派3代b型静态IP设置,和ssh的wlan配置
  6. 如何启动Intel VT-X及合理利用搜索
  7. SqlDataAdapter简单介绍 (转)
  8. 第三个sprint冲刺第一阶段
  9. Python 安装 OpenCV 遇到的问题
  10. HDU 2012 素数判定