docker常用问题

来源:互联网 发布:渗透理论 复杂网络 编辑:程序博客网 时间:2024/05/29 18:37

docker进入容器 之后怎么退出

ctrl+d 退出容器且关闭, docker ps 查看无


ctrl+p+q 退出容器但不关闭, docker ps 查看有


docker启动容器

启动容器

有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。所需要的命令主要为 docker run 。
例如,下面的命令输出一个 “Hello World”,之后终止容器。
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world
这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。
下面的命令则启动一个 bash 终端,允许用户进行交互。
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#
其中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入命令,当利用 Docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜像创建并启动一个容器分配一个文件系统,并在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去从地址池配置一个 ip 地址给容器执行用户指定的应用程序执行完毕后容器被终止可以利用 docker start 命令,直接将一个已经终止的容器启动运行。容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资启动容器新建并启动启动已终止容器源。

可以在伪终端中利用 ps 或 top 来查看进程信息。

 $ ps
PID TTY TIME CMD
1 ? 00:00:00 bash
11 ? 00:00:00 ps
可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。

守护态运行

更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。
例如下面面的命令会在后台运行容器。
$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147
容器启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。
$ sudo docker ps
Container ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e5535038e28 ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage
要获取容器的输出信息,可以通过 docker logs 命令。
$ sudo docker logs insane_babbage
hello world
hello world
hello world


Docker检查运行中的容器的详细信息

查看容器中详细信息,命令很简单,dcoker inspect id

首先用docker ps查看所有启动的镜像,

[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44ab452b47fe docker.io/ubuntu:latest "/bin/bash" About a minute ago Up About a minute prickly_blackwell
[root@bogon ~]#

可以看到id是 44ab。。。。

利用命令查看容器的详细信息
[root@bogon ~]# docker inspect 44ab452b4
[
{
"Id": "44ab452b47fe639b2ec2d0c3fb75f8b270c007d2e83843c331130c32b67e6ca3",
"Created": "2016-01-12T13:46:16.365773903Z",
"Path": "/bin/bash",
"Args": [],
"State": {

输出太多了 我只截取了一部分。

docker进入后台运行的容器

我们运行docker容器的时候,使用了-d参数,把容器在后台运行后。
这个时候,我们使用docker ps命令,我们就可以知道哪些程序在后台运行。
 

 

我们要怎么进入到docker容器呢?
 
 
1:使用docker attach命令
我们使用
 
docker attach db3 或者 docker attach d48b21a7e439

 

 
db3是后台容器的NAMES,d48b21a7e439是容器的进程ID  CONTAINER ID
然后就进去了这个容器的ssh界面。
但是它有一个缺点,只要这个连接终止,或者使用了exit命令,容器就会退出后台运行
 
 
2:使用docker exec命令
这个命令使用exit命令后,不会退出后台,一般使用这个命令,使用方法如下
 
docker exec -it db3 /bin/sh 或者 docker exec -it d48b21a7e439 /bin/sh

 

 
db3是后台容器的NAMES,d48b21a7e439是容器的进程ID  CONTAINER ID
 /bin/sh 是固定写法
它也能进入这个容器


一个container下面可否映射多个端口到Host

可以
例如这样: docker run -d -p 80:80 -p 22:22 
分别映射80 和22 到host








0 0