首页 > 代码库 > Docker镜像管理

Docker镜像管理

<style>td p { margin-bottom: 0cm } h2.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt } h2.cjk { font-size: 16pt } h2.ctl { font-size: 16pt } h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt } h1.cjk { font-family: "Droid Sans Fallback"; font-size: 18pt } h1.ctl { font-family: "Droid Sans Fallback"; font-size: 18pt } p { margin-bottom: 0.25cm; line-height: 120% } a:link { } code.ctl { font-family: "Liberation Mono", monospace }</style>

Docker镜像管理

概念点:

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

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

    技术分享

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

    技术分享

镜像管理命令

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

  docker history:Show the history of an image查看镜像的分层及每层做的操作(--tree可以查到详细的操作)

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命令,多条命令用&&连接 

<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>

  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

  查看时区是否改变

Docker镜像管理