一、什么是Docker镜像
是一种使用联合加载技术实现的重叠的只读文件系统
是容器的基石。
使用docker info命令查看docker使用的存储驱动和存储位置
ls -l /var/lib/docker/aufs
ams文件夹下保存镜像文件
二、查看和删除镜像
1、列出镜像
docker images [optsions] [repository]
-a , --all=false 显示所有镜像
-f , --filter=[] 在显示时的过滤条件
--no-trunc=false ID是否截断,默认截断
-q, --quiet=false 只显示镜像的惟一ID
repository 仓库,一个仓库包含的是一系列关联的镜像
tag 镜像标签,一个镜像可以对应多个标签
2、查看镜像的详细信息
docker inspect [options] container|image [container|image]
docker inspect 仓库名:tag名
3、删除镜像
docker rmi [options] image [image...]
-f , --force=false 会强制删除镜像
--no-prune=false 会保留被删除镜像标签的父镜像
docker rmi ubuntu:latest
一次删除多个镜像 docker rmi ubuntu:latest ubuntu2:latest2 ......
删除所有镜像 docker rmi $(docker images -q ubuntu) ,会删除ubuntu仓库中的所有镜像
三、如何获取和推送镜像
1、查找镜像
a)docker hub https://registry.hub.docker.com
需先注册账号
b)docker search [options] term
--automated=false 自动化选项,只会显示自动化构建的镜像
--no-trunc=false 选择了true会以截断的方式输出
-s , --stars=0 限制显示结果的最低星级
2、拉取镜像
docker pull ubuntu:14.04 速度非常慢
使用 --registry-mirror 选项,使用国内的docker仓库镜像服务器
1、修改 /etc/default/docker
2、添加:DOCKER_OPTS = "--registry-mirror=https://www.daocloud.io"
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io"
3、推送镜像
docker push不会把镜像整个提交上去,只会把修改的部分提交上去
四、构建镜像
保存对容器的修改,并再次使用
自定义镜像的能力
以软件的形式打包并分发服务及其运行环境
1、docker commit 通过容器构建
docker commit [options] container [repository[:tag]]
-a, --author="" 指定镜像的作者
-m,--message="" 记录镜像构建的信息
-p,--pause=true 指示commit不暂停正在执行的容器
docker run -i -t -p 80 --name commit_test ubuntu /bin/bash
以容器web,创建一个镜像,名字为nginx_web,仓库myrep01
docker commit -a 'chentian' -m 'nginx' web myrep01/nginx_web
以nginx_web镜像启动容器
2、docker build 通过dockerfile文件构建
先编写dockerfile文件
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER chentian114 "chentian114@sina.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
docker build -t='myrep01/df_test1' .
-t 设置创建镜像的名字
path : dockerfile文件所在目录
docker images查看已存在的镜像
以创建的df_test1镜像创建docker容器
docker run -d --name nginx_df1 -p 80 "myrep01/df_test1" nginx -g "daemon off;"
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER chentian114 "chentian114@sina.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
1、FROM指令 用来指定镜像
FROM指令格式 a)FROM <image> b)FROM <image>:<tag>
必须是已经存在的镜像,后序指令都会基于这个镜像运行。帮叫基础镜像
必须是第一条非注释指令
2、MAINTAINER <name> 指定镜像的作者信息,包含镜像的所有者和联系信息
3、RUN 用来指定当前镜像中运行的命令
有两种指令模式
a) RUN <command> (shell模式)
该模式下执行命令 :
b)RUN [ "executable","param1","param2"] (exec模式)
该模式下可指定其它形式的shell执行指令
docker build -t="myrep01/df_test1" path 查看构建过程
4、EXPOSE 用来指定运行该镜像的容器使用的端口,它可以指定一个或多个端口,也可以多次使用EXPOSE
EXPOSE <port> [<port>....]
容器运行时,仍需要手动指定映射端口
5、CMD 用来提供容器运行的默认命令,与RUN命令类似,都是用来执行指令,但RUN指令中的命令是在镜像构建
过程中运行的,而CMD指定的指令是在容器运行时运行的。当我们使用docker run指定了容器运行的命令时,
CMD命令会被覆盖,即CMD只是指定容器启动默认执行的命令。
CMD指令的模式
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER chentian114 "chentian114@sina.com"
RUN apt-get install -y nginx
EXPOSE 80
docker build -t="myrep01/df_test2" .
docker run -p 80 --name="cmd_test1" -d myrep01/df_test2
6、ENTRYPOINT命令 与CMD类似,惟一不同是不会被docker run指定的命令覆盖,如果要覆盖需要在docker run中指定
docker run --entrypoint覆盖
构建缓存
docker镜像与容器关系总结:
1、先是根据镜像创建一个容器;
2、容器其实相当于一个微型虚拟机,可以在里面安装软件和部署应用
3、容器可以被整个打包,提交成一个镜像;
4、创建一个新的镜像可以基于一个已经存在的镜像
是一种使用联合加载技术实现的重叠的只读文件系统
是容器的基石。
使用docker info命令查看docker使用的存储驱动和存储位置
ls -l /var/lib/docker/aufs
ams文件夹下保存镜像文件
二、查看和删除镜像
1、列出镜像
docker images [optsions] [repository]
-a , --all=false 显示所有镜像
-f , --filter=[] 在显示时的过滤条件
--no-trunc=false ID是否截断,默认截断
-q, --quiet=false 只显示镜像的惟一ID
repository 仓库,一个仓库包含的是一系列关联的镜像
tag 镜像标签,一个镜像可以对应多个标签
2、查看镜像的详细信息
docker inspect [options] container|image [container|image]
docker inspect 仓库名:tag名
3、删除镜像
docker rmi [options] image [image...]
-f , --force=false 会强制删除镜像
--no-prune=false 会保留被删除镜像标签的父镜像
docker rmi ubuntu:latest
一次删除多个镜像 docker rmi ubuntu:latest ubuntu2:latest2 ......
删除所有镜像 docker rmi $(docker images -q ubuntu) ,会删除ubuntu仓库中的所有镜像
三、如何获取和推送镜像
1、查找镜像
a)docker hub https://registry.hub.docker.com
需先注册账号
b)docker search [options] term
--automated=false 自动化选项,只会显示自动化构建的镜像
--no-trunc=false 选择了true会以截断的方式输出
-s , --stars=0 限制显示结果的最低星级
2、拉取镜像
docker pull ubuntu:14.04 速度非常慢
使用 --registry-mirror 选项,使用国内的docker仓库镜像服务器
1、修改 /etc/default/docker
2、添加:DOCKER_OPTS = "--registry-mirror=https://www.daocloud.io"
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io"
3、推送镜像
docker push不会把镜像整个提交上去,只会把修改的部分提交上去
四、构建镜像
保存对容器的修改,并再次使用
自定义镜像的能力
以软件的形式打包并分发服务及其运行环境
1、docker commit 通过容器构建
docker commit [options] container [repository[:tag]]
-a, --author="" 指定镜像的作者
-m,--message="" 记录镜像构建的信息
-p,--pause=true 指示commit不暂停正在执行的容器
docker run -i -t -p 80 --name commit_test ubuntu /bin/bash
以容器web,创建一个镜像,名字为nginx_web,仓库myrep01
docker commit -a 'chentian' -m 'nginx' web myrep01/nginx_web
以nginx_web镜像启动容器
2、docker build 通过dockerfile文件构建
先编写dockerfile文件
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER chentian114 "chentian114@sina.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
docker build -t='myrep01/df_test1' .
-t 设置创建镜像的名字
path : dockerfile文件所在目录
docker images查看已存在的镜像
以创建的df_test1镜像创建docker容器
docker run -d --name nginx_df1 -p 80 "myrep01/df_test1" nginx -g "daemon off;"
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER chentian114 "chentian114@sina.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
1、FROM指令 用来指定镜像
FROM指令格式 a)FROM <image> b)FROM <image>:<tag>
必须是已经存在的镜像,后序指令都会基于这个镜像运行。帮叫基础镜像
必须是第一条非注释指令
2、MAINTAINER <name> 指定镜像的作者信息,包含镜像的所有者和联系信息
3、RUN 用来指定当前镜像中运行的命令
有两种指令模式
a) RUN <command> (shell模式)
该模式下执行命令 :
b)RUN [ "executable","param1","param2"] (exec模式)
该模式下可指定其它形式的shell执行指令
docker build -t="myrep01/df_test1" path 查看构建过程
4、EXPOSE 用来指定运行该镜像的容器使用的端口,它可以指定一个或多个端口,也可以多次使用EXPOSE
EXPOSE <port> [<port>....]
容器运行时,仍需要手动指定映射端口
5、CMD 用来提供容器运行的默认命令,与RUN命令类似,都是用来执行指令,但RUN指令中的命令是在镜像构建
过程中运行的,而CMD指定的指令是在容器运行时运行的。当我们使用docker run指定了容器运行的命令时,
CMD命令会被覆盖,即CMD只是指定容器启动默认执行的命令。
CMD指令的模式
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER chentian114 "chentian114@sina.com"
RUN apt-get install -y nginx
EXPOSE 80
docker build -t="myrep01/df_test2" .
docker run -p 80 --name="cmd_test1" -d myrep01/df_test2
6、ENTRYPOINT命令 与CMD类似,惟一不同是不会被docker run指定的命令覆盖,如果要覆盖需要在docker run中指定
docker run --entrypoint覆盖
构建缓存
docker镜像与容器关系总结:
1、先是根据镜像创建一个容器;
2、容器其实相当于一个微型虚拟机,可以在里面安装软件和部署应用
3、容器可以被整个打包,提交成一个镜像;
4、创建一个新的镜像可以基于一个已经存在的镜像