安装docker
#yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
本章将介绍更多关于镜像的内容,包括:
从仓库获取镜像;
命令:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] #默认拉取的是dockerhub中的镜像
例如:拉取nginx镜像
[root@localhost ~]# docker pull nginx
管理本地主机上的镜像:
1.列出镜像
docker image ls
列表包含了 仓库名 、 标签 、 镜像 ID 、 创建时间 以及 所占用的空间 。
2.查看镜像占用硬盘大小
3.列出某个镜像
[root@localhost ~]# docker image ls nginx
4.以特定的格式显示镜像
5.删除本地镜像
命令:$ docker image rm [选项] <镜像1> [<镜像2> ...]
docker image rm ID
docker image rm 镜像名称
使用docker image ls来配合删除
例如:删除一个名为redis的镜像
docker image rm $(docker image ls -q redis) #-q参数可以显示镜像id
例如:删除redis:2.2之前的镜像
docker image rm $(docker image ls -q -f before=redis:2.2)
例如:删除所有镜像
docker image rm $(docker image ls -q )
6.在容器中修改了文件,查看修改了哪些内容:可以使用docker diff命令
docker diff显示结果中有三种状态
A 添加了一个文件或目录B 文件或目录被删除C原文出自7.docker commit保存容器为镜像,一般用来保留现场,和虚拟机的快照功能比较相似
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。这点和 git
版本控制相似,不过这里这些信息可以省略留空。
8.Dockerfile制作镜像
Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容
FROM:
使用docker制作镜像的时候大部分情况下需要在原有的镜像基础上进行部署,当然也有不需要基于基础镜像的
的情况,例如swarm、coreos、etcd.
需要制定基础的镜像的时候可以使用下面命令
#以nginx镜像作为基础镜像进行操作,默认nginx会到dockerhub上下载
FROM nginx
#不以任何镜像为基础镜像可以使用
FROM scratch
RUN:
RUN 指令是用来执行命令行命令的。由于命令行的强大能力, RUN 指令在定制镜像时是最
常用的指令之一。其格式有两种:
1.shell 格式: RUN <命令>
RUN echo "Hello Docker" > /usr/share/nginx/index/index.html
2.exec 格式: RUN ["可执行文件", "参数1", "参数2"]
RUN ["/bin/bash","-c","echo hello"]
注意:由于Dockerfile每一个Dockerfile指令都会生成一层镜像,目前限制是127层,所以尽可能的减少指令的层数,如下:
FROM debian:jessie RUN buildDeps='gcc libc6-dev make' \ && apt-get update \ && apt-get install -y $buildDeps \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \ && mkdir -p /usr/src/redis \ && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \ && make -C /usr/src/redis \ && make -C /usr/src/redis install \ && rm -rf /var/lib/apt/lists/* \ && rm redis.tar.gz \ && rm -r /usr/src/redis \ && apt-get purge -y --auto-remove $buildDeps
构建镜像
在Dockerfile文件所在目录执行:docker build -t nginx:v3 . #注意有个点 -t参数指定镜像名称
点理解为当前目录并不是特别准确,docker是C/S架构,docker build会通过API连接到server端进行构建的,docker并非在本地构建,
“.”可以理解为上下文目录,例如:
COPY ./package.json /app/