docker 无法pull 镜像pull的CentOS的镜像的root密码是多少

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
- DockOne官方账号
非常好的问题,正好之前看到过一篇,我把其中的相关内容贴一下:
我们首先来看看 /var/lib/docker/这个文件夹下的内容。打开这个文件夹下的 repositories 文件,你将会看到类似下面这样的JSON 文件:
$&sudo&cat&/var/lib/docker/repositories&|&python&-mjson.tool
“Repositories”:&{
“ubuntu”:&{
“12.04″:&“8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”,
“12.10″:&“b750fea3c593ef05ba02a62b4accb2c21d589ff2f5f2dc”,
“latest”:&“8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”,
“precise”:&“8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”,
“quantal”:&“b750fea3c593ef05ba02a62b4accb2c21d589ff2f5f2dc”
看看,是不是正好和docker images的内容一致呢。
REPOSITORY&TAG&IMAGE&ID&CREATED&SIZE
ubuntu&&&&&&&&&&&&&&12.04&&&&&&&&&&&&&&&8dbd9e392a96&&&&&&&&8&months&ago&&&&&&&&131.3&MB&(virtual&131.3&MB)
ubuntu&&&&&&&&&&&&&&latest&&&&&&&&&&&&&&8dbd9e392a96&&&&&&&&8&months&ago&&&&&&&&131.3&MB&(virtual&131.3&MB)
ubuntu&&&&&&&&&&&&&&precise&&&&&&&&&&&&&8dbd9e392a96&&&&&&&&8&months&ago&&&&&&&&131.3&MB&(virtual&131.3&MB)
ubuntu&&&&&&&&&&&&&&12.10&&&&&&&&&&&&&&&b750fe79269d&&&&&&&&8&months&ago&&&&&&&&24.65&kB&(virtual&179.7&MB)
ubuntu&&&&&&&&&&&&&&quantal&&&&&&&&&&&&&b750fe79269d&&&&&&&&8&months&ago&&&&&&&&24.65&kB&(virtual&179.7&MB)
接着,我们再来看看 /var/lib/docker/graph/这个文件夹:
$&sudo&ls&-al&/var/lib/docker/graph
drwx——&6&root&root&4096&Nov&22&06:52&.
drwx——&5&root&root&4096&Dec&13&04:25&..
drwxr-xr-x&3&root&root&4096&Dec&13&04:26&27cf
drwxr-xr-x&3&root&root&4096&Nov&22&06:52&8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c
drwxr-xr-x&3&root&root&4096&Nov&22&06:52&b750fea3c593ef05ba02a62b4accb2c21d589ff2f5f2dc
drwx——&3&root&root&4096&Nov&22&06:52&_tmp
这些输出结果可能有点晦涩(Not terribly friendly),但是从中我们可以看出Docker是使用repositories JSON文件来记述镜像信息的,此JSON文件包含了仓库名、标签、以及标签对应的镜像ID。
我们有两个来自ubuntu仓库的镜像,这其中标签为12.04,precise和latest都指向的是同一个镜像,其ID为 8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c (这个ID长度为64位,但是我们可以使用其12位的简短模式,比如8dbd9e392a96)。
那么这些以镜像ID命名的文件夹下面又保存了什么东西呢?
$&sudo&ls&-al&/var/lib/docker/graph/8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c
drwxr-xr-x&&3&root&root&4096&Nov&22&06:52&.
drwx——&&6&root&root&4096&Nov&22&06:52&..
-rw——-&&1&root&root&&437&Nov&22&06:51&json
drwxr-xr-x&22&root&root&4096&Apr&11&&2013&layer
-rw——-&&1&root&root&&&&9&Nov&22&06:52&layersize
这个文件夹下的内容如下:
json -保存着关于这个镜像的元数据layersize – 一个整数,表示layer的大小。layer/ – 子文件夹,保存着rootfs该容器的镜像
$&sudo&cat&/var/lib/docker/graph/8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c/json&|&python&-mjson.tool
“comment”:&“Imported&from&-“,
“container_config”:&{
“AttachStderr”:&false,
“AttachStdin”:&false,
“AttachStdout”:&false,
“Cmd”:&null,
“Env”:&null,
“Hostname”:&“”,
“Image”:&“”,
“Memory”:&0,
“MemorySwap”:&0,
“OpenStdin”:&false,
“PortSpecs”:&null,
“StdinOnce”:&false,
“Tty”:&false,
“User”:&“”
“created”:&“T14:13:15.″,
“docker_version”:&“0.1.4″,
“id”:&“8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c”
$&sudo&cat&/var/lib/docker/graph/8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c/layersize
$&sudo&ls&-al&/var/lib/docker/graph/8dbd9e392ad58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c/layer
drwxr-xr-x&22&root&root&4096&Apr&11&&2013&.
drwxr-xr-x&&3&root&root&4096&Nov&22&06:52&..
drwxr-xr-x&&2&root&root&4096&Apr&11&&2013&bin
drwxr-xr-x&&2&root&root&4096&Apr&19&&2012&boot
drwxr-xr-x&&4&root&root&4096&Nov&22&06:51&dev
drwxr-xr-x&41&root&root&4096&Nov&22&06:51&etc
drwxr-xr-x&&2&root&root&4096&Apr&19&&2012&home
drwxr-xr-x&11&root&root&4096&Nov&22&06:51&lib
drwxr-xr-x&&2&root&root&4096&Nov&22&06:51&lib64
drwxr-xr-x&&2&root&root&4096&Apr&11&&2013&media
drwxr-xr-x&&2&root&root&4096&Apr&19&&2012&mnt
drwxr-xr-x&&2&root&root&4096&Apr&11&&2013&opt
drwxr-xr-x&&2&root&root&4096&Apr&19&&2012&proc
drwx——&&2&root&root&4096&Nov&22&06:51&root
drwxr-xr-x&&4&root&root&4096&Nov&22&06:51&run
drwxr-xr-x&&2&root&root&4096&Nov&22&06:51&sbin
drwxr-xr-x&&2&root&root&4096&Mar&&5&&2012&selinux
drwxr-xr-x&&2&root&root&4096&Apr&11&&2013&srv
drwxr-xr-x&&2&root&root&4096&Apr&14&&2012&sys
drwxrwxrwt&&2&root&root&4096&Apr&11&&2013&tmp
drwxr-xr-x&10&root&root&4096&Nov&22&06:51&usr
drwxr-xr-x&11&root&root&4096&Nov&22&06:51&var
看到这里你应该有些顿悟了吧,这就是我们为什么即使我们不和远程索引或者注册表交互也能通过仓库名来使用一个镜像的原理了。因为一旦你将镜像从远程下载到本地,Docker可以通过仓库名称来使用它们。当你创建自己的Dockerfile的时候也不例外。
文章是去年3月份的,引用之前最好与现在版本对一下变动.其次,讨论存储最好说明底层的driver时什么
我这边对devicemapper了解不多,主要说说aufs的
镜像的存储结构主要分两部分,一是镜像ID之间的关联,一是镜像ID与镜像名称之间的关联,前者的结构体叫Graph,后者叫TagStore.
/var/lib/graph/&image id>
下面没有layer目录,只有每个镜像的json描述文件和layersize大小/var/lib/docker/repositories-aufs
TagStore的存储地方,里面有image id与reponame ,tag之间的映射关系. aufs是driver名/var/lib/docker/aufs/diff/&image id or container id>
每层layer与其父layer之间的文件差异,有的为空,有的有一些文件(镜像实际存储的地方)/var/lib/docker/aufs/layers/&image id or container id>
每层layer一个文件,记录其父layer一直到根layer之间的ID,每个ID一行。大部分文件的最后一行都一样,表示继承自同一个layer./var/lib/docker/aufs/mnt/&image id or container id>
有容器运行时里面有数据(容器数据实际存储的地方,包含整个文件系统数据),退出时里面为空
回答的好详细啊,要赞
我的/var/lib/docker/graph/${image_id}目录下貌似只有json和layersize两个文件,没有layer这个目录?
[root@haichuan-vm&docker]#&ls&graph/*&-R
graph/c5a64f264b78b5433614aecdd4d:
json&&layersize
graph/53f858aaaf7df23e311d71aa93ac578ef39aa076f:
json&&layersize
graph/5b12ef8fd3039acc0e7f68e363c15d8abb5caccede8a:
json&&layersize
我的环境:centos7 docker1.3.2
另外,发现/var/lib/docker/devicemapper/devicemapper下有两个大文件:
[root@haichuan-vm&devicemapper]#&ll&/var/lib/docker/devicemapper/devicemapper/
total&881852
-rw-------.&1&root&root&&Feb&&9&10:46&data
-rw-------.&1&root&root&&&&Feb&&9&10:46&metadata
这两个文件都是hole文件,实际占用磁盘空间大小和local images大小总和基本一致:
[root@haichuan-vm&devicemapper]#&du&-h&/var/lib/docker/devicemapper/devicemapper/*
860M&&&&/var/lib/docker/devicemapper/devicemapper/data
2.1M&&&&/var/lib/docker/devicemapper/devicemapper/metadata
并且这两个文件大小会随着image pull、rmi操作而相应的增大、减小。so,我推测这两个文件就是docker pull ${image}之后,image的layers真正存储的地方。如果确实如此,不知为何docker不把image的layer保存为&透明的二进制&文件?或是像上面 所表述的那样保存为一个layer目录(这种方案不好的地方是不太安全,but应该还有其它考虑吧?)
另外,还是没有发现实际存放container的地方。如下:
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89-json.log
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/config.json
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/hostconfig.json
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/hostname
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/hosts
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/resolv.conf
containers/cf84e88a726a7fb76e74cc5eb6cbfbde9ce89/secrets:
把问题总结一下:
1)实际存放images的地方是否是/var/lib/docker/devicemapper/devicemapper目录下的metadata和data两个文件?
2)如果是上面两个文件,为什么要这么存储?而不是存为&透明二进制&或&layer目录&?
3)实际存放container的地方在哪?
看了近期开放的,实际存放images和container的地方就是/var/lib/docker/devicemapper/devicemapper目录下的metadata和data两个文件。
但第二个问题还是不明白,为什么要这么存储?而不是存为一个个的&透明二进制&或&layer目录&(安全考虑?)?
要回复问题请先或
sina攻城狮,docker爱好者
浏览: 26983
关注: 18 人博客访问: 2610545
博文数量: 243
博客积分: 5347
博客等级: 大校
技术积分: 13132
注册时间:
认证徽章:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 云计算
上面的两个小节制作了基础镜像,也使用Dockerfile文件制作了我们需要的镜像,我们可以把自己制作的镜像推送到Docker Hub上,这样就可以直接使用docker pull命令在任意一台主机上pull下来,当然这是一个公共的仓库,别人也可以使用同样的命令下载,如果使用私有的仓库,需要购买。
向Docker Hub上推送必须要在该网站上进行注册,在需要推送的机器上使用下面的命令进行登录。Docker login进行登录:
[root@10-10-63-106 ~]# docker login
Username: frank
Email: XXXX@XXX.com
Login Succeeded
登录的认证信息存放在.dockercfg
[root@10-10-63-106 ~]# cat .dockercfg
{"https://index.docker.io/v1/":{"auth":"ZnJhbmt6Zno6NjY0MzUwMTE=","email":""}}
推送到Docker Hub上的镜像必须按照下面的格式进行:/,使用docker images命令查看本地的docker镜像,如果当初命名的镜像名字不是按照上面的规则进行的,则可以使用docker tag 添加添加自己的名字。
[root@10-10-63-106 ~]# docker images
REPOSITORY
VIRTUAL SIZE
frankzfz/complie-kernel
9 days ago
centos6.3-base
a8fe6b2d8f23
9 days ago
&[root@10-10-63-106 ~]# docker tag centos6.3-base frankzfz/centos6.3-base
[root@10-10-63-106 ~]# docker
REPOSITORY
VIRTUAL SIZE
frankzfz/complie-kernel
9 days ago
centos6.3-base
a8fe6b2d8f23
9 days ago
frankzfz/centos6.3-base
a8fe6b2d8f23
9 days ago
使用docker push进行推送,如果推送成功后,可以看到下面的信息
[root@10-10-63-106 ~]# docker push frankzfz/centos6.3-base:latest
The push refers to a repository [frankzfz/centos6.3-base] (len: 1)
Sending image list
Pushing repository frankzfz/centos6.3-base (1 tags)
a8fe6b2d8f23: Image already pushed, skipping
Pushing tag for rev [a8fe6b2d8f23] on {https://cdn-registry-1.docker.io/v1/repositories/frankzfz/centos6.3-base/tags/latest}
在Docker Hub上也可以看到自己的推送的tag
&上面把基础镜像推送到Docker Hub上,如果是使用Dockerfile进行build的images也可以使用同样的方法进行推送,但是在推送之前必须把使用该镜像的容器stop,然后才能推送成功,一开始没有停止容器,始终不能成功的把镜像推送到Docker Hub上
docker push frankzfz/complie-kernel:v1
The push refers to a repository [frankzfz/complie-kernel] (len: 1)
Sending image list
Pushing repository frankzfz/complie-kernel (1 tags)
a8fe6b2d8f23: Image already pushed, skipping
a1: Image already pushed, skipping
f: Pushing [==================================================>] 652.8 MB/652.8 MB
2015/03/11 19:50:38
但是也并没有提示任何的错误信息,推送成功后的正确信息如下:
[root@10-10-63-106 ~]# docker push frankzfz/complie-kernel:v1
The push refers to a repository [frankzfz/complie-kernel] (len: 1)
Sending image list
Pushing repository frankzfz/complie-kernel (1 tags)
a8fe6b2d8f23: Image already pushed, skipping
a1: Image already pushed, skipping
f: Image successfully pushed
fb9bd8bb39d0: Image successfully pushed
bb: Image successfully pushed
acc: Image successfully pushed
4cecba576ec9: Image successfully pushed
2bba67df2882: Image successfully pushed
5c664d95439d: Image successfully pushed
a6c6c1776843: Image successfully pushed
71c24758ec01: Image successfully pushed
b1e: Image successfully pushed
05ef73a94126: Image successfully pushed
e: Image successfully pushed
: Image successfully pushed
dd3c: Image successfully pushed
Pushing tag for rev [dd3c] on {https://cdn-registry-1.docker.io/v1/repositories/frankzfz/complie-kernel/tags/v1}
阅读(7985) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。docker官方镜像下载及使用Dockerfile创建镜像的方法
作者:小辣椒lllll
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了docker官方镜像下载及使用Dockerfile创建镜像的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
1、登陆docker hut官方网站:
2、search centos
3、docker pull centos:7.2.1511
4、创建Dockerfile文件:
[root@vmhost centos7.2]# cat Dockerfile
[plain] view plain copy
FROM centos:7.2.1511
MAINTAINER wanghongwei()
RUN yum install -y expect \
&& yum install -y openssh-clients openssh-server sudo rsync vim libaio strace wget telnet lsof lvm2 psmisc net-tools \
&& /usr/bin/ssh-keygen -A \
&& yum clean all
RUN useradd work
RUN echo 123456 | passwd --stdin root
RUN echo work123 | passwd --stdin work
ADD jdk-8u121-linux-x64.tar.gz /home/work
#ENTRYPOINT ["/root/docker/images/centos7.2"]
5、创建docker镜像:Dockerfile文件在当前路径时用. 标示就可以,如果不在使用绝对路径
docker build -t 4paradigm/centos:7.2 .
6、启动容器脚本:
[root@vmhost prophet2.0]# cat prophet-3.sh
[plain] view plain copy
#!/bin/bash -xv
HOST_NAME=prophet-3
HOST_IP=172.27.4.5
GATEWAY=172.27.0.1
ISO_PATH=/root/iso
VOLUME_PATH=/home/whwstar/volume/prophet3
image=4paradigm/centos:7.2
if [ `docker ps -a | grep $HOST_NAME | wc -l` -eq 0 ];then
mkdir -p $VOLUME_PATH
docker run -itd -h $HOST_NAME --name=$HOST_NAME --net=none -v $ISO_PATH:$ISO_PATH -v $VOLUME_PATH:/home/work $image /bin/bash
pipework br0 $HOST_NAME $HOST_IP/20@$GATEWAY
docker exec -d $HOST_NAME /usr/sbin/sshd -D
elif [ `docker ps -a | grep prophet-01 | wc -l` -eq 1 ];then
docker start $HOST_NAME
pipework br0 $HOST_NAME $HOST_IP/20@$GATEWAY
docker exec -d $HOST_NAME /usr/sbin/sshd -D
echo "docker start exception"
以上所述是小编给大家介绍的docker官方镜像下载及使用Dockerfile创建镜像的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具云计算之docker篇
云计算之docker篇
云计算之docker篇
/?id=45&utm_source=tuicool&utm_medium=referral
写在前面的话:
& 由于最近公司开始着手做云计算,自己有幸参与整个项目的全过程,所以呢,准备在blog中记录整个项目从无到有,从测试到生产的全过程,希望对自己的每一步进行一个记录以及在项目中遇到的坑和如何解决。希望大家能够在此找到一点点借鉴。
==华丽分割线====================================================================
什么是docker?
& docker的字面意思是码头工人,与集装箱有关,那么docker就可以理解为是一个集装箱(容器)。
详细的说:
& dockers是dockers.inc& 公司开源的一个基于LXC技术之上构建的container容器引擎(说个题外话 openstack基于KVM ,docker基于LXC),源代码托管在GITHUB上,基于GO 语言并遵从apache2.0 协议开源。(可以商业,改吧改吧就可以卖钱了)。
& docker是通过内核虚拟化技术((namespaces及cgroups等),KVM呢是通过硬件虚拟化技术,CPU支持的。)来提供容器的资源隔离与&安全保障等。
& 在非linux平台是没法使用docker的,因为他是基于内核技术来实现资源隔离和安全保障的。
& 由于dockers通过操作系统层的虚拟化实现隔离,所以docker容器在运行的时候,不需要类似虚拟机(VM)额外的操作系统开销,提高了资源的利用率。
& docker官网在此&,截个图来说明一下docker的三大理念。
如上图所示:Build& ,ship ,Run(构建,运输,
构建:这就是docker的三大核心理念,认为一个东西我构建上了,放在某个地方就可以运行起来,可以用java来进行一个对比,怎么说呢?我有JVM虚拟机,一次构建,备考之后到处运行。但是呢,也有不同的地方,因为docker里面运行的是一个应用(apache ,nginx,tomcat),&&它的构建是基于docker的镜像,可以基于这个镜像起任何的容器。
运输: 我们知道openstack&的镜像传到glance ,那么docker是传在dockerhub,一个私有的地方,谁有权访问我就可以给它。
运行:docker运行是起一个容器。
docker的组成
& docker是一个传统的CS结构的架构:客户端服务器。BS是什么呢?浏览器和服务器模式。
有一个dockerclient&&和docker server
三个组件:&镜像(image) 、容器(container)、仓库(repository)。
docker与openstack的对比:
组件多,部署复杂
和物理机系统几乎一至
VM会占用一些资源
镜像是MB级别
虚拟机镜像GB级别
组件相互依赖,管理复杂
单进程,不建议启动SSH
完整的系统管理
借助neutron可以灵活组件各类网络架构
为什么不建议启动SSH?
这就是docker的理念,我们起一个docker容器,我在里面安装一个zabbix-agent ,saltstack-agent,ssh&&&当作虚拟机使用,那为什么不直接用虚拟机?
难道就差启动的分钟级这个时间么,docker的真正的最佳实践不是当作虚拟机使用,但是为什么有的还是当虚拟机使用呢?因为没有openstack,关键到底还是要看业务,我们知道IT管理的PPT(流程,人员,工具),比如说,一个新型的公司,架构从头规划,可以根据docker模式来规划,但是如果架构已经成型,流程组织结构都已固话,那么就得考虑业务是否要使用容器来启动。
docker能干什么?
1、简化配置
工作中有很多环境,比如测试环境,开发环境,性能测试,生产和预生产,环境不一致,配置不一致会导致上线失败,测试安装了一个python的依赖,线上没有,测试通过,上生产就开始报错。(不能导入某个模块,起不来了)。
docker可以简化配置,做好一个镜像,直接拿镜像就起得来。openstack也能干这事,saltstack也可以做这些事。
docker解决的不是openstack的问题,应该和RPM包进行对比或者saltstack来对比。
saltstack就可以简化环境,一条命令解决。
2、代码流水线管理
开发写代码-开发环境-提交SVN-测试拉下来测试-预生产环境-灰度发布(生产环境)。
3、开发效率
开发人员入职第一天配环境,用docker镜像构建好,需要啥都装好,RUN起来就完事。
openstack也可以做,给个虚拟镜像就完事。给个IP地址,用户密码SSH上去就完事。举个例子:
这么对比来说,openstack效率更高,给开发每人一台虚拟机,把6080对外(NOVNCPROXY端口),这样开发在家都可以使用,虚拟机在远端,跟你是否在本地没有关系,但是docker不行,因为docker是启在本地。
4、应用隔离
虚拟机是完全隔离,docker只是一个隔离,只是没有占用资源
5、整合服务器
服务器可以跑多个容器来提高利用率,但是也可以其多个虚拟机进程
6、debug能力
docker开发想调试很难,虚拟机爱怎么调都可以
openstack设计就是多租户,一个租户可以有多个用户
8、快速部署
docker是秒级,体积小,完胜openstack
docker就是以快为容器,比如,抢红包,我可以1秒钟启动上千个容器,但是起虚拟机不行。
但是呢,一切的一切还是看业务。
使用docker的几个理由:
1、技术储备
2、跟上潮流
3、符合当前业务需求
大多数都是第2个,很少说有业务需求的。
安装SSH来进行管理,其实我们也是这么做的。
优势就是快,但是缺点很多。
docker组成基于CS,如果server宕了呢?所有的容器都会停止运行,没有多server,业界虽有提出,但是还是不行。
所以说,现在基本上都是混合使用docker,不能把鸡蛋放到一个篮子里,如果docker报了一个大bug,所有容器都宕掉了,怎么办?
作为一个合格的架构师要考虑到不可能的可能。还是那句话,不能把鸡蛋放到一个篮子里。
那么docker改变了什么呢?
1、面向产品: 产品交付
2、面向开发: 简化环境配置
3、面向测试: 多版本测试
4、面向运维: 环境一致性
5、面向架构: 自动化扩容(微服务)
=================================分割线=====================================================
实战来了:
1、安装docker
[root@jixuege&~]#&yum&install&docker
2、启动docker
[root@jixuege&~]
3、pull镜像
[root@jixuege&~]
4、查看镜像
[root@jixuege&~]
REPOSITORY&&&&&&&&&&&&&&&&&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE
docker.io/centos&&&&&&&&&&&&&&&&&&&&latest&&&&&&&&&&&&&&60e65a8e4030&&&&&&&&6&weeks&ago&&&&&&&&&196.6&MB
属于哪个仓库&&&&&&&&&&&&&&&&&&&&&&&&&标签&&&&&&&&&&&&&&&唯一ID&&&&&&&&&&&&&&&创建时间&&&&&&&&&&&&&&大小
镜像怎么来的?
可以自己导入一个,方法如下
导出镜像到/opt目录
[root@jixuege&~]
[root@jixuege&~]
-rw-r--r--&&1&root&root&&Feb&&5&16:09&centos.tar.gz
从/opt目录下导入镜像
[root@jixuege&~]
这样就可以导入镜像了
5、如何删除一个镜像呢?
[root@jixuege&~]
注意,如果镜像创建了容器,那么镜像不能被删除,如果想删除,需要加参数&-f&即&&&&&&docker&&rmi&-f&ID号
6、创建并启动第一个容器
[root@jixuege&~]
docker run 所有容器都使用这个参数 & & centos指的是镜像的名称,后面跟着是一个命令,启动一个容器执行了一个命令:echo &hehe&
运行完之后就退出了,没有为容器指定名字
7、查看一下刚才创建的容器:
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
c2e9c96f6f9c&&&&&&&&centos&&&&&&&&&&&&&&&&&&&&&&/bin/echo&hehe&&&&&&&&&&4&minutes&ago&&&&&&&Exited&(0)&4&minutes&ago&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&hungry_chandrasekhar
容器的ID&&&&&&&&&&&&&镜像&&&&&&&&&&&&&&&&&&&&&&&&命令&&&&&&&&&&&&&&&&&&&&创建时间&&&&&&&&&&&状态(退出)&&&&&&&&&&&端口没有&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&不给名字它自己起了一个名字
8、启动一个有名字的容器不让退出
[root@jixuege&~]
[root@a15b76fd966d&/]
--name&起一个名字
-t&&&分配一个伪终端
-i&&&&&容器的标准输入为打开状态,这2个要一起使用
/bin/bash&&执行一个命令,这个命令是/bin/bash
&启动容器是秒级的
[root@a15b76fd966d&/]
USER&&&&&&&&PID&%CPU&%MEM&&&&VSZ&&&RSS&TTY&&&&&&STAT&START&&&TIME&COMMAND
root&&&&&&&&&&1&&0.0&&0.1&&1&?&&&&&&&&Ss&&&03:55&&&0:00&/bin/bash
root&&&&&&&&&14&&0.0&&0.1&&3&?&&&&&&&&R+&&&03:57&&&0:00&ps&aux
[root@a15b76fd966d&/]
& 这个容器里面只有一个进程就是/bin/bash,也就是说这个容器只运行了一个进程,这个进程是在启动容器的时候让它执行的。
我们在主机上查看,运行的容器
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
a15b76fd966d&&&&&&&&centos&&&&&&&&&&&&&&&&&&&&&&/bin/bash&&&&&&&&&&&&&&&2&minutes&ago&&&&&&&Up&2&minutes&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mydocker
容器的主机名和容器的ID是一样的。
当执行docker run的时候,它会在本地检查有没有centos这个镜像,如果没有就在dockerhub上去下载一个,有的话就直接启动,利用这个镜像启动容器。
10、退出容器
[root@a15b76fd966d&/]
退出以后,容器就自动终止了。
11、镜像的管理
搜索镜像:
docker search &+镜像名(centos 、 nginx 等)
[root@jixuege&~]#&docker&search&centos
INDEX&&&&&&&NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&DESCRIPTION&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&STARS&&&&&OFFICIAL&&&AUTOMATED
docker.io&&&docker.io/centos&&&&&&&&&&&&&&&&&&&&&&&&&&The&official&build&of&CentOS.&&&&&&&&&&&&&&&&&&&1902&&&&&&[OK]&&&&&&&
docker.io&&&docker.io/jdeathe/centos-ssh&&&&&&&&&&&&&&CentOS-6&6.7&x86_64&/&EPEL/IUS&Repos&/&Ope...&&&14&&&&&&&&&&&&&&&&&&&[OK]
docker.io&&&docker.io/jdeathe/centos-ssh-apache-php&&&CentOS-6&6.7&x86_64&/&Apache&/&PHP&/&PHP&M...&&&11&&&&&&&&&&&&&&&&&&&[OK]
docker.io&&&docker.io/million12/centos-supervisor&&&&&Base&CentOS-7&with&supervisord&launcher,&h...&&&9&&&&&&&&&&&&&&&&&&&&[OK]
docker.io&&&docker.io/blalor/centos&&&&&&&&&&&&&&&&&&&Bare-bones&base&CentOS&6.5&image&&&&&&&&&&&&&&&&8&&&&&&&&&&&&&&&&&&&&[OK]
获取镜像:
docker pull &+ 镜像的name
[root@jixuege&~]#&docker&pull&&docker.io/jdeathe/centos-ssh-apache-php
Using&default&tag:&latest
Trying&to&pull&repository&docker.io/jdeathe/centos-ssh-apache-php&...&latest:&Pulling&from&jdeathe/centos-ssh-apache-php
注意,这个地方pull的后面需要接整个镜像的name,如果有标签需要加上标签,不加的话默认是Using default tag: latest
查看镜像:
docker images
[root@jixuege&~]#&docker&images
REPOSITORY&&&&&&&&&&&&&&&&&&&&&&&&&&TAG&&&&&&&&&&&&&&&&&IMAGE&ID&&&&&&&&&&&&CREATED&&&&&&&&&&&&&VIRTUAL&SIZE
test/mynginx&&&&&&&&&&&&&&&&&&&&&&&&v4&&&&&&&&&&&&&&&&&&109dc6393163&&&&&&&&5&weeks&ago&&&&&&&&&350.9&MB
删除镜像:
docker rmi &+镜像ID
启动容器:
docker run --name test -it &centos &/bin/bash
查看容器:
docker ps & & 查看运行的容器
docker ps -a 查看所有容器包括已停止的
docker start ID &把停止的容器启动起来
进入容器呢?
docker attach +容器的ID & &这样就进入到容器里面了
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
a15b76fd966d&&&&&&&&centos&&&&&&&&&&&&&&&&&&&&&&/bin/bash&&&&&&&&&&&&&&&56&minutes&ago&&&&&&Exited&(0)&50&minutes&ago&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mydocker
这个是已停止的容器,那么启动容器
[root@jixuege&~]
a15b76fd966d
[root@jixuege&~]
[root@a15b76fd966d&/]
USER&&&&&&&&PID&%CPU&%MEM&&&&VSZ&&&RSS&TTY&&&&&&STAT&START&&&TIME&COMMAND
root&&&&&&&&&&1&&0.0&&0.1&&1&?&&&&&&&&Ss&&&04:53&&&0:00&/bin/bash
root&&&&&&&&&15&&1.0&&0.1&&3&?&&&&&&&&R+&&&04:54&&&0:00&ps&aux
现在如果我exit出去,容器就停止了。这个不是我们想看到的,为什么呢?因为你退出了bash
所以说容器适合单进程,比如说我起个nginx,我就只起一个nginx,容器的理念就是单进程,可以当虚拟机使用,但是理念不是一个虚拟机。
另外一种方法进入容器exit不让其退出就是nsenter,如果没有需要安装util-linux,这个可以访问另一个进程的名字空间namespace。
我们需要知道进程的PID
启动容器,因为一个静止的容器不会有PID
[root@jixuege&~]
a15b76fd966d
查看启动的容器
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
a15b76fd966d&&&&&&&&centos&&&&&&&&&&&&&&&&&&&&&&/bin/bash&&&&&&&&&&&&&&&About&an&hour&ago&&&Up&2&seconds&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mydocker
[root@jixuege&~]
[root@jixuege&~]
[root@a15b76fd966d&~]
退出,发现依旧在运行
[root@a15b76fd966d&~]
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
a15b76fd966d&&&&&&&&centos&&&&&&&&&&&&&&&&&&&&&&/bin/bash&&&&&&&&&&&&&&&About&an&hour&ago&&&Up&3&minutes&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mydocker
写成脚本,传PID就可以进入
[root@jixuege&~]
#!/bin/bash
PID=$(docker&inspect&--format&&{{.State.Pid}}&&$1)
nsenter&-t&$PID&-u&-i&-n&-p
[root@jixuege&~]
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
a15b76fd966d&&&&&&&&centos&&&&&&&&&&&&&&&&&&&&&&/bin/bash&&&&&&&&&&&&&&&About&an&hour&ago&&&Up&6&minutes&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mydocker
[root@jixuege&~]
[root@a15b76fd966d&~]
比较推荐进入docker容器的方式。
如何删除容器呢?
docker rm ID & & &删除已停止运行的容器
docker rm -f ID & & 强行删除正在运行的容器
创建容器,容器退出自动删除
docker&run&--rm&centos&/bin/echo&&hehe&
删除正在运行的容器
[root@jixuege&~]
还有2种进入容器的方式
docker exec |docker attach &这2种方式不推荐,还是推荐使用nsenter -t $PID -u -i -n -p
&nsenter&[options]&&program&&[args...]
&-t,&--target&&pid&&&&&&target&process&to&get&namespaces&from&&后面接PID
&-m,&--mount&[=&file&]&&enter&mount&namespace
&-u,&--uts&&&[=&file&]&&enter&UTS&namespace&(hostname&etc)&&
&-i,&--ipc&&&[=&file&]&&enter&System&V&IPC&namespace
&-n,&--net&&&[=&file&]&&enter&network&namespace
&-p,&--pid&&&[=&file&]&&enter&pid&namespace
&-r,&--root&&[=&dir&]&&&set&the&root&directory
&-w,&--wd&&&&[=&dir&]&&&set&the&working&directory
&-F,&--no-fork&&&&&&&&&&do&not&fork&before&exec'ing&&program&
&-h,&--help&&&&&display&this&help&and&exit
&-V,&--version&&output&version&information&and&exit
For&more&details&see&nsenter(1).
12、docker的网络访问
默认是帮忙做了一个映射,有个桥接网卡,帮忙做端口映射
[root@jixuege&~]
bridge&namebridge&idSTP&enabledinterfaces
docker919583no
让容器里的某一个端口对外,映射有两种方式,随机映射和指定端口映射
[root@jixuege&~]
99ce23e7efc797fb4ac1631eacd34a335dd716d4132
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
99ce23e7ef81&&&&&&&&nginx&&&&&&&&&&&&&&&&nginx&-g&'daemon&off&&&&16&seconds&ago&&&&&&Up&14&seconds&&&&&&&0.0.0.0:32769-&80/tcp,&0.0.0.0:3/tcp&&&berserk_kowalevski
[root@jixuege&~]
查看访问日志
[root@jixuege&~]
192.168.56.1&-&-&[06/Feb/2016:05:31:54&+0000]&&GET&/&HTTP/1.1&&200&612&&-&&&Mozilla/5.0&(Windows&NT&6.1;&WOW64)&AppleWebKit/537.36&(KHTML,&like&Gecko)&Chrome/48.0.2564.97&Safari/537.36&&&-&
2016/02/06&05:31:54&[error]&6
192.168.56.1&-&-&[06/Feb/2016:05:31:54&+0000]&&GET&/favicon.ico&HTTP/1.1&&404&570&&&&&Mozilla/5.0&(Windows&NT&6.1;&WOW64)&AppleWebKit/537.36&(KHTML,&like&Gecko)&Chrome/48.0.2564.97&Safari/537.36&&&-&
指定端口映射: 参数-p
再启动一个nginx,81对应容器里面的80
[root@jixuege&~]
74ddda4e912eab3d8c3
[root@jixuege&~]
CONTAINER&ID&&&&&&&&IMAGE&&&&&&&&&&&&&&&COMMAND&&&&&&&&&&&&&&&&&&CREATED&&&&&&&&&&&&&STATUS&&&&&&&&&&&&&&PORTS&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NAMES
74dd&&&&&&&&nginx&&&&&&&&&&&&&&&&nginx&-g&'daemon&off&&&&3&seconds&ago&&&&&&&Up&2&seconds&&&&&&&&443/tcp,&0.0.0.0:81-&80/tcp&&&&&&&&&&&&&&&&&&&&&berserk_wozniak
访问一下:
这个就是docker的网络访问了。
13、docker数据管理
docker的数据存储默认有2种方式来管理容器中的数据
1)数据卷:一个特殊的容器,所有其他的docker都可以连到这个容器,共享一个data,类似于搞一个NFS
启动一个看看
[root@jixuege&~]
[root@f&/]
怎么查看数据放在哪了呢?
#列出所有的信息
[root@jixuege ~]# docker inspect &f
找到下面这个Source
&&Mounts&:&[
&&&&&&&&&&&&&Name&:&&ede625a5f6da368e6b7dd9c7f7824dfe74c9acc5e&,
&&&&&&&&&&&&&Source&:&&/var/lib/docker/volumes/ede625a5f6da368e6b7dd9c7f7824dfe74c9acc5e/_data&,
&&&&&&&&&&&&&Destination&:&&/data&,
&&&&&&&&&&&&&Driver&:&&local&,
&&&&&&&&&&&&&Mode&:&&&,
&&&&&&&&&&&&&RW&:&true
进入到这个目录下,创建一个文件,然后在容器的/data/目录下查看看是否有这个文件
[root@jixuege&~]
[root@jixuege&_data]
[root@jixuege&_data]
去容器下查看并验证
[root@f&/]
-rw-r--r--&1&root&root&0&Feb&&6&11:48&test
说明:上面的命令是起一个容器,然后呢,把容器的/data/目录挂载到物理机的source下的目录下,这样我在物理机上创建的文件都可以直接同步到容器里面。
#还可以,启动一个容器,挂载到物理机的指定目录
[root@jixuege&~]
[root@eeb1353b4cae&/]
total&1200816
-rw-r--r--&&1&root&root&&&&&&&&33&Jan&12&09:52&a.sh
drwxr-xr-x&&9&root&root&&&&&&&149&Dec&29&02:36&apache-tomcat-8.0.30
-rw-r--r--&&1&root&root&&&9150593&Dec&&1&22:56&apache-tomcat-8.0.30.tar.gz
-rw-r--r--&&1&root&root&&Feb&&5&08:09&centos.tar.gz
drwxr-xr-x&&3&root&root&&&&&&&&18&Dec&29&13:21&dockerfile
-rw-r--r--&&1&root&root&&&&&&&&&0&Dec&29&12:12&hehe
-rw-r--r--&&1&root&root&&Dec&29&03:02&jdk-8u65-linux-x64.tar.gz
drwxr-xr-x&&8&&&10&&143&&&&&&4096&Oct&&7&00:29&jdk1.8.0_65
-rw-r--r--&&1&root&root&&&Jan&&4&02:10&microbox_etcd.tar.gz
drwxr-xr-x&&2&root&root&&&&&&&&61&Dec&30&09:15&nginx
-rw-r--r--&&1&root&root&&Jan&13&11:36&registry.tar.gz
-rw-r--r--&&1&root&root&&Jan&&4&01:41&rethinkdb.tar.gz
drwxr-xr-x.&2&root&root&&&&&&&&&6&Oct&29&&2014&rh
-rw-r--r--&&1&root&root&&&Jan&&7&16:57&shipyard.tar.gz
-rw-r--r--&&1&root&root&&Jan&&8&02:42&shipyard.zip
-rw-r--r--&&1&root&root&&&Jan&&7&16:37&swarm.tar.gz
-rw-r--r--&&1&root&root&&&&&&&&12&Jan&12&09:52&test.sh
可以把物理机 的一个目录挂到/data/目录下,适用于什么场景呢?
比如说我开发写好了代码在物理机的/data/目录,我可以把这个目录挂载到一台nginx的容器,然后呢吧容器里的nginx的路径指定到挂载点即可。
#还可以挂载单个文件
[root@jixuege&~]
[root@df1ddc3ee603&/]
-rw-------&1&root&root&12146&Feb&&6&05:01&.bash_histroy
#挂载并指定权限为只读
[root@jixuege&~]
[root@e76&/]
这样进入容器之后不能修改文件,只能读
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 docker pull 国内镜像 的文章

 

随机推荐