4.1新建容器
使用docker create 命令
docker create -it ubuntu:latest
使用create命令新建的容器处于停止状态,可以使用docker start命令来启动
docker run = docker create + docker start
利用docker run来创建并启动容器时,docker在后台运行的标准操作包括:
1.检查本地是否存在指定的镜像,不存在就从共有仓库下载
2.利用镜像创建并启动一个容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5.从地址池配置一个IP地址给容器
6.执行用户指定的应用程序
7.执行完毕后容器被终止
example:docker run -t -i ubuntu:14.04 /bin/bash
其中-t选项让docker分配一个伪终端并绑定到容器的标准输入上,-i让容器的标准输入保持打开
使用exit来退出
对于新建的docker容器,当运行的应用(此处为bash)退出后,容器也没有继续运行的必要了。
守护态运行
-d参数使docker容器在后台以守护态(Daemonized)形式运行
要获取容器的输出信息,可以通过docker logs命令
4.2终止容器
使用docker stop来终止一个运行中的容器,格式为:docker stop [-t|--time[=10]]
它会首先向容器发送SIGTERM信号,等待一段时间后(默认为10s)再发送SIGKILL信号终止容器
此外当docker容器中指定的应用终结时,容器也自动终止。例如前面用户使用exit命令或者ctrl+d来推出中断时,所创建的容器理科终止。
另外可以使用docker stop 来终止一个运行中的容器 docker kill
命令会直接发送SIGKILL信号来强行终止容器 docker ps -a -q
命令可以看到处于终止状态的容器的ID信息 docker start container_id
可以启动一个已经停止的容器 docker restart container_id
可以重启一个正在运行的容器
docker attach container_name
使用该命令可以连接到一个容器内部,比如一个ubuntu容器在运行中,可以使用docker attach 进入这个ubuntu的命令行终端
但是使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。当某个窗口因为命令阻塞时,其他窗口也无法执行操作了。
exec命令
docker自1.3版本起提供的一个命令,可以直接在容器内运行某个命令。比如在ubuntu中运行bash docker exec -ti container_id /bin/bash
nsenter在util-linux包2.23版本后包含,如果系统中util-linux包没有这个命令,可以按照下述方法安装:
cd /tmp
curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf util-linux-2.24.tar.gz
cd util-linux-2.24
./configure --without-ncurses
make nsenter && sudo cp nsenter /usr/local/bin
为了使用nsenter连接到容器,需要找到容器进程的pid,可以通过下述命令获取
PID=$(docker inspect --formart "{{ .State.Pid}}" <container>)
通过这个pid就可以连接到这个容器: nsenter --target $PID --mount --uts --ipc --net --pid
示例:
docker run -idt ubuntu
docker ps
PID=${docker-pid container_id}
sudo nsenter --target $PID --mount --uts --ipc --net --pid
之后进入了ubuntu的命令行终端
删除容器
使用docker rm [OPTIONS] CONTAINER [CONTAINER…]命令删除处于终止状态的容器
参数列表如下:
-f,–force=false强行终止并删除一个运行中的容器
-l, –lin=false 删除容器的连接,但是保留容器
-v, –volume=false删除容器挂载的数据卷
导出容器
导入容器使用export命令 docker export container_id > name.tar
导入容器
使用docker import 命令导入成为镜像 cat name.tar | docker import - container_name
docker import 和 docker load的区别
docker import导入的是容器快照,load命令导入镜像存储文件到本地镜像库。两者区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。另外从容器快照文件导入时可以重新指定标签等元数据信息。