Docker基础命令学习及redis集群搭建


一、Docker 入门

Docker是什么?

Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。

为什么要使用 Docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

持续交付和部署

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。


更轻松的迁移

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。


更轻松的维护和扩展

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

对比传统虚拟机总结


Docker 的主要用途,目前有三大类。

1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

 

Centos 安装docker

 

  1、更新update到最新的版本

yum  update

2、卸载老版本docker

yum  remove docker  docker-common docker-selinux docker-engine

3、安装需要的软件包

 yum install -y yum-utils  device-mapper-persistent-data lvm2

4、设置yum

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5、查看docker版本

 yum list docker-ce --showduplicates|sort -r 

6、安装docker

yum install docker-ce-18.03.1.ce -y

7、启动docker

systemctl start docker

8、加入开机自启

systemctl enable docker

9、配置国内镜像

vi /etc/docker/daemon.json
    

{

    "registry-mirrors": ["http://hub-mirror.c.163.com"]

}

1.2 docker基本概念

Docker 包括三个基本概念

镜像(Image

容器(Container

仓库(Repository


Docker 镜像就是一个只读的模板。

例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。


镜像可以用来创建 Docker 容器。

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

Docker 容器

Docker 利用容器来运行应用。

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

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

Docker 仓库

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。

2.4 快速入门

利用docker快速安装一个redis镜像,了解dockerFile指令


Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。


二、Redis主从集群规划

   2.0 集群节点规划

容器名称

容器IP地址

映射端口号

宿主机IP地址

服务运行模式

node1

172.17.0.2

6380 -> 6379

172.16.188.78

Master

node2

172.17.0.3

6381 -> 6379

172.16.188.78

Slave

3.1、容器网络

Docker安装后,默认会创建下面三种网络类型


在启动容器时使用  --network bridge 指定网络类型


bridge:桥接网络


默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了


none:无指定网络

使用 --network=none ,docker 容器就不会分配局域网的IP


host: 主机网络

使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。

例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中


2.2 指定自定义网络



因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段:172.10.0.0/16 并命名为mynetwork,指令


如下:

docker network create  --subnet=172.10.0.0/16  mynetwork

    

2.3创建dockerfile

 具体看发放给大家的文件

2.4 dockerfile目录 执行下面代码,注意后面上下文点号

docker build -t redis  .


创建完成后可以docker image查看生成的镜像

2.5接下来使用此docker镜像 创建容器

代码如下:

docker run -itd --name  redis-master  --net mynetwork  -p 6380:6379  --ip 172.10.0.2  redis

参数说明:

   具体可以参看一些文档

http://www.runoob.com/docker/docker-run-command.html

http://www.dockerinfo.net/docker%E5%AE%B9%E5%99%A8-2


-d: 后台运行容器,并返回容器ID

-i: 以交互模式运行容器,通常与 -t 同时使用;

-p: 端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--ip: 为容器制定一个固定的ip

--net: 指定网络模式


这样,我们创建了2个容器,来一起查看下结果

docker ps -a

docker container


2.6配置主从集群

通过docker命令分别进入到redis容器当中,主从复制查看另外一个文档

 

docker run -itd  --name  redis-master  --net mynetwork  -p 6380:6379  --ip 172.10.0.2  redis


docker run -itd  --name  redis-slave  --net mynetwork  -p 6380:6379  --ip 172.10.0.2  redis








   2.7 dockerfile指令的认识

    之前的容器是直接构建的,但是我们发现一个小问题,如果每次使用vi编辑器编辑命令比较麻烦,能不能让容器跟主机共享内存呢,我们可以通过相应的指令继续完善镜像。同时也认识更多的指令,可以参考之前的pdf,完善之前的dockerfile文件



关于容器挂载

 在使用Docker的过程中,常常需要通过Volume来挂载共享目录。可以通过以下两种方式创建Volume


Dockerfile中指定 VOLUME /data

第一种方式,会在dockr容器软件目录当中生成目录


第二种方式可以指定宿主机跟容器的目录

生成容器时执行docker run  -v  /usr/docker/config:/config 命令来指定

   


 




本博客所有文章如无特别注明均为原创。作者:长颈鹿复制或转载请以超链接形式注明转自 SZY
原文地址《Docker基础命令学习及redis集群搭建

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)