一、docker 镜像介绍
docker images是d acker的三大组件之一, docker把下毅的images存健到docker主机上, 如果一个image不在主机上,docker会从一个镜像仓库下, 默认的仓库是DOCKER HUB公共仓库, 接下来将介绍更多关于docker images的内容, 包括:·使用和管理本地主机上的images·创建一个基础的images·上传images到docker hub(公共images仓库) ·列出
本地主机上已经存在的images
1.使用docker 镜像 显示本机的镜像
docker images
在列出信息中, ·REPOSITORY来白于哪个仓库·TAG的标记, 比如latest+IMAGEID:境像它的ID号-CREATED.创建时间·SIZE:桶像的5IZE
一个仓库可能有一个images的都个发行版, 比如ubuntu, 他们有10.0412.0412.1013.0414.04.每个发行版的标记都不同, 可以使用tag命令来指定images注:如果你不指定具体的发行版, 比如仅使用ubuntu, 那么docker会使用最新的发行版ubuntu later t提示:建议最好指定发行版, 只有这样你才可以保证你真正使用的image是那个
2.下载镜像
docker pull centos
3.查找镜像下载
docker的一个特点是很多人因为各种不同的用途创建了各种不同的images, 它们都被上传到了dacker hub共有仓库上, 我们可以在docker hub的网站上来查找它们, 使用docker search命令
docker search httpd
我们看到返回了很多包含mysql的images.其中包括image名字、描述、最级(表示该image的受欢迎程度) 、是香方创建、是亡自动创建, 直方的images是stack brew项目组创建和维护的, automated源允许你验证image的来源和内
base镜像有两层含义:
1.不依赖其他境像, 从scratch构建,
2.其他镜像可以之为基础进行扩展, 所以, 能称作base镜像的通常都是各种Linux发行版的Docker镜像, 比如Ubuntu.Debian.CentOS等
二、Linux 操作系统由内核空间和用户空间组成:
rootfs内核空问是kernel, Linux刚启动时会加bootfs文件系统, 之后bootfs会被卸掉, 用户空间的文件系统是rootfs, 包含我们默形的/dev, /proc/bin等目录, 对于base填像来说, 底层直接用Host的kemel, 自己只需要提供rootfs就行了, 而对于一个精简的OS, rootfs可以很小, 只需要包括最基本的令、工具和程序库就可以了, 相比其她Linux发行版, CentOS的rootfs已经算臃肿的了, alpine还不到10MB, 我们平时安装的CentOS除了rootfs还会选装很多软件、服务、图形桌面等, 需要好几个GB就不足为奇了, base销像提供的是最小安装的Linux发行版。
支持运行多种Linux OS不同Linux发行版的区别主要就是rootfs, 比如Ubuntu 14.04使用upstart管理服务, apt管理软件包; 而CentOS 7使用systemd和yum, 这些都是用户空间上的区别, Linux kernel差别不大, 所以Docker可以同时支持多种Linux镜像, 模拟出多种操作系统环境, L docker mages 3) 下敷images现在我们指定了一个image,training/sinatra, 我们可以使用docker pull命令来下载它
下载过程中, 会输出获取境像的每一信息, 该命令实际上相当于#docker pull registry.hub.docker com/ubuntu:12.04命令,即从注册服务器registry.hub.docker.com中的ubuntu仓库来下载标记为12.04的椅像, 有时候方仓库注册服务器下载较慢,可以从其结仓库下载,从其它仓库下载时需要指定完整的仓库注册服务部地址
1.查看镜像详细信息
docker inspect httpd
docker images --no-trunc
2.进入镜像方法
1.直接进入容器 但是 后果是exit后会结束程序
docker run -it centos /bin/bash
①:创建容器时,可能会出现如下报错:
WARNING: IPv4 forwarding is disabled. Networking will not work.
解决办法:
vim /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward=1 (添加的内容)
重启网卡和docker
systemctl restart network
systemctl restart docker
2.使用后台方式进入系统
docker run -itd centos /bin/bash (以后台方式启动容器)
docker attach a11c044f1e4d (进入容器)
docker exec -it a11c044f1e4d /bin/bash (进入容器)
--restart=always:始终保持运行(随着docker开启而运行)
-d:(daemon)后台运行
区别:exec进入的方式需要添加-i -t选项,后边还需要给容器一个shell环境。但attach就不需要这么麻烦。
exec进入的方式:如果执行exit退出,容器仍然保持运行。
attach:如果执行exit退出,容器会被关闭。如果想要保持容器不被关闭,可以使用键盘:Ctrl p + Ctrl q可以实现。
本质上的区别:exec进入的方法,会生成新的进程。
attach不会生成新进程。同步操作。
三、创建镜像
2个方法;
1.第一个方法:使用docker commit来扩展一个image先使用image启动客器, 更新后提交结果到新的image,
1.)启动镜像 (如果直接退出后查看不到程序运行)
docker run -i -t centos:latest /bin/bash (适用于启动系统镜像)
选项解释:
-i:可交互
-t:模拟伪终端。
--name:为容器取名。
-p:端口号。
2.进入镜像安装程序 (进入时记住ID是多少,好为下一步做准备)
yum -y install mariadb-server
3.创建镜像
docker commit -m "add mariadb" -a "test" fa7a8c5f4781 mariadb:madb
-m来指定提交的说明信息,跟我们便用的版本控制工具一样;
-a可以指定更新的用户信息;之后是用来创建情像的容器的ID;
-t:打标签
最后指定目标境像的仓库名和tag信息,
创建成功后会返这个情像的ID信息, 使用docker images来查看新创建的像
再次启动新添加镜像就可以有 那会添加的服务
docker run -i -t centos:mariadb /bin/bash
2.)第2种方法:从docker file来创建image
使用docker commit来扩展一个image比较简单, 但它不容易在一个团队中分享它。我们使用docker build来创建一个新的image, 为此, 我们需要创建一个dockerfle, 包含一些如何创维我们的image的搬令,
四、从本地文件导入
要从本地文件系统导入一个镜像, 可以使用openvz(容顾虚拟化的先技术) 的模板来创建:openvz的模板下载地址为https://wiki.openvz.org/Download/template/precreated 下载镜像
我是提前把镜像下载好了 只需要导入就可以了
docker import centos-7-x86_64.tar.gz centos7
cat centos-7-x86_64-minimal.tar.gz | docker import - centos7-min
(两种方式都可以)
五、上传镜像到docker储存库
1.首先登陆网站注册账户
https://hub.docker.com/ 网址
2.登陆到docker储存库中
docker login
3.给镜像打标签,如果没有标签上传会失败
docker tag centos:mariadb wangjianye1/mariadb:latest
4.上传镜像
docker push wangjianye1/mariadb:latest
六、删除镜像 (删除的前提是容器出于关闭状态)
1.删除单个镜像
docker rmi centos:mariadb
2.强制删除镜像
docker rm +名称或容器ID -f
3.删除全部镜像
docker rmi `docker images -q`
4.停止删除后台启动镜像容器
docker ps -a -q | xargs docker rm -f (生产环境禁止使用)
七、存出和载入镜像
1.存出镜像
docker save -o centos:mariadb.tar centos:mariadb
或者:
docker save > centos7.tar centos:mariadb
2.载入镜像
docker load --input centos:mariadb.tar
或者
docker load < centos:mariadb.tar