Docker鏡像管理

Docker鏡像管理

概念點:

   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 /softbootstrap

    commit  Create a new image from a container's changes以某容器爲模板建立鏡像ubuntu

      sudo docker commit -m='A new image' --author='Aomine' 614122c0aabb aoct/apache2centos

  鏡像查看

    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

Dockerfile

  相似與linux編譯中的Makefile,咱們能夠經過Dockerfile所定義的編譯順序來編譯生成鏡像

************sameersbn/redisdockerfile***********
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>

    附:COPYADD區別:

      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

  查看時區是否改變

相關文章
相關標籤/搜索