Docker虚拟化容器技术初探

一 Docker产生背景

  1 云服务的运营模式 

 IaaS(基础设施即服务):经营的是基础设施,比如阿里云服务器(只安装操 作系统)

 PaaS(平台即服务):经营的是平台,比如 MySQL 开发平台(安装在 linux 里面现成的平台)、redis 开发平台。

 SaaS(软件即服务):经营的是软件,比如公司的 OA 系统(部署到远程服务 器中的 OA 软件) 

2  What is Docker

Docker 就是一种虚拟化容器技术。  通过 Docker 这种虚拟化容器技术,可以对物理机的资源进行更加合理有效 的利用,可以将一台物理机器虚拟化出很多个拥有完整操作系统,并且相互独立 的“虚拟计算机”。 

虚拟化(Virtualization) 

   一种资源管理技术,是将计算机 的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来, 打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应 用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组 态所限制。一般所指的虚拟化资源包括计算能力和资料存储

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

  虚拟化技术的分类

  软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟 化、桌面虚拟化、服务虚拟化、虚拟机

  Docker , 就是基于操作系统虚拟化技术的 一种实现 

3  VM vs  Docker

启动速度快  Docker 容器启动操作系统在秒级就可以完成,而 VMware 却是达到分钟级

系统资源消耗低  一台 Linux 服务器可以运行成千上百个 Docker 容器,而 VMware 大概只能同时运行 10 个左右

更轻松的迁移和扩展  由于 Docker 容器比 VMware 占用更少的硬盘空间, 在需要搭建几套软件环境的情况下,对安装好的 Docker 容器进行迁移会更 快捷,更方便。而且 Docker 容器几乎可以在任意的平台上运行,包括虚拟 机、物理机、公有云,私有云,个人电脑等,这种兼容性,可以让用户将一 个应用程序从一个平台直接迁移到另一个平台

二  Docker 核心概念 

docker 包含四个基本概念:

 镜像(Image)

 容器(Container)

 仓库注册中心(Registry)

 仓库(Repository) 

1 镜像 

 Docker 镜像(Image)就是一个只读的模板  Docker 镜像可以用来创建 Docker 容器

 Docker 镜像和 Docker容器的关系 , 类似于 java中 class类与对象之间的关系 。

Docker 提供了一个很简单的机制来创建镜像或者更新已有的镜像,用户甚至可 以直接从其他人那里下载一个已经做好的镜像来直接使用。 

2 容器 

Docker 利用容器(Container)来运行应用  容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都 是相互隔离的、保证安全的平台 

3 Registry&Repository 

Registry 是集中存放镜像文件的场所  Repository 是对于其中的镜像进行分类管理

一个 Registry中会有多个 Repository 
一个 Repository中会有多个不同 tag的 Image 

Registry 分为公有(public)和私有(private)两种形式。 

最大的公有Registry是Docker Hub,存放了数量庞大的镜像供用户下载使用

国内的公开 Registry 包括  网易云、DaoCloud、AliCloud 等,可以供 更稳当快捷的访问

用户可以在本地创建一个私有 Registry

用户创建了自己的镜像之后就可以使用 push 命令将它上传的公有 Registry 或者 私有 Registry 中,这样下次在另一台机器上使用这个镜像的时候,只需要从 Registry 上 pull 下来运行就可以了

三 Docker 安装 

1 官方默认的操作系统是安装到 Ubuntu

安装之前可以先卸载
 yum -y remove docker 

安装 :
 yum install -y docker 

启动 :
 systemctl start docker

#systemctl start docker.service 

列出镜像 

docker images 

Repository :镜像所在仓库名称
 Tag :镜像版本
 Image ID :镜像 ID 

Created :镜像创建时间
 Size :镜像大小

搜索镜像 

docker search 镜像名称 

 NAME:仓库名称 
 DESCRIPTION:镜像描述 
 STARS:用户评价,反应一个镜像的受欢迎程度 
 OFFICIAL:是否官方 AUTOMATED:自动构建,表示该镜像由 Docker Hub 自动构建流程创建

2 拉取镜像 

Docker Hub(https://hub.docker.com/ ) 是 docker 默认的公用 Registry,不过缺点是国内下载会比较慢

从 ustc 拉取

在宿主机器编辑文件(centos7 不支持 vim 命令,但是支持 vi 命令): vi /etc/docker/daemon.json 

加入 

{   "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]

最后,需要重启 docker 服务 

systemctl restart docker 

docker pull centos:7 

3 删除镜像 

删除指定镜像

docker rmi repository:tag

docker rmi imageID 

删除所有镜像 

docker rmi $(docker images -q) 

删除时 ,如果镜像的 image id一致 ,则需要按照一定顺序进行删除 ,因为镜像之间有关联 ( reference )。

4 导入导出镜像(镜像迁移) 

导出镜像: 

docker save repository:tag/imageId > /root/xx.tar.gz 

docker save -o mynginx.tar mynginx 

-o 输出到的文件 

导入镜像: 

docker load < /root/xx.tar.gz 

docker load -i mynginx.tar 

-i 输入的文件  执行后再次查看镜像,可以看到镜像已经恢复 

三  Docker 容器 

1 创建并运行容器 

创建容器命令:docker run 

创建容器常用的参数说明:

 -i:表示运行容器 
 -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。 
 --name :为创建的容器命名。 
 -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。 
 -d:在 run 后面加上-d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会 自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。 
 -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射 

以交互方式运行容器

docker run -i -t --name 容器名称 repository:tag /bin/bash 

docker run -it --name  容器名称  imageID/bin/bash

以守护进程方式运行容器: 

docker run -di --name 容器名称 repository:tag 
docker run -di --name 容器名称  imageID

通过 run创建并进入容器之后 ,如果使用 exit命令 退 出 容 器 ,则 容 器 停 止 。再次进入该容器 , 先使用 start启动容器 , 使用 exec/attach命令 进入容器 

2 启动容器 

docker start 容器名称或者容器 ID 

3 进入容器 

进入正在运行的容器的命令如下: 

docker exec -it  容器名称或者容器 ID /bin/bash 

docker attach 容器名称或容器ID

attach进入容器之后 , 如果使用 exit退出容器 , 则容器停止 

exec 进入容器之后 , 使用 exit退出容器 ,容器依然处于运行状态 。

4 查看容器 

docker ps :查看正在运行的容器

docker ps -a:查看历史运行过的容器

docker ps -l:查看最近运行过的容器

5  停止容器 

docker stop 容器名称或者容器 ID 

6 删除容器 

删除指定容器:  docker rm 容器名称或者容器 ID 

删除所有容器: docker rm ‘docker ps -a -q’ 

7 复制文件 

docker cp 源文件 目标文

docker cp /root/boot.war  my-centos:/usr/local/ 

/root/boot.war是宿主机器的路径

my-centos是容器的名称

/usr/local/ 是容器内的路径
源文件可以是宿主机器也可以是容器中的文件,同样,目标文件可以是容 器也可以是宿主机器的文件


 四 Docker应用

docker pull mysql:5.6 

docker images 

创建mysql容器

docker run -di --name exp_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6 

-p 代表端口映射,格式为  宿主机映射端口:容器运行端口 

-e 代表添加环境变量  MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码 

进入 MySQL 容器,登陆 MySQL 

docker exec -it exp_mysql /bin/bash 

登陆 mysql 

mysql -u root -p 

远程登录mysql

查看容器 IP 地址 

docker inspect exp_mysql 


 五  纯手工制作镜像

需求:制作一个 tomcat 镜像

1 下载基础镜像(centos7)  docker pull centos:7 

2 安装 64 位 jdk(注意:jdk 要和 os 的位数一致) 

vi /etc/profile 

export JAVA_HOME=/opt/jdk export PATH=$JAVA_HOME/bin:$PATH 

source /etc/profile 

3 安装 tomcat 

4 生成新的镜像 

docker commit 容器名称 或者容器 ID 新镜像名称


 


 


 


 
 

发布了3 篇原创文章 · 获赞 4 · 访问量 2058

猜你喜欢

转载自blog.csdn.net/liuguangjian2007/article/details/105466924