Docker 中,有容器(Container),镜像(Imag),仓库(Repository)一说。镜像相当于我们Java中的 类 , 容器 相当于 Java 中的实例。仓库是存放镜像的地方。容器的实质是一个进程,但是有何我们常见的简称不同,容器进程运行于属于自己的独立空间(Linux Namespaces), 容器中有自己的 root 文件系统,自己的网络配置,自己的进程空间 等等,总之,一个容器内,就相当于我们的一个 Linux 系统.

Docker 过把瘾

Hello World

Docker 允许在容器内运行应用程,使用 docker run 来在在容器内运行一个应用程序。

1
docker run ubuntu:15.10 /bin/echo "Hello World ,I am Mr.Sun"
  • docker: Docker 的二进制执行文件
  • run: 与前面的 docker 组合来运行一个人容器
  • ubuntu:15.10: 指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,若不存在,就会从 镜像仓库 Docker Hub下载公共镜像。
  • /bin/echo “Hello World ,I am Mr.Sun”: 在启动的容器里面执行的命令

上面的语句输出后,就是这个样子:
hello-world

运行交互式容器

通过 docker 的两个参数 -i , -t , 我们可以进入到容器内部;

1
docker run -i -t ubuntu:15.10 /bin/bash

然后,我们就进入到我们的ubuntu系统了,这就是一个 Linux 系统。退出: exit

后台模式

1
docker run -d ubuntu:15.10 /bin/bash -c "while true ; do echo hello world; sleep 1; done"

看结果:
后台模式
这里输出的一大串是我们的 容器ID , 我们可以通过 容器ID 来查看对应的容器发生了什么:

1
docker ps

docker-ps

  • CONTAINER ID: 容器ID
  • IMAGE: 容器镜像
  • COMMAND: 启动容器运行的命令
  • CREATED: 容器的创建时间
  • STATUS: 容器状态。
    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)
  • PORTS: 容器的端口和使用的连接类型(TCP \ UDP )
  • NAMES: 自动分配的容器名称

我们在宿主主机内使用 docker log 命令,查看容器内的标准输出:

1
docker logs 57f43e88141d

docker-logs-container-id

停止容器

1
docker stop 57f43e88141d

Docker 容器

在前面Docker过把瘾中,我们有聊到Docker的容器的一些使用方式,那么这里,我们还是要讲一下的,关于 Docker 容器的一些使用命令。

获取镜像

1
docker pull ubuntu

启动容器

以下命令,使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入容器:

1
docker run -it ubuntu /bin/bash

参数说明

  • -i : 交互式操作
  • -t : 终端
  • ubuntu : 镜像名
  • /bin/bash : 这是我们要执行的命令们这里希望的是有一个交互式的 shell ,所以是这个
  • 推出终端 : exit

启动已停止运行的容器

一下命令,可以查看所有容器:

1
docker ps -a

使用 docker start [container id]

1
docker start 57f43e88141d

后要运行容器

大部分情况下,我们不需要进入到容器内,只需要要容器在后台运行就行,执行:

1
docker run -it --name ubuntu-test ubuntu /bin/bash

注: 加了 -d 参数不会进入到 容器 , 想要进入容器使用指令 docker exec

1
2
3
4
5
# 推荐使用
docker exec -it 57f43e88141d /bin/bash

# 或者,但这个退出容器后会导致容器的停止
docker attach 57f43e88141d

重启停止容器

1
docker stop / restart [container id]

导入/出容器

导入用 import .

1
2
3
4
# 可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
# 指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo

导出用 export

1
docker export 1e560fca3906 > ubuntu.tar

删除容器

1
docker rm -f [ container id]

WEB容器实例

运行一个 WEB 容器

使用 docker 构建一个 web 应用程序

1
2
docker pull training/webapp
docker run -d -P training/webapp python app.py

参数说明

  • -d : 后台运行
  • -P : 这里的 P 大写 , 将容器内部使用的网络端口映射到我们主机上

查看 WEB 容器

1
docker ps

docker-web

docker-web-result

当然,我么也可以通过 -p (小写) 来设置端口

1
docker run -d -p 5000:5000 training/webapp python app.py

网络端口的快捷方式

1
docker port [container ID / NAME]

查看WEB程序的日志

1
docker logs -f [ container ID]

查看WEB应用程序进程

1
docker top [ container ID / NAME]

检查 WEB 应用程序

1
docker inspect [ container NAME / ID]

停止WEB 应用程序

1
docker stop [contatiner ID /NAME]

移除WEB容器

1
docker rm [container ID / NAME]