Docker学习笔记-3 创建容器


在第一章介绍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":[ "https://registry.docker-cn.com" ]
}

修改保存,之后要重启docker服务:

1 service docker restart

然后可以查看下变化,执行docker info命令,可以看到Registry Mirrors下已经有了我们刚配置的地址。

这里的registry-mirrors是一个数组,可以设置多个url,这里的https://registry.docker-cn.com是docker官方国内地址。还可以设置其他源:

Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc
https://docker.mirrors.ustc.edu.cn

中国科技大学
https://docker.mirrors.ustc.edu.cn

 

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 sleep 10>/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登录进容器

但是不建议这么操作,请参考:https://www.oschina.net/translate/why-you-dont-need-to-run-sshd-in-docker?cmp

 

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类似。

至此,我们就讲完了使用现有镜像创建容器并进入容器查看和交互。

接下来,看如何创建自定义镜像,并启动。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM