环境准备

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. video 安卓ios系统 浏览器 全屏播放以及自动播放的问题

    ios自动播放 <body onload="load()"> <div class="result_box"> <div clas ...

  2. JSON必知必会

    知识点比较杂,简单的以列表形式罗列知识点 1.json是基于javascript对象字面量的,所以他们看起来很像.但是js对象字面量不需要给名称-值对中的名称两边加上双引号.而在JSON中,却是必要的 ...

  3. .net WINFORM的GDI双缓冲的实现

    有时候在窗体中执行不断的GDI+操作的时候会出现闪速的状况,除了修改窗体的参数,更应该解决刷新本身的问题,双缓冲可能就是这样来的. 方法1: 用GDI绘制在位图上,然后再重新生成位图 Bitmap b ...

  4. THINK PHP 学习笔记20171115

    Part1:框架目录project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录(可更改) │ ├─index 模块目录(可更改) │ │ ├─co ...

  5. springboot +element-axios跨域请求

    1.初始化element项目 1.1:vue init webpage '项目名称' 1.2:npm i element-ui -S 1.3:在main.js添加 import ElementUI f ...

  6. idea创建maven的web工程

    然后一路点next 接下去添加tomcat 成功 控制台出现乱码的话 输入:-Dfile.encoding=UTF-8 控制台乱码解决

  7. Java - 数组JVM角度详解

    http://developer.51cto.com/art/201001/176671.htm

  8. js返回一组日期中最近连续的天数

    用js获取一组日期(并把当天算入)中连续的天数 刚开始可能想到单纯的比较日期大小判断连续, 而又有大小月,平闰年这些因素,还是时间戳来的安全; 首先得有一组日期,比如: var arr = [ '20 ...

  9. http常见状态码有哪些?

    ajax常见面试题 1:什么是ajax?ajax作用是什么? 异步的javascript和xml AJAX 是一种用于创建快速动态网页的技术. ajax用来与后台交互 2:原生js ajax请求有几个 ...

  10. IIS 部署 Python Django网站流程(受够了野路子)

    知道的,百度上搜出来的东西质量令人唏嘘.当你求助的时候多半还得靠自己,或者靠Google 介入正题,详细来一遍流程吧 当然,我是用Visual Studio 2019 来编辑开发Django项目的,如 ...