参考

https://www.runoob.com/docker/docker-resources.html
https://docs.docker.com/engine/
https://www.cnblogs.com/jackzz/p/10024043.html

基础概念

docker是一个用于开发、发布和运行应用程序的开发平台,可将应用程序与基础架构分开,从而快速交付软件。
借助docker,可以与管理应用程序相同的方式管理基础架构,可利用docker方法来快速交付、测试和部署代码,可大大减少编码和在生产环境中运行代码的延迟。
docker提供松散隔离环境(容器)中打包和运行应用程序的功能,其隔离性和安全性使得可以在给定主机上同时运行多个容器(容器是轻量级的,直接在主机内核中运行即可)
docker通过内核虚拟化技术提供容器的资源隔离与安全保障等功能。由于docker是通过操作系统层的虚拟化实现隔离,所以docker容器在运行的时候,不需要类似虚拟机额外的操作系统开销,提升资源利用率。
docker提供工具和平台管理容器的生命周期:

  • 使用容器开发应用程序及其支持组件
  • 容器成为分发和测试应用程序的单元
  • 准备就绪后可将应用程序作为容器或协调服务器部署到生产环境中。无论生产环境是本地数据中心、云提供商还是二者混合,工作原理同,都是在其中安装docker后部署多个容器,然后在容器上运行打包的应用程序

docker中的容器完全使用沙箱机制,相互之前不会有任何借口,性能开发很低。
docker从17.03版本之后分为CE(Community Edition社区版)和EE(Enterprise Edition企业版),日常使用CE即可

Docker Hub:用于分享、管理Docker容器的Docker SaaS平台
docker使用C/S架构,c与docker守护进程通信,守护进程处理复杂繁重的任务,例如建立、运行、发布docker容器。docker的c(客户端)和守护进程间通过socket/RESTful API通信。

Docker学习小总结

应用场景

  • Web应用的自动化打包和发布(打包成镜像+镜像获取)
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他后台应用
  • 从头编译或扩展现有的OpenShift或Clout Foundry平台搭建自己的PaaS环境

优点

docker是一个用于开发、交付和运行应用程序的开放平台,可以将应用程序与基础架构分开,从而快速交付软件。
借助docker可以与管理应用程序相同的方式管理基础架构,利用docker快速交付、测试和部署代码,可大大减少编写代码和在生产环境中运行代码之间的延迟。

  • 快速一致交付应用程序
    • 允许使用容器在标准化环境中工作,从而简化开发的生命周期
  • 响应式部署和扩展
    • docker是基于容器的平台,允许高度可移植的工作负载
  • 在同一硬件上运行更多的工作负载
    • docker适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情

docker Vs. VM

Docker学习小总结

类别 docker KVM/OpenStack
部署难度 非常简单 组件多,部署复杂
启动速度 秒级 分钟级
镜像体积 MB级别 GB级别
管理效率 简单 组件相互依赖,管理复杂
隔离性 彻底隔离
管理效率 单进程 完整的系统管理
网络连接 较弱 可借助Neutron灵活组件各类网路架构

基本组件

Docker学习小总结

docker包括三个基本概念:镜像image、容器container、仓库repository

Docker学习小总结
Docker学习小总结

镜像 image

image相当于一个root文件系统,容器运行的只读模板,每个镜像有一系列的层layers组成。
Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

容器 container

image和container的关系类似类和实例(class和new xxx()),镜像是静态的定义,容器是镜像运行的实体。
docker容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的容器可以被创建、启动、停止、删除、暂定等。docker容器是docker的运行部分。

每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。
所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

仓库 repository

仓库课可以看成是一个代码控制中心,用来保存镜像,可以理解为代码控制中的代码仓库。
Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。

安装部署

1.查看系统版本内核 3.0以上最好
uname -r
Docker学习小总结

2.删除旧版本docker
yum remove docker
Docker学习小总结

3.安装需要的安装包
yum install -y yum-utils
Docker学习小总结

4.镜像仓库设置为国内的
yum-config-manager
–add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Docker学习小总结

报错:
Docker学习小总结

查看python
Docker学习小总结

修改/usr/bin/yum-config-manager和/usr/bin/yum文件,修改首行python版本为2.6
Docker学习小总结

重新设置镜像仓库,成功
Docker学习小总结

5.更新yum软件包索引
yum makecache fast
Docker学习小总结

6.安装docker相关的docker -ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
Docker学习小总结

出错的话:
Docker学习小总结

如果下载不下来,手动下载:
拉取rpm包
wget
http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7/Packages/docker-engine-17.03.0.ce-1.el7.centos.x86_64.rpm

安装rpm包
yum install docker-engine-17.03.0.ce-1.el7.centos.x86_64.rpm

验证docker版本确认安装成功
docker --version

6.启动docker
systemctl start docker
Docker学习小总结

7.使用docker version查看是否安装成功
docker version
Docker学习小总结

8.测试一下
docker run hello-world
Docker学习小总结

9.查看一下下载的镜像
docker images
Docker学习小总结

docker使用

注意docker命令都是只能在主机上运行,不能在容器内部运行,即进入容器之后就是一个新的独立环境,使用其各自的命令即可。(例如进入一个centos容器中,使用linux正常命令即可)
Docker学习小总结

docker允许在容器中使用docker run命令运行应用程序

也可以直接运行docker的hello-world镜像,系统会先在宿主机上找镜像是否存在,如果没有的话会先从镜像仓库Docker Hub中拉取hello-world镜像然后构造成容器。

-t:在心容器中制定一个伪终端/终端
-i:允许对容器内的标准输入(STDIN)进行交互

进入容器后可使用cat /proc/version查看当前系统的版本信息

可通过exit退出当前容器

确认当前有容器在运行中,使用docker ps
Docker学习小总结

输出参数介绍:
CONTAINER ID:容器ID
IMAGE:使用的镜像
COMMAND:启动容器时运行的命令
CREATED:容器的创建时间
STATUS:容器状态

  • created: 已创建
  • restarting: 重启中
  • running: 运行中
  • removing: 迁移中
  • paused: 暂停
  • exited: 停止
  • dead: 死亡
    PORTS:容器的端口信息和使用的连接类型(tcp/udp)
    NAMES:自动分配的容器名称
容器使用

宿主机内使用docker logs xxxx容器查看容器内的标准输出
Docker学习小总结

使用docker stop xxx容器 停止容器
exit是在某个容器中输入exit退出容器进入到上一层,docker stop是在宿主机上运行
Docker学习小总结

使用docker start xx容器CONTAINER ID/NAMES启动容器
Docker学习小总结

使用docker查看docker客户端的所有命令选项
Docker学习小总结

使用docker command --help具体查看某条command的使用方法
Docker学习小总结

运行并进入容器:docker run -it -P 容器ID /bin/bash
-P:将容器内部使用的网络端口随机映射到使用的主机上

后台运行容器不直接进入容器:docker run -itd 容器名 /bin/bash 后续进入通过docker exec -it 容器ID /bin/bash

导出容器快照:docker export 容器ID > 文件名
导入容器快照:cat 文件名 | docker import - 镜像名

删除容器:docker rm -f 容器ID

查看容器详情:docker info

镜像使用

当运行容器时,使用的镜像本地不存在就会自动从默认的Docker Hub镜像仓库中下载。镜像仓库可以进行自定义配置
yum-config-manager
–add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看系统镜像:docker images
Docker学习小总结

REPOSITORY: 镜像的仓库源
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,使用REPOSITORY:TAG定义不同镜像
Docker学习小总结

查找镜像:docker search 镜像名
Docker学习小总结

NAME: 镜像仓库源的名称
DESCRIPTION: 镜像描述
OFFICIAL: 是否为docker官方发布
stars:点赞
AUTOMATED:自动构建

拉取镜像:docker pull 镜像名

使用镜像:docker run 镜像名

删除镜像:docker rmi 镜像名

创建镜像:当从docker仓库中拉取的镜像不再满足需求的时候,可以通过两种方式对镜像进行更改:

  1. 从已创建的容器中更新这个镜像并提交
    1.1 使用镜像创建容器
    1.2 在容器中使用apt-get udpate更新或其他更新操作
    1.3 exit退出此容器,使用docker commit -m="提交的描述信息" -a="镜像作者" 容器ID 目标镜像名提交容器副本
    1.4 使用docker images查看新镜像
    Docker学习小总结
    1.5 使用新镜像启动一个容器(注意tag勿忘
    Docker学习小总结

  2. 使用Dockerfile指领创建一个新的镜像
    使用docker build创建新的镜像

创建Dockerfile文件用一组指令构建镜像
Docker学习小总结
Docker学习小总结

容器连接

容器中如果运行网络应用的话,可使用-p参数指定端口映射,使得外部也可访问这些应用
-P:容器内部端口随机映射到主机的高端口
-p:容器内部端口绑定到指定的主机端口
Docker学习小总结

docker port 容器名命令:查看端口的绑定情况
Docker学习小总结

多个容器互连推荐使用docker-compose
参考:
https://www.cnblogs.com/jackzz/p/10024043.html

仓库管理

登录docker hub:docker login
退出:docker logout
推送镜像到自己的仓库中:docker push 镜像名
Docker学习小总结

docker compose

compose:用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
compose使用的三个步骤:

  • 使用Dockerfile定义应用程序的环境
  • 使用docker-compose.yml定义构成应用程序的服务,这样他梦珂在隔离环境中一起运行
  • 执行docker-compose up命令启动并运行整个应用程序

centos on docker

1.拉取指定版本的 CentOS 镜像
docker pull centos:centos7
Docker学习小总结

2.查看本地镜像
docker images
Docker学习小总结

3.运行容器,并且可以通过 exec 命令进入 CentOS 容器
docker run -itd --name centos-test centos:centos7
docker exec -it centos-test /bin/bash
Docker学习小总结

4.通过 docker ps命令查看容器的运行信息

hbase on docker

单机版

参考:
https://blog.csdn.net/boling_cavalry/article/details/78041775

集群版

参考:
https://blog.csdn.net/boling_cavalry/article/details/78041811

docker-compose下载:

  1. wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64

  2. rename docker-compose-Linux-x86_64 docker-compose docker-compose-Linux-x86_64

  3. chmod +x /usr/local/bin/docker-compose

  4. 再通过docker-compose version命令进行查看

如果有权限问题:进行赋权 chmod a+wrx xxx文件

如果zookeeper集群中有节点启动失败显示
ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.6/bin/…/conf/zoo.cfg Error

检查创建数据目录是否正确,zoo.cfg配置文件里dataDir指定的那个目录下(本参考中配置的是zkdata/myid)

mysql on docker

redis on docker

mongodb on docker

相关文章: