1,创建容器
- 新建容器 docker create
docker create -ti redis
使用 docker create创建的容器处于create状态,需要执行docker start命令启动。
- 新建并启动容器 docker run
等价于执行完docker create之后执行docker start。docker run创建容器的后台标准操作包括:
- 检测本地是否存在对应的镜像,没有的话存公有仓库下载
- 利用镜像创建并启动一个容器
- 分配文件系统,在只读的镜像层挂在一层可读写层
- 从宿主机配置的网桥接口中桥接一个虚拟接口到容器
- 从地址池配置一个ip给容器
- 执行用户指定的应用程序
- 执行之后容器被终止
docker run -it ubuntu /bin/bash 开启一个终端,用户可以进行交互,-t选项让docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。在交互模式下,可以通过创建的终端来输入命令。在容器终端运行ps命令,发现只有一个bash一个进程,并没有启动其他不需要的进程。按
Ctrl+D或者运行
exit命令退出容器。对于所创建的bash容器,当运行exit命令退出之后,容器就自动处于终止状态了。因为对于docker容器来说,当运行当程序(bash)结束之后,容器也没有必要运行下去了。
- 守护态运行 docker run -d
更多的时候,需要让docker容器在守护态运行:
docker run -d ubuntu /bin/sh -c "while true;do echo hello;sleep 1;done"
要查看容器的输出信息,可以运行docker logs查看。
2,终止容器 docker stop --time[=10]
首先向容器发送SIGTERM信号,等一段时间后(默认10s)向容器发送SIGLKILL信号终止容器:docker stop --time=1 96 ,使用docker ps -a -q命令查看已终止的容器id,对于已终止的容器可以运行docker start 命令来重新启动,可以使用docker restart使启动状态的容器终止,然后重新启动。
3,进入容器 docker attach 、docker exec、nsenter工具等
- docker attach 96,但是这种方式有时候不是很方便,当多个窗口同时attach进同一个容器时,所有窗口都会同步显示,当某个窗口阻塞时,所有其他窗口也无法操作了。
- docker exec -it 96 /bin/bash,docker自1.3版本起,提供了这个更方便到工具,可以直接在容器内运行命令。
- nsenter是系统操作系统自带到命令,不推荐使用。
4,删除容器 docker rm [options] container [container...]
- -f,--force=true 强行删除一个正在运行的容器
- -l,--link=false 删除容器的网络连接,但不删除容器
- -v,--volumes=false 删除容器挂载的数据卷
5,导入导出容器
- 导出容器:docker export container
docker export c4 >test.tar,将id为c4的容器导出到test.tar。
- 导入容器:docker import
cat test.tar | docker import - redis-test,查看镜像列表
用docker import可以导入一个容器快照到本地镜像库,用docker load也可以导入一个镜像存储文件到本地镜像库,区别在于容器快照文件将丢失所有的历史记录和元数据(仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,并且体积较大。此外,从容器快照导入时可以重新指定标签等元数据信息。