环境准备

1台centos 6.5镜像虚拟机  febootstrap、docker

febootstrap 安装

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 

yum -y install febootstrap

docker 安装

yum -y install docker-io
service docker start

使用root账号制作镜像,普通用户制作后会有各种问题:

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/  
(-i 安装package, centos6 操作系统版本,centos6-doc安装目录,最后是源地址)

执行完成后 你当前目录会生成centos6-image 目录

cd centos6-image
cp etc/skel/.bash* root/ (不拷贝,登录后Linux提示行会显示 bash-41#,而不是我们正常看到的[root@localhost ~]#)
tar -c .|docker import - centos6-base (centos6-base 为docker 镜像名称)

查看镜像

docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6-base latest 8f94e0bebd19 6 hours ago 399.4 MB

启动进入镜像

[root@192-168-0-151 build]# docker run  -itd 8f94e0bebd19 bash
2e943abb130a32830dd8580ab9345dd514b7b39597559cd08a790a8754ef56f1
[root@192-168-0-151 build]# docker exec -it 84f48b314bfa bash
[root@2e943abb130a /]#

进入镜像后,你可以安装自己的应用,我这里安装的是php 和nginx

我在/etc/init.d/ 下加入了nginx 和php-fpm 的启停脚本(可以省略)

容器里应用开机启动

容器下面多个应用启动的方法有很多种,比如supervisord、shell脚本等

我这里用的是shell 脚本的方法

mkdir /usr/local/scripts

[root@2e943abb130a scripts]# cat init-bashrc.sh
#!/bin/sh function service_start()
{
for SERVICE in nginx php-fpm sshd
do
if ! (ps ax | grep -v grep | grep $SERVICE > /dev/null)
then
/etc/init.d/$SERVICE start;
fi
done
} service_start

编辑   ~/.bashrc

[root@2e943abb130a scripts]# cat  ~/.bashrc
# .bashrc # Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -l'
alias vi='vim' /usr/local/scripts/init-bashrc.sh
# User specific aliases and functions

记得source  ~/.bashrc

退出容器 ctrl +d

提交容器为新的镜像

docker commit 2e943abb130a centos6-nginx-php56:v1
d85f477d9e00d12c380ebc442d544e0d8c9dd8ee86441e0885bb54f636c18ec1

提交成功后,docker images 会发现多出一个镜像

启动新镜像

[root@192-168-0-151 build]# docker run -it centos6-nginx-php56:v1

Starting nginx:                                            [  OK  ]
Starting php-fpm: [ OK ]
Starting sshd: [ OK ]
[root@36abc5805a89 /]#

你还可以启动时暴漏端口,修改root 密码等

这里我们可以用Dockerfile 来做,下面只是个示例,关于Dockerfile 这里就不说明了。

cat Dockerfile

FROM centos6-nginx-php56:v1
MAINTAINER Tempted
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN echo "root:123456" | chpasswd
EXPOSE 22 80
CMD ["bash"]

build 新的镜像

[root@192-168-0-151 build]# docker  build -t centos6-lnp:v1 .
Sending build context to Docker daemon 15.87 kB
Sending build context to Docker daemon
Step 0 : FROM centos6-nginx-php56:v1
---> d85f477d9e00
Step 1 : MAINTAINER Tempted
---> Running in 46ec3f0fab12
---> 4ed3d31476d0
Removing intermediate container 46ec3f0fab12
Step 2 : RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
---> Running in 48ece83ad435
---> c02f08cf9b19
Removing intermediate container 48ece83ad435
Step 3 : RUN echo "root:123456" | chpasswd
---> Running in 22d1086800ca
---> 18db13e52113
Removing intermediate container 22d1086800ca
Step 4 : EXPOSE 22 80
---> Running in 8a65e01a0e84
---> 63a5bd61ba88
Removing intermediate container 8a65e01a0e84
Step 5 : CMD bash
---> Running in 671572d70abf
---> d0c9c51584ee
Removing intermediate container 671572d70abf
Successfully built d0c9c51584ee

这时你执行docker images 会看到三个image

启动新的镜像

[root@192-168-0-151 build]# docker run -itd d0c9c51584ee bash
bc10a9e77a8c8b9eb12a7da16d6513ffa11a686d29dc86e050e702fac96a6109
[root@192-168-0-151 build]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc10a9e77a8c d0c9c51584ee "bash" 20 seconds ago Up 17 seconds 22/tcp, 80/tcp cocky_morse
[root@192-168-0-151 build]# docker  exec -it bc10a9e77a8c ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:51
inet addr:172.17.0.81 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:51/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:41 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5060 (4.9 KiB) TX bytes:5179 (5.0 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

连接

[root@192-168-0-151 build]# ssh 172.17.0.81
root@172.17.0.81's password:
Last login: Fri Nov 3 17:23:16 2017 from 172.17.42.1
[root@bc10a9e77a8c ~]#

导出镜像

docker  save centos6-lnp:v1 >centos6-lnp.tar

docker 自制CentOS 6-lnp镜像的更多相关文章

  1. 转:Docker创建centos的LNMP镜像

    转自:http://www.vckai.com/p/29  1. 安装docker 这个就不说了,不会的可以看下我之前的文章<Docker介绍及安装>. 1)启动docker # serv ...

  2. Docker创建centos的LNMP镜像

    前段时间重装了系统,今天刚好有时间,就用docker安装一个lnmp开发环境,下面是我的安装笔记. 1. 安装docker 这个就不说了,不会的可以看下我之前的文章<Docker介绍及安装> ...

  3. Docker自制CentOS镜像

    系统环境:CentOS 7.3 将yum源切换到阿里源 可以直接写成一个脚本 #!/bin/sh mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...

  4. docker on centos

    docker最好在centos7上安装,centos6.5上似乎麻烦不少 这里直接在centos7上安装,要提前装一下epel的repo yum install docker 安装就行 chkconf ...

  5. 关于Docker官方CentOS镜像无法启动mysqld的总结

    很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动. 无法正常启动表现为两种情况: 1> 初始完数据库后,mysqld启动报错 2> syst ...

  6. Docker CentOS 7.2镜像systemd问题解决办法

    docker的CentOS 7.2最新版官方镜像使用systemctl管理程序时会遇到如下错误: Failed to get D-Bus connection: Operation not permi ...

  7. 通过docker把本地AspNetCore WebAPI镜像打包到阿里云镜像仓库并在centos部署

    在centos上安装docker # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data l ...

  8. docker 启动 centos 镜像,容器会自动退出

    docker启动centos镜像有两种版本可以解决自动退出的问题: 方式一: docker run -d -it [image-ID] /bin/sh 方式二: 在启动脚本里面增加一个执行进程: 1. ...

  9. CentOS下Docker的安装及国内镜像配置

    系统,CentOS 7,最小化安装. 升级包 >$ sudo yum upgrade 安装Docker >$ sudo yum install docker 下面开始配置国内镜像.国外的实 ...

随机推荐

  1. Java I/O流-总结(InputStream,OutputStream,Reader,Writer)

    Java流总结 一. 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 • 按照流所处理的数据类型 – 字节流: ...

  2. MySql通用二进制版本在Linux(Ubuntu)下安装与开启服务

    安装mysql前可能需要其他软件的依赖,请先执行下面命令安装mysql的依赖软件 shell> apt-cache search libaio # search for info shell&g ...

  3. ARC基本原理

    基本简介 ARC是Automatic Reference Counting(自动引用计数器)的简称. ARC是ios5.0引入的新特性,完全消除手动管理内存的繁琐,编译器会自动在适合的代码里面插入适当 ...

  4. 【转】JUC下面线程池介绍

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

  5. java性能监控工具jstat

    jstat Monitors Java Virtual Machine (JVM) statistics. This command is experimental and unsupported. ...

  6. java基础题目日常思考(持续更新)

    public static void main(String[] args) { Integer a = 0; count(a); System.out.println(a); // 问题: a 输出 ...

  7. Java Swing实战(三)文本组件JTextField和密码组件JPasswordField

    接下来添加文本组件JTextField和密码组件JPasswordField. /** * @author: lishuai * @date: 2018/11/26 13:51 */ public c ...

  8. [js样式效果]具有停顿效果上下滚动方式

    一般用于公告的滚动效果 <!DOCTYPE HTML> <html> <head> <meta charset="gb2312" /> ...

  9. HTML之列表

    列表有三种类型: 有序列表:列表项使用数字来标记 无序列表:列表项使用粗体圆点(典型的小黑圆圈)进行标记. 自定义列表:自定义列表以 <dl> 标签开始.每个自定义列表项以 <dt& ...

  10. AR中的SLAM(二)

    写在前面 本文想讨论一下AR的架构和SLAM在其中的作用. AR AR的框架可以简单划分为感知和交互两部分. 感知部分主要负责信息的收集和处理.信息主要通过不同的传感器收集,包括图像.设备加速度.距离 ...