创建容器
新建容器
1 | docker create -it ubuntu:latest |


此命令新建一个容器,处于停止状态
启动容器
1 | docker start container_id |

启动一个已经创建的容器
新建并启动容器
1 | docker run -it name:tag /bin/bash |

相当于先执行docker create命令,再执行docker start命令
当使用docker run来创建并启动容器时,Docker在后台运行的标准操作包括:
1.检查本地是否存在本地镜像,不存在就从公有仓库下载
2.利用镜像创建一个容器,并启动该容器
3.分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中
5.从网桥的地址池中配置一个IP地址给容器
6.执行用户指定的应用程序
7.执行完毕后容器被自动终止
守护态运行
1 | docker run -d name:tag /bin/bash -c "" |


返回容器唯一id
1 | docker logs container_id |

指定容器id来获取容器的输出信息
终止容器
1 | docker stop [-t] container_id |

首先向容器发送SIGTERM信号,等待延时时间后,再发送SIGKILL信号终止容器。
1 | docker kill container_id |
直接向容器发送SIGKILL信号来终止容器
当Docker中指定的应用终结时,容器也会自动终止,处于Exited状态
启动终止状态的容器
1 | docker start container_id |

重启容器
1 | docker restart container_id |


进入容器
对于守护态运行的容器而言

attach命令
1 | docker attach [--detach-keys[=[]]] [--on-stdin] [--sig-proxy[=true]] container_id |

当多个窗口同时使用attach命令连到同一个容器时,所有窗口同步显示。
exec命令(推荐)
1 | docker exec [option] container_id COMMAND |

nsenter工具
使用nsenter连接到容器,需要找到容器进程的PID
1 | PID=$(docker inspect -f "{{ .State.Pid }}" container_id) |
连接容器
1 | nsenter --target $PID --mount --uts --ipc --net --pid |
举例



删除容器
删除处于终止或退出状态的容器
1 | docker rm [option] container_id... |

导入和导出容器
导入容器
导出一个已创建的容器到一个文件,无论此容器是否处于运行状态
1 | docker export [-o|--output[=""]] container_id |


导入容器
1 | docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [NAME[:TAG]] |

实际上,既可以使用docker load命令导入镜像存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库
两者的区别在于容器快照文件将丢失所有的历史纪录和元数据信息,用户可重新指定标签等元数据信息。而镜像存储文件将保存完整的记录。体积也更大。