首页 > 代码库 > Docker镜像管理
Docker镜像管理
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/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命令,多条命令用&&连接
<style>p { margin-bottom: 0.25cm; line-height: 120% } a:link { }</style>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
查看时区是否改变
Docker镜像管理