Docker学习笔记-3创建容器
在第⼀章介绍Docker架构时,我们介绍过Docker中镜像和容器的关系。
docker打包镜像
我们再复习⼀遍,镜像是模板,容器是具体实例。⽤Java语⾔中的概念来理解就是:镜像是类,容器是对象。
So,当我们创建⼀个容器时,需要从镜像仓库中选择⾃⼰需要的镜像,然后创建容器并使⽤。当然,如果现有镜像没有能满⾜我们需求的,我们也可以⾃⼰定义镜像,再⽤⾃⼰的镜像创建容器并使⽤。
⾸先我们讲,⽤现有镜像创建容器,并使⽤它。
使⽤现有镜像创建容器的命令是:
docker run ubuntu:15.10
docker:是我们刚安装好的docker软件。
run:是docker的指令,表⽰启动⼀个容器。
ubuntu:15.10:是镜像名称,表⽰我们要使⽤这个镜像来启动容器。Docker ⾸先从本地主机上查镜像
是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
注意:docker默认镜像仓库是官⽅的,在国外速度⽐较慢。我们可以修改仓库,使⽤国内的。
修改镜像仓库:
编辑/etc/docker/daemon.json,如果不存在则创建:
vi /etc/docker/daemon.json
内容如下:
{
"registry-mirrors":[ "registry.docker-cn" ]
}
修改保存,之后要重启docker服务:
1 service docker restart
然后可以查看下变化,执⾏docker info命令,可以看到Registry Mirrors下已经有了我们刚配置的地址。
ok,我们来使⽤现有镜像启动容器:
docker run ubuntu:15.10
不报错就是启动成功了。通过docker ps命令可以看到正在运⾏的容器:
docker ps
这⾥会显⽰⼀个空列表,因为我们的容器ubuntu:15.10什么都没做,所以进程就结束了,容器则关闭了。
我们可以通过docker ps -a命令看到已经关闭的容器:
docker ps -a
这样就能看到刚才启动过的容器了,在"created"字段可以看到容器创建的时间,“status”可以看到容器⽬前的状态。
我们可以让容器做点事,让它别那么快结束:
docker run ubuntu:15.10 nohup sleep10>/dev/null &
这⾥我们在容器中执⾏了sleep命令,然后再通过docker ps查看docker进程,就可以看到了:
container id:容器id,每次启动容器时分配。
image:镜像名称。
command:当前运⾏的进程,⼀般指主进程,如果该主进程⼜启动了其他⼦进程,不会显⽰。
created:创建时间。
status:当前状态。
ports:容器的端⼝信息和使⽤的连接类型(tcp\udp)
names:⾃动分配的容器名称。
这⾥我们只sleep了10秒,10秒后在看docker ps就没有了,⽤docker ps -a可以看到状态是Exited。已停⽌。
我们也可以进⼊容器中,进⼊容器有四种⽅式:
1、使⽤docker attach命令进⼊容器
在容器运⾏5,通过docker ps查看容器的container id,使⽤命令进⼊容器:
docker attach 容器id
这种⽅式类似于共享屏幕,也就是我们可以看到当前运⾏容器的程序和输出,但是我们对当前容器的操作也会影响到正在运⾏的程序。如果多个⽤户使⽤docker attach进⼊同⼀个容器,那么他们之间的操作是会相互影响的,可以看到其他⼈的操作。如果其中⼀个⽤户运⾏阻塞操作,那么其他⽤户就会被阻塞不能操作。
2、容器内部运⾏ssh服务,外部通过ssh登录进容器
3、使⽤nsenter进⼊Docker容器
拿到docker容器进程的真实pid,使⽤nsenter进⼊进程命名空间。
4、使⽤docker exec进⼊容器
这个命令可以使⽤-it参数打开输⼊输出交互,然后运⾏/bin/bash,就启动了⼀个新shell,可以看到正在运⾏的程序,进⾏其他操作也不会影响到其他进⼊的⽤户。和ssh效果类似,每个⽤户都会启动⼀个shell进程。
docker exec -it 容器id /bin/bash
除了上⾯这4种,还有⼀种更加便捷的,就是在启动容器时进⼊:
docker run -i -t ubuntu:15.10 /bin/bash
这样,就是在启动容器时,直接进⼊容器中,效果和docker exec类似。
⾄此,我们就讲完了使⽤现有镜像创建容器并进⼊容器查看和交互。
接下来,看如何创建⾃定义镜像,并启动。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。