Docker容器操作
容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。


创建容器

对容器进行操作就跟直接操作应用一样简单、快速。Docker容器实在太轻量级了,用户可以随时创建或删除容器。

1.新建容器

可以使用docker create命令新建一个容器,例如:

$ docker create -it 镜像名:标签   //基于镜像创建容器,默认是没有运行的

$ docker ps -a   //查看所有容器

使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。docker容器操作_docker


2 启动容器

使用docker start命令来启动一个已经创建的容器:

docker start 容器ID       //开启容器

docker stop 容器ID       //关闭容器

docker容器操作_容器_02

这里要注意的是:docker start 后面加的是容器的ID   

启动以后状态变为Up启动状态。


docker容器的状态:
up   开启状态
Exited    终止状态
Create    创建状态
(Paused)   暂停状态
状态没有        停止状态

docker pause/unpause 容器ID  //暂停docker容器与取消暂停docker容器

删除:docker rm -f  容器名(ID)

docker容器操作_容器_03

新建并启动容器

除了创建容器后通过start命令来启动,也可以直接新建并启动容器。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。


docker run 容器名 /bin/bash -c ls /
//创建容器的同时启动并运行相关程序,命令完成容器就停止。

docker容器操作_容器_04


启动一个bash终端,允许用户进行交互:

docker run -it  镜像ID:标签  /bin/bash

docker容器操作_容器_05

其中,-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容器操作_操作_06

进入运行中的容器中,对容器做各种操作:
docker exec -it 容器id  /bin/bash    进入容器中
退出方法:
1、输入exit
2、Ctrl+p, Ctrl+q键返回主机控制台

docker容器操作_操作_07

连接到容器的会话   
docker attach 容器id号

docker容器操作_docker_08

注:连接的前提是你要有这个容器

//将容器导出成文件
docker export ed2e7380ef05 > httpd
将指定容器导出成名为httpd的文件,该文件为docker镜像文件

docker容器操作_docker_09

//将容器文件生成镜像
docker import  文件名  镜像名:标签

docker容器操作_容器_10

//删除容器
docker rm 容器ID  指定删除某个容器
docker rm -f 容器ID  强制删除运行中的容器,不建议
docker container prune   删除所有停止的容器
docker rm $(docker ps -qf status=exited)    删除指定状态的容器

docker容器操作_容器_11

//查看容器的详细信息

docker inspect  容器ID      

docker容器操作_docker_12

这里要知道的是:

假设:  你需要查看容器的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"
                }
            }
        }
    }
]

docker容器操作_容器_13