Docker简介
Dockers是一个开源
的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化,容器是完全使用的沙箱机制,相互之间不会有任何借口。
Docker的组成:
- DockerClient客户端
- Docker Daemon守护程序
- Docker Images镜像
- DockerContainer容器
Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
安装
系统环境:win10 pro
前提:开启Hyper-V
【注:开启Hyper-V会导致VMware等虚拟机不能运行,不兼容】
在windows上运行docker其实是在win的linux子系统上运行
安装Toolbox,下载地址:toolbox下载地址
双击下载的Docker for Windows install安装文件,一路next,点击Finish完成安装。
安装完成通知栏出现,表示docker正在运行!
可以在命令行执行docker version来查看版本号,docker run hello-world来载入测试镜像测试。
鉴于国内网络问题,后续拉取Docker镜像
非常缓慢,我们可以配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com
新版的 Docker 使用 /etc/docker/daemon.json
(Linux)或者%programdata%\docker\config\daemon.json
(Windows) 来配置 Daemon。
请在该配置文件中加入(没有该文件的话,请先建一个):1
2
3{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
注:如果是linux环境,可以输入docker查看是否安装了docker(Ubuntu内核高于3.10才支持docker)
Ubuntu查看内核是否高于3.10:uname -r
获取最新docker安装包:wget -qo- https://get.docker.com/ | sh
Dockers 使用
1. Docker hello world
$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
各个参数解析:
docker
:Docker的二进制执行文件。run
:与前面的docker组合来运行一个容器ubuntu:15.10
:指定要运行的镜像,docker首先从本地查找镜像,不存在则从镜像仓库docker hub下载公共镜像。/bin/echo "Hello world"
:在启动的容器里执行的命令
运行交互式容器
通过docker两个参数-t -i,让docker运行的容器接收输入输出
$ docker run -i -t ubuntu:15.10 /bin/bash
root@dc0050c79503:/#
-t
:在新容器内指定一个伪终端或终端-i
:允许你对容器内的标准输入(STDIN)进行交互
交互后可直接输入命令查看容器
可以在容器内运行命令cat /proc/version
和ls
分别查看当前系统的版本信息和当前目录下的文件列表
我们可以通过运行exit
命令或者使用CTRL+D
来退出容器
启动容器(后台模式)
$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
-d
:以守护进程方式运行(后台)
这个长字符串叫容器ID,对每个容器来说都是唯一的,我们看他通过容器ID来查看对应的容器发生了什么。
$ docker ps
CONTAINER ID:容器ID
NAMES:自动分配的容器名称
在容器内使用docker logs命令,查看容器内的标准输出
$ docker logs (容器IDor 自动分配的名字)
停止容器
$ docker stop (可选:写ID或name)
请求帮助:
docker(没错,只输入这个单词即可显示help信息)
docker command --help(更深入一些)
docker stats --help
docker容器中运行一个Python Flask应用运行一个WEB应用:
docker pull training/webapp #载入镜像
docker run -d -P(将容器的网络端口映射到主机上) training/webapp python app.py
docker ps(会发现多了端口的信息(docker默认开放了python flask的端口被映射))
docker run -d -p 5000:5000(-p参数可指定) training/webapp python app.py
docker ps(查看端口是否被映射到正确位置)
可单独直接查看端口信息的命令:docker port (ID或名字)
查看WEB应用程序日志:
docker logs -f(类似linux的tail -f) (ID或名字)
查看web应用的进程:
docker top determined_swanson
检查WEB应用程序:docker inspect determined_swanson(会返回一个JSON文件记录着Dokcer容器的配置和状态信息)
停止WEB应用程序:docker stop determined_swanson
重启WEB应用程序:docker start determined_swanson
docker ps -l(查询最后一次创建的容器)
docker restart(对正在运行的程序可重启)
移除WEB应用容器:docker rm determined_swanson(删除容器时,容器必须时停止状态)
查看本地主机上的镜像:docker images
指定15.10的ubuntu运行容器:dockerrun -t -i ubuntu:15.10 /bin/bash
(不指定一个镜像的版本标签的话,默认使用ubuntu:lastest镜像)
其他
获取新的镜像:docker pull ubuntu:13.10
更新镜像(需要创建一个新的容器):docker run -t -i ubuntu:15.10 /bin/bash
在内部:apt-get update 然后:exit
创建容器副本:docker connit -m(提交描述的信息)="hasupdate" -a(指定镜像作者)="runoob" e218edb10161(容器ID) runoob/ubuntu:v2(要创建的目标镜像名)
设置镜像标签:docker tag 860c279d2fec(容器ID)runoob/centos:dev
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
上面的例子中,默认都是绑定tcp
端口,如果要绑定UDP
端口,可以在端口后面加上/udp
当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用–name标识来命名容器,例如:docker run -d -P --name runoob training/webapp python app.py