1.新容器建立後,不依賴鏡像就能夠運行。鏡像默認不刪除linux
2.鏡像所佔磁盤空間遠小於全部鏡像之和。鏡像採用分層機制,相同部分獨立成層,只須要存儲一份就能夠了。以下圖Postgresql鏡像,和Redmine鏡像redis
3.Docker鏡像經過聯合文件系統(union filesystem)將各層文件系統疊加在一塊兒,對用戶來講就是一個完整的文件系統。以下圖sql
本地鏡像位置:/var/lib/dockerdocker
build Build an image from a Dockerfile依據dockerfile建立鏡像apache
docker build -t centos:base -f /soft/docker/Dockerfile /soft
bootstrap
commit Create a new image from a container's changes
以某容器爲模板建立鏡像
ubuntu
sudo docker commit -m='A new image' --author='Aomine' 614122c0aabb aoct/apache2
centos
images List images參數-a查看本機已有的全部鏡像bash
history Show the history of an image查看鏡像的分層及每層作的操做(--tree能夠查到詳細的操做)網絡
save Save one or more images to a tar archive (streamed to STDOUT by default)鏡像導出
注:導出的鏡像導入後能夠回滾到某一層
docker save 9610cfc68e8d > /home/myubuntu-save-1204.tar
load Load an image from a tar archive or STDIN鏡像導入
docker load < /home/myubuntu-save-1204.tar
相似與linux編譯中的Makefile,咱們能夠經過Dockerfile所定義的編譯順序來編譯生成鏡像
************sameersbn/redis的dockerfile***********
FROM sameersbn/ubuntu:14.04.20170228 MAINTAINER sameer@damagehead.com ENV REDIS_USER=redis \ REDIS_DATA_DIR=/var/lib/redis \ REDIS_LOG_DIR=/var/log/redis RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y redis-server \ && sed 's/^daemonize yes/daemonize no/' -i /etc/redis/redis.conf \ && sed 's/^bind 127.0.0.1/bind 0.0.0.0/' -i /etc/redis/redis.conf \ && sed 's/^# unixsocket /unixsocket /' -i /etc/redis/redis.conf \ && sed 's/^# unixsocketperm 755/unixsocketperm 777/' -i /etc/redis/redis.conf \ && sed '/^logfile/d' -i /etc/redis/redis.conf \ && rm -rf /var/lib/apt/lists/* COPY entrypoint.sh /sbin/entrypoint.sh RUN chmod 755 /sbin/entrypoint.sh EXPOSE 6379/tcp VOLUME ["${REDIS_DATA_DIR}"] ENTRYPOINT ["/sbin/entrypoint.sh"]
FROM:表示該鏡像建立基於何鏡像
MAINTAINER:該鏡像建立者
ENV:設置環境變量
USER:指定運行容器的用戶
RUN:運行SHELL命令,多條命令用&&鏈接
COPY:將編譯機本機文件拷貝到鏡像文件系統中
ADD:將文件<src>拷貝到container的文件系統對應的路徑<dest>;
附:COPY和ADD區別:
ADD支持網絡拷貝;ADD支持解壓縮。
EXPOSE:指定監聽的端口
VOLUME:能夠將本地文件夾或者其餘container的文件夾掛載到container中。
WORKDIR:切換目錄用,能夠屢次切換(至關於cd命令),對RUN,CMD,ENTRYPOINT生效
ENTRYPOINT:制定建立的新容器的啓動腳本,只能夠有一個ENTRYPOINT,多餘只會執行最後一個
CMD:容器啓動後執行的命令,之能夠有一個CMD,多條只會執行最後一個;
CMD的命令會被docker run ... + command最後的command替換,以下圖
基礎鏡像的製做,以ubuntu 14.04(代號爲trusty)
鏡像代號查詢https://en.wikipedia.org/wiki/Ubuntu_version_history
sudo apt-get install debootstrap
使用debootstrap製做鏡像
sudo debootstrap --arch amd64 trusty ubuntu-trusty http://mirrors.163.com/ubuntu/
sudo debootstrap --arch [平臺] [發行版本代號] [目錄]
cd ubuntu-trusty
sudo cp usr/share/zoneinfo/Asia/Shanghai etc/localtime
更改時區
cd ubuntu-trusty
sudo tar -c . | docker import - ubuntu1404-baseimage:1.0
生成基礎鏡像並提交生成的基礎鏡像
docker images
查看本地倉庫中提交的鏡像
docker run -t -i ubuntu1404-baseimage:1.0 /bin/bash
啓動並進入容器
cat /etc/issue
查看時區是否改變