Docker容器操作
容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。
创建容器
对容器进行操作就跟直接操作应用一样简单、快速。Docker容器实在太轻量级了,用户可以随时创建或删除容器。
1.新建容器
可以使用docker create命令新建一个容器,例如:
$ docker create -it 镜像名:标签 //基于镜像创建容器,默认是没有运行的
$ docker ps -a //查看所有容器
使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。
2 启动容器
使用docker start命令来启动一个已经创建的容器:
docker start 容器ID //开启容器
docker stop 容器ID //关闭容器
这里要注意的是:docker start 后面加的是容器的ID
启动以后状态变为Up启动状态。
docker容器的状态:
up 开启状态
Exited 终止状态
Create 创建状态
(Paused) 暂停状态
状态没有 停止状态docker pause/unpause 容器ID //暂停docker容器与取消暂停docker容器
删除:docker rm -f 容器名(ID)
新建并启动容器
除了创建容器后通过start命令来启动,也可以直接新建并启动容器。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。
docker run 容器名 /bin/bash -c ls /
//创建容器的同时启动并运行相关程序,命令完成容器就停止。
启动一个bash终端,允许用户进行交互:
docker run -it 镜像ID:标签 /bin/bash
其中,-t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
更多的命令选项可以通过man docker-run命令来查看。在交互模式下,用户可以通过所创建的终端来输入命令。
守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加-d参数来实现。
下面的命令会在后台运行容器:
docker run -d 镜像ID /bin/sh -c "while true; do echo hello world; sleep 1; done"
进入运行中的容器中,对容器做各种操作:
docker exec -it 容器id /bin/bash 进入容器中
退出方法:
1、输入exit
2、Ctrl+p, Ctrl+q键返回主机控制台
连接到容器的会话
docker attach 容器id号
注:连接的前提是你要有这个容器
//将容器导出成文件
docker export ed2e7380ef05 > httpd
将指定容器导出成名为httpd的文件,该文件为docker镜像文件
//将容器文件生成镜像
docker import 文件名 镜像名:标签
//删除容器
docker rm 容器ID 指定删除某个容器
docker rm -f 容器ID 强制删除运行中的容器,不建议
docker container prune 删除所有停止的容器
docker rm $(docker ps -qf status=exited) 删除指定状态的容器
//查看容器的详细信息
docker inspect 容器ID
这里要知道的是:
假设: 你需要查看容器的IP地址或者一些其他信息 可以采用inspect 过滤
我 "NetworkSettings": {
"Bridge": "",
"SandboxID": "59749f7b612c0dea54dd92962ca38d0b7b822b72099c36e5403dc42b6ba4a5c5",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": null
},
"SandboxKey": "/var/run/docker/netns/59749f7b612c",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "d59586ccdb378dcca52dc0c141732e325833740cb1575aaf41efa8c0c80886d6",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "271a491425a1f921004e6de6c03d77873a8e11da916bca36a8efc21ca49eb712",
"EndpointID": "d59586ccdb378dcca52dc0c141732e325833740cb1575aaf41efa8c0c80886d6",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
}
}
]