Docker部署容器虚拟平台

1. Docker概述

1.1 Docker概述

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

1.2 Docker容器技术和虚拟机对比

下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

在这里插入图片描述
在这里插入图片描述

Docker相对于 VM 虚拟机,少了虚拟机操作系统这一层,所以Docker效率比虚拟机高。

1.3 Docker架构

Docker 包括三个基本概念:

镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
在这里插入图片描述

工作流程:localhost上运行Docker Engine服务,从外网Docker Hub上把image镜像下载下来,将image实例化成container,这样一个容器的实例就运行起来了,在Docker Engine上可以启动很多container。

1.4 Docker特性

首先明确技术要点,Docker技术就是基于容器的虚拟化技术,相对于其它虚拟化技术,它的特点是:
轻量级:单机可以轻松支持上百Container,让各种个位数虚拟化的方案相形见绌。
快速就绪:一秒以内启动,即使是以资源快速就绪著称的青云IAAS也无法相比。
弱安全:Docker能够对多种OS资源进行隔离,但是它本质上依托于内核,因此所有的内核漏洞都是Docker的致命伤。

1.5 Docker版本简单介绍

Docker有两个版本:社区版Community Edition (CE) 和 企业版Enterprise Edition (EE)
Docker Community Edition(CE)主要是适合单个开发人员和小团队使用Docker容器进行应用程序的开发。Docker CE有三种更新通道:稳定的(Stable)、测试中的(Test)和每日夜间更新(Nightly)。
Docker Enterprise Edition(EE)是为企业开发和大的IT团队设计的,并用于生产环境中大规模地构建、交付和运行关键业务应用程序。

Docker支持以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit) 或更高的版本
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
内核编译时需要激活namespace,CGgroup,netfilter,veth等特性,还对iptablest等工具版有依赖要求。

本文后续实验均在Centos7.6 64位上运行。

2. 部署Docker容器

2.1 实验环境准备

操作系统版本:centos 7.6.1810
IP地址:192.168.100.141

2.1.1 安装docker依赖

[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

2.1.2 配置国内 docker 的 yum 源(阿里云)

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.1.3 安装docket-ce

[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io -y
注:docker-ce-cli 作用是 docker 命令行工具包
containerd.io 作用是容器接口相关包

2.1.4 启动docket并加入开启自启动

[root@localhost ~]# systemctl start docker && systemctl enable docker

2.1.5 显示docket版本信息以及当前状态

[root@localhost ~]# docker version
[root@localhost ~]# docker info

2.2 下载docket镜像

2.2.1 根据关键字搜索符合的镜像

[root@localhost ~]# docker search centos
在这里插入图片描述

2.2.2 下载镜像

[root@localhost ~]# docker pull centos

2.2.3 查看镜像

[root@localhost ~]# docker images

2.3 开启网络转发功能

[root@localhost ~]# echo “net.ipv4.ip_forward = 1” > /etc/sysctl.conf
[root@localhost ~]# sysctl -p #立即生效
验证:
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward

2.4 docker平台基本使用方法

docker 常用参数:
run 运行
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
–name 为container取一个别名
–net 为container指定网络模式
-p 将container的80端口发布到主机的80端口
-d 在后台运行容器并打印容器ID

2.4.1 查看本地镜像

[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB

2.4.2 实例化一个容器

[root@localhost ~]# docker run -it -d --name=webhost --net=bridge -p 80:80 300e315adb2f /bin/bash

2.4.3 显示运行中/全部容器

[root@localhost ~]# docker ps
[root@localhost ~]# docker ps -a

2.4.4 启动/关闭容器

[root@localhost ~]# docker start fafeac624957
[root@localhost ~]# docker stop fafeac624957
[root@localhost ~]# docker restart fafeac624957

2.4.5 进入容器方法

[root@localhost ~]# docker exec -it fafeac624957 bash

2.4.6 退出容器

方法一:
[root@06870993a02b /]# exit
方法二:
从容器回到OS,ctrl+p,ctrl+q

2.4.7 查看日志输出

[root@localhost ~]# docker logs fafeac624957

2.4.8 杀死一个运行中的容器

[root@localhost ~]# docker kill fafeac624957

2.4.9 删除container

[root@localhost ~]# docker rm fafeac624957
[root@localhost ~]# docker rm -f fafeac624957 #强制删除

2.4.10 删除镜像

[root@localhost ~]# docker rmi 300e315adb2f

3. docker镜像制作方法

3.1 docker commit

根据容器当前状态做一个 image 镜像
语法: docker commit <container 的 ID> <新的 image_name>
[root@localhost ~]# docker commit fafeac624957 centos2

3.2 docker build

通过docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像,以下为制作简单的httpd web服务器案例。

3.2.1 创建工作目录

[root@localhost ~]# mkdir docker-build

3.2.2 编写dockerfile文件

[root@localhost ~]# cd docker-build/
[root@localhost docker-build]# vi dockerfile
FROM centos:7.6.1810
MAINTAINER 10086@123.com
RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD template /var/www/html/
CMD /usr/local/bin/start.sh

注释:
FROM 基于哪个镜像
MAINTAINER 镜像创建者
RUN 安装软件用
ADD 将文件拷贝到新产生的镜像的文件系统对应的路径。所有拷贝到新镜像中的文件和文件夹权限为 0755,uid 和 gid 为 0
CMD 当 docker 实例启动成功后,会执行 CMD 后面的命令。所以CMD 后面一般跟需要开机启动的服务或脚本。一个 Dockerfile 中只能有一条 CMD 命令,多条则只执行最后一条 CMD。

3.2.3 创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件

[root@localhost docker-build]# echo “/usr/sbin/httpd -DFOREGROUND” > start.sh
[root@localhost docker-build]# chmod a+x start.sh
[root@localhost docker-build]# mkdir template
[root@localhost docker-build]# echo “hello world” > template/index.html

3.2.4 使用命令 build 来创建新的 image

语法:docker build -t <父镜像名:镜像的 tag> <Dockerfile文件所在路径>
[root@localhost docker-build]# docker build -t centos:httpd ./

3.2.5 创建完毕验证

[root@localhost docker-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd d3b8dac81eef 2 minutes ago 340MB
centos 7.6.1810 f1cb7c7d58b7 2 years ago 202MB

3.3 docker image的发布

3.3.1 导出image到tar包

语法:docker save -o <导出的镜像名.tar> <本地镜像名:镜像标签>
[root@localhost docker-build]# docker save -o centos:httpd.tar centos:httpd

3.3.2 利用gzip压缩tar包

语法:docker save <本地镜像名:镜像标签> | gzip > <导出的镜像名.tar.gz>
[root@localhost docker-build]# docker save centos:httpd | gzip > centos:httpd.tar.gz

3.3.3 导出container到tar包

语法:docker export <导出的容器ID> > <导出的镜像名.tar>
[root@localhost docker-build]# docker export c5d16ec4c059 > ./centos:apache.tar

3.3.4 导入tar包到本地镜像

语法一:docker load -i <导入的tar文件>
[root@localhost docker-build]# docker load -i centos:httpd.tar
语法二:cat <导入的tar文件> | docker import - <本地镜像名:镜像标签>
[root@localhost docker-build]# cat centos:apache.tar | docker import - centos:apache

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值