Docker平台搭建方法

news2024/11/24 13:20:22

Docker平台搭建方法

1.1在VMware中创建两个虚拟机,只需要1个网卡,连接192.168.200.0网络。

    虚拟机分配2个CPU,2G内存,60G硬盘,主机名分别为server和client,IP地址分别为192.168.200.137和192.168.200.138。server节点还兼做registry节点,即镜像仓库节点。在2017年的比赛中,server节点和registry节点是分开的。

一.1修改主机名,配置主机名解析文件

[root@localhost ~]# hostnamectl set-hostname server

二.2修改/etc/hosts文件,设置主机名和IP地址的映射关系

    [root@controller ~]# vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.137   server

192.168.100.138   client

二.3配置防火墙

     要关闭防火墙,只需要停止firewalld服务,并设置其开机不启动

      [root@controller ~]#systemctl stop firewalld

[root@controller ~]#systemctl disable firewalld

Removed symlink/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

二.4设置SELINUX

     SELINUX有3种模式:强制模式(enforcing)、许可模式(permissive)和禁用模式(disabled)

     这就需要修改/etc/selinux/config文件,将原来的SELINUX=enforcing修改为SELINUX=permissive

     [root@controller ~]# vi /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=permissive

# SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

1.2配置yum源

    部署PaaS平台的时候,需要用yum安装Docker。在不能访问Internet的情况下,必须配置本地Yum源。

    (1)上传光盘镜像文件

    用SecureFX将PC上的CentOS-7-x86_64-DVD-1511.iso和XianDian-PaaS-v2.1.iso上传到server节点的/opt目录

(2)[root@controller ~]# setenforce 0

[root@controller ~]# sestatus

SELinux status:   enabled

SELinuxfs mount:  /sys/fs/selinux

SELinux root directory:  /etc/selinux

Loaded policy name:  targeted

Current mode:     permissive

Mode from config file:   permissive

Policy MLS status: enabled

Policy deny_unknown status: allowed

Max kernel policy version:  28

       (3)用 ls/opt查看这两个文件

           [root@controller ~]# ls /opt

CentOS-7-x86_64-DVD-1511.iso  XianDian-IaaS-v2.1.iso

    (4)创建挂载点,挂载光盘镜像文件

        # cd /opt

        # mkdir centos paas

        # mount -o loop CentOS-7-x86_64-DVD-1511.iso centos

        # mount -o loop XianDian-PaaS-v2.1.iso paas

    (5)配置server节点的repo文件

    删除/etc/yum.repos.d/目录中原来所有的文件,并新建一个文件local.repo,输入以下内容:

    [centos]

    name=centos

    baseurl=file:///opt/centos

    enabled=1

    gpgcheck=0

    [paas]

    name=paas

    baseurl=file:///opt/paas/docker

    enabled=1

    gpgcheck=0

    修改好之后,用yum  clean  all命令清空yum缓冲区,并用yum  list命令确认本地yum源配置正确。

        # yum clean all

        # yum install vsftpd

(6)安装配置vsftpd

修改/etc/vsftpd/vsftpd.conf文件,增加一行 anon_root=/opt。修改之后,启动vsftpd并设置开机启动。

        # systemctl start vsftpd

        # systemctl enable vsftpd

(7)配置client节点的repo文件

    删除/etc/yum.repos.d/目录中原来所有的文件,并新建一个文件docker.repo,输入以下内容(假设server节点的浮动IP地址是192.168.200.137):

[centos]

name=centos

baseurl=ftp://192.168.200.137/centos

enabled=1

gpgcheck=0

[paas]

name=paas

baseurl=ftp://192.168.200.137/paas/docker

enabled=1

gpgcheck=0

    修改好之后,用yum  clean  all命令清空yum缓冲区,并用yum  list命令确认本地yum源配置正确。

1.3删除防火墙规则

    每个节点都要做,两个节点的操作是一样的

        # iptables -F

        # iptables -X

        # iptables -Z

        # iptables-save

1.4打开内核转发功能

    每个节点都要做,两个节点的操作是一样的。修改/etc/sysctl.conf文件,添加以下内容:

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 0

net.ipv4.conf.all.rp_filter = 0

然后执行以下命令让修改生效

        # sysctl –p

1.5安装docker

    两个节点都要安装,操作是完全一样的。

(1)安装docker-io软件包

        # yum  -y  install  docker-io

(2)修改docker配置文件,所有节点配置/etc/sysconfig/docker文件修改如下配置:

ADD_REGISTRY='--add-registry 192.168.200.137:5000'

INSECURE_REGISTRY='--insecure-registry 192.168.200.137:5000'

这里的IP地址就是registry节点的浮动IP地址,请根据实际情况填写。

(3)启动docker并设置开机启动

       #systemctl  start  docker

       #systemctl  enable  docker

解释:

    以上是部署Docker运行环境。如果不需要建立自己的镜像仓库,第2步还可以省略。可见,部署Docker 运行环境的操作是非常简单的。Docker的优势之一就是简单,只要部署好环境,然后下载所需的镜像并用这个镜像运行一个容器就可以了,服务器本身不需要安装额外的软件。比如说,我们需要一个MySQL数据库服务器,只需要下载MySQL镜像并用这个镜像运行容器,而不是在本机安装MySQL。如果不需要这个服务了,只要把容器停掉,然后把镜像删除。在一台物理服务器(或者云主机)上,可以轻而易举地运行成百上千个容器。在同样的环境下,要想运行这么多虚拟机是不可能的。容器技术是一种轻量级的虚拟化技术,消耗的资源远小于传统的虚拟机。

    上述第2步操作,是为了能够让Docker能够使用本地镜像仓库(registry)。Docker默认从官方的软件仓库下载镜像,但由于各种原因,国内用户下载速度很慢甚至无法下载。在这种情况下,就需要在本地创建私有的镜像仓库。在Docker配置文件中,添加ADD_REGISTRY='--add-registry 192.168.200.137:5000',就是告诉Docker,除了从官方镜像仓库下载之外,还可以从IP地址为192.168.200.137的服务器上下载,服务的端口号是5000。由于私有软件仓库是没有经过官方认证的,Docker会认为它不安全而拒绝下载。在配置文件中添加INSECURE_REGISTRY='--insecure-registry 192.168.200.137:5000',Docker就不会拒绝从这个镜像仓库下载镜像。

1.6创建本地镜像仓库

    这一步,只在server节点操作。

    (1)将当前目录切换到registry_latest.tar所在的目录,导入镜像仓库的镜像

       #cd  /opt/paas/images/rancher1.6.5/

       #docker  load  < registry_latest.tar

    (2)查看registry的本地镜像,记下它的Image Id(假设是c9bd19d022f6)

       #docker  images

    (3)为registry的本地镜像打上标签

       #docker tag c9bd19d022f6 192.168.200.137:5000/registry:latest

    (4)运行registry容器

       # docker run -d -p 5000:5000 --restart=always --name=registry 192.168.200.137:5000/registry:latest

    (5)上传镜像

       #docker push 192.168.200.137:5000/registry:latest

解释:

    要建立镜像仓库,需要一个名为registry的镜像,用这个镜像运行一个容器,就能够对外提供镜像仓库服务了。在有网络的情况下,只要用docker pull registry就能从官方镜像仓库下载registry。在没有网络的情况下,操作就稍微复杂一点。首先需要在本地有一个registry的打包文件registry_latest.tar,用docker load  < registry_latest.tar命令加载。加载之后,为了便于管理,最好给它打一个比较直观的标记。标记的格式,通常是

    软件仓库名:端口号/镜像名:版本号

    例如这个registry镜像,它的标记就是192.168.200.137:5000/registry:latest。

    这样做的目的,就是便于用户一眼看出来,这个镜像是从哪个软件仓库下载的,镜像叫什么名字,版本号是什么。例如看上面这个标记,我们就知道软件仓库位于IP地址为192.168.200.137的服务器。事实上,这个标记是给人看的,而不是给机器看的。

    做标记的命令的格式是:

    docker  tag  镜像的ID  标记

    例如:docker tag c9bd19d022f6 192.168.200.137:5000/registry:latest,其中c9bd19d022f6就是registry镜像的ID,后面接镜像的标记。

    接下来的操作,就是要用registry镜像来运行一个容器,命令格式是:

    docker run [选项] 镜像 [命令] [参数...]

    运行registry容器的命令是:

    # docker run -d -p 5000:5000 --restart=always --name=registry 192.168.200.137:5000/registry:latest

    这条命令包含多个选项:

    -d 表示在后台运行,如果没有这个选项,容器运行之后就会退出;

    -p 5000:5000 用于设置端口映射,冒号前面是主机上的端口号,冒号后面是容器内部的端口号。-p 5000:5000表示将容器内部的5000端口映射到主机(也就是运行容器的这台服务器)上的5000端口。容器内部的端口是不能直接被外部访问的,需要映射到主机的端口上,才能被外部访问。

    --restart=always表示容器退出时会自动重启

    --name=registry 用于设置容器的名字。如果不指定名字,docker会随机给容器设置一个名字。

    最后的192.168.200.137:5000/registry:latest就是我们用来运行容器的镜像。

    有两个概念,我们要注意区别:镜像和容器。镜像本质上就是存放在磁盘上的一个文件,它是静态的。在docker环境下,让它在内存里运行起来了,才叫容器。

1.7 初试Docker

为了便于同学们理解Docker的优势,我们尝试在Client节点上部署一个Nginx容器,用于对外提供WEB服务。

    (1)在registry节点上传nginx镜像。

# cd /opt/paas/docker_images

# docker  load  < nginx_latest.tar

Load之后,用docker  images命令看一下镜像的ID。然后用docker tag命令打上标签,最后再用docker push命令将镜像上传到registry。

# docker images

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE

<none>                          latest              3f8a4339aadd        13 months ago       231.3 MB

192.168.200.137:5000/registry   latest              c9bd19d022f6        19 months ago       33.27 MB

docker.io/registry              latest              c9bd19d022f6        19 months ago       33.27 MB

# docker  tag   3f8a4339aadd  192.168.200.137:5000/nginx:latest

# docker push 192.168.200.137:5000/nginx:latest

(2) 在client节点下载nginx镜像(这一步实际上可以不错,如果本地没有所需镜像,会自动去pull)

# docker pull 192.168.200.137:5000/nginx:latest

Trying to pull repository 192.168.200.137:5000/nginx ...

latest: Pulling from 192.168.200.137:5000/nginx

75a822cd7888: Pull complete

0aefb9dc4a57: Pull complete

046e44ee6057: Pull complete

833f560bc326: Pull complete

Digest: sha256:6553bb0f5057f7414caca83f05add6866d71fb22ba4655a1298a013e1d8befe1

Status: Downloaded newer image for 192.168.200.137:5000/nginx:latest

    (3)在client节点创建网页目录并创建一个测试网页

# mkdir /var/www

# vi /var/www/index.html

        编辑/var/www/index.html文件,创建一个简单的网页,例如:

<html>

<head>

<title>Hello</title>

</head>

<body>

<p>Hello,World!</p>

</body>

</html>

    (4) 在client节点上运行容器,测试

# docker run -itd  -p 80:80 -v /var/www:/usr/share/nginx/html --name=nginx --restart=always 192.168.200.137:5000/nginx:latest

在PC上用浏览器浏览192.168.200.138(也就是client节点的IP地址),即可看到网页内容。

1.8上传镜像

    用上面的“load、tag、push三步曲”,将/opt/paas/images/rancher1.6.5目录中其镜像包上传。如果还需要运行其他容器,则需再上传相应的镜像。若要部署其他应用,所需的镜像包在/opt/paas/images/目录中,可根据需要上传。

解释:

    在部署应用的时候,需要用到一系列的镜像。这些镜像都是以.tar打包文件的形式提供的,我们要用前面的方法,逐个加载,打标记,然后上传到镜像仓库中。

1.9部署Rancher管理平台

(1)运行rancher server容器

       # docker run -d -p 80:8080 --restart=always \

           192.168.200.137:5000/rancher/server:v1.6.5

    (由于这条命令比较长,一行写不下,可以写一部分然后用“\”符号结束一行,敲回车另起一行。这是Linux中的惯例。当然,不分行也是可以的)

(4)访问rancher server的WEB页面

    稍等片刻,在PC上启动浏览器,打开http://192.168.200.137页面。

    如果rancher server已经正确部署,将可以看到上述页面。

解释:

    有了镜像仓库之后,需要部署什么应用就去镜像仓库下载(通常说“拉取”或直接说英文pull)相关的镜像。一些复杂的应用,可能需要下载多个镜像。容器运行起来之后,还需要进行一系列的配置操作,例如设置容器节点之间的互连。在大规模部署的时候,“纯手工”操作的工作量将会非常大。Rancher是一个容器云平台管理工具,利用Rancher,可以实现应用的“一键部署”,能够大幅度提高工作效率。在一个云平台上,只需要一个节点部署Rancher Server就够了,其他节点只要加入到Rancher Server的的基础架构(INFRASTRUCTURE)中,就能被Rancher Server,可以很方便地在这些节点上部署各种应用。

    要部署Rancher,首先要在Server节点下载Rancher Server镜像,也就是在在创建本地镜像仓库时上传的192.168.200.137:5000/rancher/server:v1.6.5。将镜像下载到本地之后,用docker run命令运行:

    #docker run -d -p 80:8080 --restart=always 192.168.200.137:5000/rancher/server:v1.6.5

    在这条命令中,用 -p 80:8080选项将容器内部的8080端口映射到server主机的80端口。

    80端口就是http协议默认的端口。所以在浏览器里输入http://192.168.200.137,就能访问Rancher Server的WEB用户界面。

1.10准备client节点

    在后续的操作中,要将应用部署在client节点上。为此,我们需要进行一些准备:

    在rancher server的WEB页面,点击“INFRASTRUCTURE”->“Hosts”。第一次使用,会要求设置Host Registration URL(中文界面则显示“主机注册URL”)。这里可以采用默认值,点击“Save”。今后再需要添加主机的时候,不会出现这个提示,直接可以点击“Add Host”。

    在下一个界面中,点击步骤5中文本框右边的“复制”按钮,将rancher生成的一条命令复制到剪贴板,然后粘贴到client节点的命令行执行。在client节点执行完命令之后,回到WEB页面,点击“Close”。稍等片刻,刷新页面,即可看到client节点已经被加入到了rancher的基础架构中。

解释:

    client的意思是“客户端”,这个概念是相对于Rancher Server而言的。这些client,实际上是用来部署各种应用的服务器,例如部署网站、部署博客、部署网盘等。要用Rancher来部署应用,就得让这些服务器乖乖地受Rancher Server控制。要做到这一点,就需要先在这些服务器上运行rancher agent,也就是rancher的代理(这实际上跟在电脑里面运行木马差不多的,运行了木马之后,你的电脑就受黑客控制了。这个比喻不是非常贴切,只是为了帮助理解,别太认真)。这就是为什么要在client节点下载rancher-agent镜像的原因。

    而对于云平台的用户来说,这些服务器就不是客户端了,它们就是服务器,用来为云平台用户服务的,例如提供网页浏览、博客、网盘等服务。云平台的用户访问的,就是这些被Rancher视为client的服务器,而不是去访问Rancher Server服务器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2238802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算在教育领域的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算在教育领域的应用 云计算在教育领域的应用 云计算在教育领域的应用 引言 云计算概述 定义与原理 发展历程 云计算的关键技…

紫光展锐携手上赞随身Wi-Fi,让5G触手可及

近年来&#xff0c;随着各类移动应用层出不穷&#xff0c;人们对随时随地上网的需求日益增强&#xff0c;随身 Wi-Fi 设备以其便捷性、灵活性和相对较低的成本&#xff0c;成为用户满足办公、社交、娱乐等多元化需求的重要工具。5G技术的逐步普及为随身Wi-Fi市场注入了新的活力…

Spring资源加载模块,原来XML就这,活该被注解踩在脚下 手写Spring第六篇了

这一篇让我想起来学习 Spring 的时&#xff0c;被 XML 支配的恐惧。明明是写Java&#xff0c;为啥要搞个XML呢&#xff1f;大佬们永远不知道&#xff0c;我认为最难的是 XML 头&#xff0c;但凡 Spring 用 JSON来做配置文件&#xff0c;Java 界都有可能再诞生一个扛把子。 <…

【C++】AVL树的了解和简单实现

目录 AVL树的概念 AVL树介绍 平衡因子 AVL树的插入 平衡因子的更新 【1】平衡因子为0 【2】平衡因子为1/-1 【3】平衡因子为2/-2 选择的处理 旋转的原则 右单旋 具体的三种情况&#xff1a; ​编辑 所有情况的概念图&#xff1a; 对于父亲指针的处理 &…

使用 PageHelper 在 Spring Boot 项目中实现分页查询

目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…

丹摩征文活动 | 丹摩智算:大数据治理的智慧引擎与实践探索

丹摩DAMODEL&#xff5c;让AI开发更简单&#xff01;算力租赁上丹摩&#xff01; 目录 一、引言 二、大数据治理的挑战与重要性 &#xff08;一&#xff09;数据质量问题 &#xff08;二&#xff09;数据安全威胁 &#xff08;三&#xff09;数据管理复杂性 三、丹摩智算…

彻底理解ARXML中的PDU

文章目录 一、DBC报文信号的发送二、ARXML报文信号的发送2.1 什么是PDU2.2 PDU的类型2.3 Container-I-PDU的发送 三、小结 在CANFD支持可变速率和更大的数据长度&#xff08;64字节&#xff09;的情况下&#xff0c;可以使用DBC和ARXML两种数据库格式来进行报文通信&#xff0c…

探索MoviePy:Python视频编辑的瑞士军刀

文章目录 &#x1f3ac; 探索MoviePy&#xff1a;Python视频编辑的瑞士军刀第一部分&#xff1a;背景介绍第二部分&#xff1a;MoviePy是什么&#xff1f;第三部分&#xff1a;如何安装MoviePy&#xff1f;第四部分&#xff1a;MoviePy的基本函数使用方法1. 视频剪辑2. 视频拼接…

前端请求后端php接口跨域 cors问题

只需要后端在网站的入口文件 一般都是 index.php 加上 这几行代码就可以了 具体的参数可以根据需要去修改 header("Access-Control-Allow-Origin: *"); header(Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS); header(Access-Control-Allow-Heade…

C++11的一些特性

1、列表初始化&#xff0c;对内置类型和自定义类型都可以使用列表进行初始化——一切都可以用列表初始化 不要和初始化列表混了 std::initializer_list临时对象作为函数的参数&#xff0c;用来接收{}括起来的的初始化列表 容器中有用initializer_list作为参数的构造函数&…

MySQL多系统安装配置教程(Windows、Ubuntu、Centos)

专题目标 • 掌握在Windows下安装MySQL数据库 • 掌握在CentOS下安装MySQL数据库 • 掌握在Ubuntu下安装MySQL数据库 一、在Windows下安装MySQL数据库 • Windows下推荐使用安装程序进行安装 • 安装程序下载地址&#xff1a;https://dev.mysql.com/downloads/ 通过上面的安装…

关于 npm 更新镜像源问题

npm&#xff08;Node Package Manager&#xff09;&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。&#xff09; 查看当前npm版本 npm -v 10.9.0 执行以下命令报错 npm install --registryhttp…

Netty篇(入门编程)

目录 一、Hello World 1. 目标 2. 服务器端 3. 客户端 4. 流程梳理 &#x1f4a1; 提示 5. 运行结果截图 二、Netty执行流程 1. 流程分析 2. 代码案例 2.1. 引入依赖 2.2. 服务端 服务端 服务端处理器 2.3. 客户端 客户端 客户端处理器 2.4. 代码截图 一、Hel…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点

文本语义分块、RAG 系统的分块难题&#xff1a;小型语言模型如何找到最佳断点&#xff1f; 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过RAG 里文档分块 (Chunking) 的挑战&#xff0c;也介绍了 迟分 (Late Chunking) 的概念&#xff0c;它可以在向量化的时候减…

大数据技术在金融风控中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 引言 大数据技术概述 定义与原理 发…

小程序中引入下载到本地的iconfont字体图标加载不出来问题解决

我这个是uniapp项目,字体图标都是一样的,在vue项目中web端、uniapp运行到h5都没问题,但是运行到小程序加载不出来,报错如下: 不让用本地路径,所以我们要转为base64编码,这里给大家提供一个工具,它可以把本地字体文件转为base64:transfonter 进入官网后,第一步: …

MYSQL隔离性原理——MVCC

表的隐藏字段 表的列包含用户自定义的列和由系统自动创建的隐藏字段。我们介绍3个隐藏字段&#xff0c;不理解也没有关系&#xff0c;理解后面的undo log就懂了&#xff1a; DB_TRX_ID &#xff1a;6 byte&#xff0c;最近修改( 修改/插入 )事务ID&#xff0c;记录创建这条记…

vue3 + element-plus 的 upload + axios + django 文件上传并保存

之前在网上搜了好多教程&#xff0c;一直没有找到合适自己的&#xff0c;要么只有前端部分没有后端&#xff0c;要么就是写的不是很明白。所以还得靠自己摸索出来后&#xff0c;来此记录一下整个过程。 其实就是不要用默认的 action&#xff0c;要手动实现上传方式 http-reque…

【C++课程学习】:二叉搜索树

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 二叉树搜索树的概念&#xff1a; 节点的结构&#xff1a; ⚽️结构&#xff1a; ⚽️ 构造函数&…

Axure是什么软件?全方位解读助力设计入门

在产品设计和开发领域&#xff0c;Axure是一款大名鼎鼎且功能强大的软件&#xff0c;它为专业人士和团队提供了卓越的设计支持&#xff0c;帮助他们将创意转化为实际可操作的产品原型。 一、Axure 的基本介绍 Axure是一款专业的原型设计工具&#xff0c;主要用于创建交互式的…