环境准备

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. BATJ面试必会之并发篇

    一.线程状态转换 新建(New) 可运行(Runnable) 阻塞(Blocking) 无限期等待(Waiting) 限期等待(Timed Waiting) 死亡(Terminated) 二.使用线程 ...

  2. 牛客网剑指offer java 全部题解

    经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...

  3. hadoop学习笔记(五):HDFS Shell命令

    一.HDFS文件命令 以下是比较重要的一些命令: [root@master01 hadoop]# hadoop fs -ls / //查看根目录下的所有文件 [root@master01 hadoop ...

  4. Mvc Moq HttpContext

    1: public class MockMvcHttpContext 2: { 3: public Moq.Mock<System.Web.HttpContextBase> Context ...

  5. java自学-运算符

    上一篇介绍了java的变量和数据类型,要对数据处理,还需要用到java运算符,这里只总结下常用的,运算符主要分为以下几类:1 算数运算符 算数运算符包括: + 加法运算 - 减法运算 * 乘法运算 / ...

  6. vue+SSM验证码实现

    源码:https://github.com/HannahLihui/StudentManager-SSM/tree/master/SSM-git/StudentManager-SSM-master 1 ...

  7. CF954F Runner's Problem

    离散化+矩阵快速幂 首先看数据范围可以确定该题的算法为矩阵快速幂 然后易得转移矩阵 \[\begin{bmatrix} 1 & 1 & 0 \\ 1 & 1 & 1 \ ...

  8. Solr常用操作命令

    1. 新建collection ./solr create_collection -c collection_vip -d /opt/lucidworks-hdpsearch/solr/server/ ...

  9. Ubuntu-16.04-Desktop +Hadoop2.7.5+Eclipse-Neon的云计算开发环境的搭建(伪分布式方式)

    主控终端 主机名 ubuntuhadoop.smartmap.com IP 192.168.1.60 Subnet mask 255.255.255.0 Gateway 192.168.1.1 DNS ...

  10. Android 对话框 (AlertDialog)

    Android 提供了 AlertDialog 类可通过其内部类 Builder 轻松创建对话框窗口,但是没法对这个对话框窗口进行定制,为了修改 AlertDialog 窗口显示的外观,解决的办法就是 ...