docker: 从docker图标可以看到是一个鲸鱼背着很多像集装箱一样的东西,每一个集装箱里面装的就是我们写的代码及运行环境,无论把集装箱放到哪里,都可以直接使用运行
教程:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。容器是完全使用沙箱机制,更重要的是容器性能开销极低。
优点:
1、快速,一致地交付您的应用程序。 --开发人员可以通过docker快速的交付整体的代码和所需的运行环境
2、响应式部署和扩展。 --可以部署在开发人员本机、虚拟机、测试环境等
3、在同一硬件上运行更多工作负载。 --同一台物理机或虚拟机可以运行多个项目
使用:
docker run ubuntu:15.10 /bin/echo "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 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:
docker run -i -t ubuntu:15.10 /bin/bash
各个参数解析:
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 进行交互。
我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
输出:2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
在输出中,我们没有看到期望的 "hello world",而是一串长字符,这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:
docker ps
输出:
CONTAINER ID IMAGE COMMAND ...
5917eac21c36 ubuntu:15.10 "/bin/sh -c 'while t…" ...
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
docker logs 2b1b7a428627
停止容器
docker stop <容器 ID>
停止的容器可以通过 docker restart 重启
docker restart <容器 ID>
容器的使用:
获取镜像:
docker pull
创建并进入到容器内:
docker run -it ubuntu /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
启动已停止运行的容器
docker ps -a
docker start <container_id>
后台运行容器
docker run -itd --name <container_name> ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach : 使用此方式进入容器后,退出时会到时容器停止
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。 更多参数说明请使用 docker exec --help 命令查看。
导出和导入容器
导出:
docker export [container_id] > test.tar 导出容器 ID 快照到本地文件 test.tar。
导入:
cat docker/test.tar | docker import - test:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
docker rm -f <container id>
此命令可以清理掉所有处于终止状态的容器:docker container prune
示例运行一个 web 应用
1.docker pull training/webapp
2.docker run -d -P training/webapp python app.py
参数说明:
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
3.查看 WEB 应用容器
使用 docker ps 来查看我们正在运行的容器:
docker ps
CONTAINER ID IMAGE COMMAND ... PORTS
d3d5e39ed9d3 training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp
这里多了端口信息。
PORTS
0.0.0.0:32769->5000/tcp
4.我们也可以通过 -p 参数来设置不一样的端口:
docker run -d -p 5000:5000 training/webapp python app.py
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
5.网络端口查看的快捷方式
docker port <container id>
输出:5000/tcp -> 0.0.0.0:5000
6.查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
docker logs -f <container id>
参数: -f 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
7.查看 WEB应用程序容器中的进程
docker top <container id 或 container name>
8.检查WEB 应用程序容器的状态信息
docker inspect <container id 或 container name>