教程
http://dockone.io/article/101
http://www.runoob.com/docker/docker-hello-world.html
1、什么是docker?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
简单点理解,就类似于虚拟机(VMware),只不过VMware虚拟的是整个操作系统,而docker轻量级些,虚拟的是一个进程。
2、docker架构
Docker 镜像(Images) |
Docker 镜像是用于创建 Docker 容器的模板。 |
Docker 容器(Container) |
容器是独立运行的一个或一组应用。 |
Docker 客户端(Client) |
Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。 |
Docker 主机(Host) |
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker 仓库(Registry) |
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 |
Docker Machine |
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
简单点理解就是:docker服务器提供的服务,docker客户端连接docker服务器,执行具体的操作。例如:docker run centos6,docker服务器通过docker镜像运行一个容器(centos6)。
3、安装docker
查看http://www.runoob.com/docker/ubuntu-docker-install.html
4、docker的常用命令
docker --help 查看docker帮助文档
docker version 查看docker版本
docker info 查看docker详细信息
镜像:
docker 对镜像的处理跟git还是非常相似的
docker images 查看本地镜像
REPOSTITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSTITORY:TAG 来定义不同的镜像。
image_name = [REPOSITORY + TAG] 或者 [IMAGE ID]
docker search [image_name] 查找镜像,例如 docker search centos6
docker pull [image_name] 下载镜像,例如 docker pull docker.io/guyton/centos6
docker commit [container_id] 根据容器状态,创建一个新的镜像。登录容器后,我们经常需要安装一些软件,但是如果我们不保存容器状态,直接退出。那么下次docker run centos6的时候,是根据centos6这个镜像来创建一个新的容器,自然不会有我们安装的软件。所以如果你安装了一些软件,要想下次登录的时候还可以使用这些软件,第一种方式:通过 docker ps -l获取容器id,docker commit 容器id创建一个新的镜像。第二种方式,不要退出容器,docker rm 容器id。
docker push [image_name] 推送镜像到仓库
如果你向执行docker push操作,那么必须到在DockerHub上创建账号:https://hub.docker.com/,然后docker login 登录
docker tag [image_name] [your_tag_name]
容器:
docker run [image_name] 根据镜像启动一个新容器
例如:docker run ubuntu:15.10 /bin/echo "Hello world" #如果不指定tag,tag默认为最新版本,启动一个ubuntu容器,并执行一条语句、
docker run -i -t ubuntu:15.10 /bin/bash #运行交互式的容器
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" #启动容器(后台模式),如果想要查看输出,使用docker log
-d:让容器在后台运行。
docker run -d -P training/webapp python app.py
-P:将容器内部使用的网络端口映射到我们使用的主机上
通过docker ps/docker port [container_id\container_name] 查看端口信息,0.0.0.0:32768->5000/tcp :将主机端口 32768映射到docker容器的5000端口
docker run -d -p 5000:5000 training/webapp python app.py #指定端口映射地址
docker log [container_id\container_name] 查看容器输出
docker ps #查看running的容器进程信息
docker stop/start/restart [container_id\container_name] #停止/启动/重启容器
docker stats #查看running容器的内存、cpu使用率等信息
docker rm [container_id\container_name] #删除一个容器,在删除容器前必须停止容器(docker stop)