Docker中容器和镜像的概念
镜像和容器类比于面向对象编程中的类和对象的概念
下面这个例子是从网上下载一个 ubuntu:15.10的镜像(类), 然后使用该镜像在本地运行了一个容器(该类生成的实例), 这里的容器就相当于一个精简的ubuntu系统,我们在这个ubuntu系统里运行了命令
一个例子
[email protected]:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
- docker: Docker 的二进制执行文件。
- run:与前面的 docker 组合来运行一个容器。
- ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo “Hello world”: 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
在docker容器中运行一个Web应用
这里运行python中基于flask的Web应用
docker pull training/webapp # 首先下载镜像
docker run -d -P training/webapp python app.py # 运行容器
其中
-
-d
表示后台运行
-
P
表示容器的端口直接映射在本主机上
- 使用
查看正在使用的容器,如下
[[email protected] ~] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ddbf3212ac4 training/webapp "python app.py" 18 minutes ago Up 18 minutes 0.0.0.0:32768->5000/tcp heuristic_stallman
我们发现我们的Web应用容器的信息如下
CONTAINER ID (容器的唯一ID)
0ddbf3212ac4
IMAGE (该容器所属的镜像)
training/webapp
COMMAND (该容器执行的命令)
“python app.py”
CREATED (创建时间)
18 minutes ago
STATUS (状态)
Up 18 minutes
PORTS (使用-P选项独有的状态,显示占用的端口号和使用的网络协议)
0.0.0.0:32768->5000/tcp
NAMES(该容器的"花名")
heuristic_stallman
既然是一个Web应用,我们在本地浏览器上输入IP地址和端口号,发现部署成功

- 在Web应用中 使用 -p 来指定容器端口号到主机端口号的映射
docker run -d -p 8080:8888 training/webapp python app.py
让容器的8080端口映射到主机的8888端口
- 快捷的查看WEB应用程序容器端口号 docker port +容器ID / 容器花名
docker port heuristic_stallman
5000/tcp -> 0.0.0.0:5000
- 查看WEB应用程序容器内的标准输出 docker logs + 容器ID / 容器花名
[[email protected] ~]docker logs heuristic_stallman
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.13.12 - - [11/Oct/2018 07:43:00] "GET / HTTP/1.1" 200 -
192.168.13.12 - - [11/Oct/2018 07:43:01] "GET /favicon.ico HTTP/1.1" 404 -
- 查看WEB应用程序容器内部的进程 docker top
- 查看WEB应用程序容器 docker inspect
-
容器的启动停止删除 分别对应 docekr run/stop/rm + 容器ID / 容器花名
注意删除前必须停止容器