什么是Docker?Docker的快速入门教程

Docker 从2013年发布至今, 许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?

虚拟化技术

在说 Docker 之前先说一下虚拟化技术, 因为 Docker 的容器化技术是虚拟化的一种体现形式因此我们要学习容器化技术之前需要先了解一下什么是虚拟化技术

所谓的虚拟化其实就是一种资源管理技术,是将计算机的各种实体资源进行虚拟化

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等

目的就是:提高我们计算机的使用率

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用

虚拟化常用架构的有:全虚拟化架构、OS层虚拟化架构、硬件层虚拟化

Docker

Docker是什么?

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

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

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样

Docker的用途

通过该技术可以快速搭建环境,比如本地测试他人的软件、持续集成的时候提供单元测试和构建的环境,也可以提供弹性的云服务以及组建微服务架构

Docker 的安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到,下面的介绍都针对社区版

Docker CE 的具体安装请参考官方文档:Docker文档

正好使用云加社区给的优惠券,买了1H3M的服务器,我演示使用便利脚本进行安装,命令如下:

sudo wget -qO- https://get.docker.com/ | sh

不建议在生产环境中使用这个脚本

安装docker

安装完成后,运行下面的命令,验证是否安装成功

$ docker -v
# 或者
$ docker version
# 或者
$ docker info

看到版本号就表示安装成功咯

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组(官方文档

$ sudo usermod -aG docker $USER #你的用户名

image 文件

image文件其实就是镜像文件,不然每次image的以为是图片?

Docker 把应用程序及其依赖,打包在 image 文件里面只有通过这个文件,才能生成 Docker 容器

image 文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例,同一个 image 文件,可以生成多个同时运行的容器实例

image 是二进制文件,实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成,举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image

Docker的使用

Docker 的使用其实很简单,就是获取镜像(docker pull),通过镜像创建带环境的系统(docker run

常用命令:

docker  pull    获取镜像(image)
docker  images  列出镜像(image)
docker  rmi     删除镜像(image)
docker  container ls 列出本机正在运行的容器
docker container kill containerID/NAMES 停止运行的容器
docker  stop    containerID/NAMES 停止运行的容器
docker  run     运行container (container在docker中可以理解为装好环境的系统)
   --name                   自定义容器名称
   -d                       容器后台运行
   -p 当前系统端口:容器端口   端口映射(容器内部端口映射外部)
   -v 当前系统目录:容器目录   目录映射
docker  ps      列出本机正在运行的容器
开启和容器交互终端(进入容器)
docker  exec  -i -t  通过docker ps查看的name名  /bin/bash
docker container rm containerID/NAMES 删除容器文件

Docker实例

下面,我们通过安装一个 Apache 来感受一下 Docker

镜像市场中搜索找到Apache,使用以下命令进行安装

$ docker pull httpd:2.4.33

然后获取镜像并查看

获取安装apache

通过镜像(image)创建带有环境的系统(container

#使用镜像httpd:2.4.33以后台模式启动一个容器,并将容器的80端口映射到当前系统的8080端口
$ docker run -p 8080:80 -d httpd:2.4.33

然后我们通过IP+端口号进行访问,就可以看到 Apache 的 It works!

安装Apache成功

我们在通过命令进入 Docker 容器中更改It works!

$ docker exec -i -t NAMES /bin/bash

创建一个html文件,写个Hello,World

hello,world

重启一下服务器,重启后发现容器自动销毁造成数据丢失

所以我们要解决这个问题,就要在创建容器时将项目代码映射到当前系统的指定目录

$ sudo mkdir -p /www
$ sudo vi /www/index.html
$ docker run -p 8080:80 -v /www:/usr/local/apache2/htdocs -d httpd:2.4.33

就这样,简单的 Docker 入门就完成了
创建容器时将项目代码映射到当前系统的指定目录
有时间的话再写一篇文章说明一下如何打包自己的Docker容器

2 条评论

发表评论

*