Docker镜像

#Docker镜像

  1. 获取镜像
    • docker pull –help
    • docker pull [options] [Docker registry地址]<仓库名>:<标签>
      • Docker registry地址:格式 <域名/IP>[:端口号] 默认是Docker Hub
      • docker pull ubuntu:14.04 或者 docker pull centos:6.9
        • 运行一个镜像 docker run -it –rm ubuntu:14.04 bash
  2. 列出镜像
    • docker images 列出所有的镜像
      docker images ubuntu
      docker images ubuntu:14.04
      docker images –filter since=mongo:3.2
      docker images -q 只显示hashID值
      docker images –format “{ {.ID} } : { {.Repository} }”
    • docker镜像由多层组成,多个镜像中相同的层会被复用.
    • 没有镜像名称和标签的镜像被称为 虚悬镜像,一般虚悬镜像失去了价值可以删除.
      • 显示 docker images -f dangling=true
      • 删除 docker rmi $(docker images -q -f dangling=true)
  3. 利用commit构建镜像
    通过进入容器,修改之后,把容器固化成一个镜像. docker commit [options] <容器ID或容器名> [<仓库名>[:<标签>]]
    docker commit \
    --author "Guo Jinyun <guojinyun@yeah.net>"
    --message "xxxx"
    <容器ID或容器名>
    ubuntu:v2
    
    通过 docker diff <容器ID或容器名> 可以看出文件的变化.
    慎用docker commit构建镜像,因为增加或者修改了其他没有关联的文件,如果清理不干净,导致镜像巨大.
    docker commit可以保存环境现场.
  4. Dockerfile
    Dockerfile 是一个文本文件,每行包含一条指令,每条指令构建一层,所以尽量的合并指令.
1
2
FROM nginx
RUN echo '<h1>Hello,Docker!</h1>' > /usr/share/nginx/html/index.html
- FROM 指定基础镜像,FROM 是必备指令,并且必须是第一条指令
我们可以通过官方提供的高质量的镜像开始构建.比如nginx,redis,mongo,mysql,tomcat,或者开发语言环境node,openjdk,python,golang等
- 除了基础镜像以外,还有一个scratch镜像,scratch是一个空镜像,一般将可执行文件复制到镜像,所需要的库都在执行文件中,使用GO常用这种方式.
- RUN 命令,shell格式,exec格式 RUN ["exec command","args1","args2" ]
- 每个指令建立一层,执行结束后commit这一层,构成新镜像.UnionFS 最多127层.