初步学习Docker

Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源。

Docker可以让开发者打包他们的应用到一个轻量级的,可移植的容器中,然后发布到任何流行的linux机器上也可实现虚拟化。

使用Docker容器可以快速的构建和部署新应用程序。Docker容器将软件及其依赖关系整合到一个标准化的软件开发单元中,包括运行时

容器是完全使用沙箱机制,项目之间不会有任何接口,更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

应用场景

web应用的自动化打包和发布。

自动化测试和持续集成,发布。

在服务型环境中部署和调整数据库或其他的后台应用。

Docker的优点

简化程序

Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的开发成果放入Docker中进行管理。方便快捷。

避免选择恐惧症

Docker镜像:Docker镜像包含了运行环境和配置,所以Docker可以简化部署多种应用实例工作。比如web应用,后台应用,数据库应用。

节省开支

云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker 架构

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。

Docker容器通过Docker镜像来创建。

容器与镜像的关系类似于面向对象编程中对象与类。

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

输出Hello world

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"

Hello world

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

docker ps 查看所有容器

docker logs +CONTAINER ID:容器ID

实例 docker logs 2b1b7a428627

或docker logs +NAMES:自动分配的容器名称

实例 docker logs amazing_cori

Docker容器使用

Docker客户端

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

新建一个Docker镜像

docker pull training/webapp  # 载入镜像

docker run -d -P training/webapp python app.py

参数说明

-d:让容器在后台运行

-p:将容器内部使用的网络端口映射到我们使用的主机上。

查看网络端口

docker port +CONTAINER ID:容器ID

docker port +NAME 容器name

查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

docker top wizardly_chandrasekhar

检查 WEB 应用程序

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker inspect wizardly_chandrasekhar

停止 WEB 应用容器

docker stop wizardly_chandrasekhar

重启WEB应用容器

已经停止的容器,我们可以使用命令docker start来启动。

docker start wizardly_chandrasekhar

docker ps -l 查询最后一次创建的容器。

移除WEB应用容器

docker rm wizardly_chandrasekhar(容器name或ID)

*删除时,容器必须是停止状态 否则会报ERROR。

Docker镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载

列出镜像列表

我们可以使用Docker image来列出本地主机上的镜像。

各个选项说明:

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签,版本

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时Docker就会自动下载这个镜像,如果我们想预先下载这个镜像,我们可以使用docker pull命令来下载它

搜索镜像

docker search httpd

更新镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

从已经创建的容器中更新镜像,并且提交这个镜像。

使用Dockerfile指令来创建一个新的镜像

cat Dockerfile

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN指令告诉docker在镜像内执行命令,安装了什么。

然后,我们使用DockerFile文件,通过docker build命令来构建一个镜像

docker build -t runoob/centos:6.7 .

参数说明

-t:指定要创建的目标镜像名

.:DockerFile文件所在目录,可以指定DockerFile的绝对路径

设置镜像标签

docker tag 镜像id runnoob/centos:dev

Docker容器连接

网络端口映射

创建一个python应用的容器。

docker run -d -P training/webapp python app.py

-P:是容器内部端口随机映射到主机的高端口。

-p:是容器内部端口绑定到指定的主机端口。

绑定到指定主机端口

docker run -d -p 5000:5000 training/webapp python app.py

指定容器绑定的网络地址,比如绑定 127.0.0.1。

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker port 命令可以让我们快捷地查看端口的绑定情况

docker port adoring_stonebraker 5000

Docker容器连接

端口映射并不是唯一把 docker 连接到另一个容器的方法。

docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。

docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

容器命名

当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 --name 标识来命名容器,例如:

docker run -d -P --name runoob training/webapp python app.py

你可能感兴趣的:(初步学习Docker)