epel6的源提供febootstrap的RPM包
yum install docker-io febootstrap -y
service docker start
chkconfig docker --level35 on
復制代碼
制作CentOS6.6鏡像目錄
febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base <a href="" target="_blank"></a> -u <a href="" target="_blank"></a>
復制代碼
-i 表示鏡像裏面安裝的RPM包(包括壹些人為有必要的軟件包)
centos6 表示鏡像的版本說明
base 表示生成的鏡像目錄
後面之後了系統安裝源和更新源為USTC
安裝執行後,會開始壹系列的RPM包下載安裝,過程與yum類似,安裝完成後當前目錄會多了base目錄,裏面就是壹個鏡像的系統文件
進入base目錄等於進入鏡像的根目錄
[root@image ~]# cd base/
[root@image base]# ls
bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var
復制代碼
可以像壹般的系統文件壹樣先做壹些修改配置,例如配置第三方yum源等等
把base目錄把所有文件打包成二進制文件後導入docker創建為鏡像
cd ~/root/base/ && tar -c . | docker import - centos6:base
復制代碼
docker images 可以查看鏡像的信息
壹個基本centos鏡像創建完畢,下面再利用Dokcerfile制作mysql鏡像
cat Dockerfile
FROM centos6:base
MAINTAINER Lion "lioncui@163.com"
VOLUME /var/lib/mysql
RUN yum install mysql-server mysql -y
RUN echo -ne "NETWORKING=yes\\nHOSTNAME=mysql" > /etc/sysconfig/network
RUN echo -ne "bind-address = 0.0.0.0\\ndefault-storage-engine=innodb\\ninnodb_file_per_table\\n\
collation-server=utf8_general_ci\\ninit-connect='SET NAMES utf8'\\ncharacter-set-server = utf8" > insert
RUN sed -i "/user=mysql/r insert" /etc/my.cnf && rm -f insert
RUN echo -ne "/usr/bin/mysql_install_db\\n/usr/bin/mysqld_safe" >> /opt/mysql_start
RUN chmod 777 /opt/mysql_start
ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:
WORKDIR /opt
EXPOSE 3306
CMD /bin/sh -c mysql_start
復制代碼
FROM 聲明以centos:base鏡像為基礎
MAINTAINER 聲明鏡像的維護者信息
VOLUME 掛載本地目錄到容器裏/var/lib/mysql目錄(這是mysql默認的數據保存目錄)
由於我希望數據可以持久化防止因為容器誤刪除而丟失,所以映射到宿主本地目錄
RUN 在鏡像中執行安裝mysql
在新鏡像中寫入HOSTNAME信息,因為mysql啟動過程需要network文件
在my.cnf配置文件插入壹些修改配置
創建啟動腳本
聲明環境變量
制定默認工作目錄
EXPOSE 聲明容器需要暴露的端口號
CMD 是指鏡像生成容器後自動執行的命令,類似docker exec,這裏是自動啟動mysql服務
根據Dockerfile創建mysql服務鏡像
docker build --rm=true -t mysql:frist .
查看鏡像的樹狀關系可以發現,mysql:frist是以centos:base為父鏡像