Docker的应用场景
-
Web 应用的自动化打包和发布。
-
自动化测试和持续集成、发布。
-
在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker 架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 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。 |
Windows下安装Docker
http://www.runoob.com/docker/windows-docker-install.html
Docker容器的使用
Docker客户端
$ docker 查看所有命令
$ docker command --help 查看命令的详细用法
例: $ docker stats --help
$ docker pull training/webapp 载入镜像
docker run -d -P training/webapp python app.py 在后台运行(-d)webapp容器,并在容器里运行app.py程序,并将程序的端口映射到当前主机(-P)
$ docker ps 查看正在运行的容器
container ID(容器唯一标识) IMAGE(使用的镜像) COMMAND(执行的命令) ..... PORT(映射的端口号)
PORTS
0.0.0.0:32769->5000/tcp 表示容器的5000端口号映射到主机的32769端口上, 访问主机32769端口便能访问容器中的5000端口对应的程序
$ docker ps -l 查询最后一次创建的容器
$ docker run -d -p 5000:5000 trainning/webapp python app.py 修改端口映射(-p)
$ docker port d3d5e39ed9d3 根据container ID 查看容器端口信息 这个ID不用全部输入完,只需要保证唯一就行
>>> 5000/tcp -> 0.0.0.0:5000
$ docker port 容器名字 根据names查看容器端口信息
$ docker logs -f bf08b7f2cd89 查看容器内部的标准输出。-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
$ docker top [container ID或者NAMES] 查看容器内部运行的进程
$ docker inspec 查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
$ docker stop [ID或NAMES] 停止 WEB 应用容器
$ docker start [ID或NAMES] 启动容器
$ docker restart [ID或NAMES] 正在运行的容器,我们可以使用 docker restart 命令来重启
$ docker rm [ID或NAMES] 使用 docker rm 命令来删除不需要的容器
tips:删除容器时,容器必须是停止状态,否则会报如下错误
Docker 镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
下面我们来学习:
- 1、管理和使用本地 Docker 主机镜像
- 2、创建镜像
$ docker images 列出本地主机上的镜像。
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
$ docker run -t -i ubantu:15.10 /bin/bash 使用版本为15.10的ubuntu系统镜像来运行容器
$ docker run -t -i ubuntu:14.04 /bin/bash 使用版本为14.04的ubuntu系统镜像来运行容器
tips:当ubantu:14.04这个镜像不存在的时候,Docker就会自动下载这个镜像
$ docker pull ubuntu:14.04 下载一个新的镜像 pull前应该先登录,登录需要在hup.docker.com 去注册账号
下载完成后,我们可以直接使用这个镜像来运行容器。
$ docker search httpd 查找names=httpd 的镜像
更新镜像,创建镜像
更新前,先用镜像创建一个容器
$ docker run -i -t ubantu:15.10 /bin/bash
在容器内配置后,在容器内使用 apt-get update -------->使用exit 退出容器, 此时这个镜像已经被更改了 ,更新镜像
$ docker commit -m="镜像描述" -a="镜像作者" 镜像ID 镜像names:tag 提交容器副本,创建一个新镜像
$ docker run -t -i runoob/ubantu:v2 /bin/bash 启动刚才创建的镜像
构建镜像 从零开始构建镜像
https://www.cnblogs.com/wenbronk/p/6387830.html详细
创建一个名为Dockerfile的文件
runoob@runoob:~$ cat Dockerfile
FROM centos:6.7 使用哪个镜像源
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd 告诉docker在镜像内执行什么命令
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
$ docker build -t runoob/centos:6.7 .(这里有一个点) 构建一个镜像。 -t :指定要创建的目标镜像名
$ docker tag 860c279d2fec runoob/centos:dev 为镜像添加一个新的标签。
Docker 容器连接
网络端口映射
$ docker run -d -P training/webapp python app.py -P :是容器内部端口随机映射到主机的高端口
$ docker run -d -p 5000:5000 training/webapp python app.py -p : 是容器内部端口绑定到指定的主机端口。
$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py 指定容器绑定的网络地址,比如绑定 127.0.0.1。
这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
$ docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py 绑定 UDP 端口
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
$ docker run -d -P --name runoob training/webapp python app.py --name为创建的容器命名, 当然,不用docker会自动对它进行命名