Docker镜像管理

Docker镜像管理

概念点:

   1.新容器创建后,不依赖镜像就可以运行。镜像默认不删除

   2.镜像所占磁盘空间远小于所有镜像之和。镜像采用分层机制,相同部分独立成层,只需要存储一份就可以了。如下图Postgresql镜像,和Redmine镜像

    

   3.Docker镜像通过联合文件系统(union filesystem)将各层文件系统叠加在一起,对用户来说就是一个完整的文件系统。如下图

    

镜像管理命令

    本地镜像位置:/var/lib/docker

  镜像创建删除

    build  Build an image from a Dockerfile依据dockerfile创建镜像

      docker build -t centos:base -f /soft/docker/Dockerfile /soft

    commit  Create a new image from a container's changes以某容器为模板创建镜像

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

  镜像查看

    images  List images参数-a查看本机已有的所有镜像

    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

  查看时区是否改变

posted @ 2017-07-09 18:23  yc紫日  阅读(331)  评论(0编辑  收藏  举报