【云计算导论实验4】Docker

这篇具有很好参考价值的文章主要介绍了【云计算导论实验4】Docker。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Docker的安装

使用下列命令进行安装:

sudo apt-get install docker.io

可能会很慢,可以考虑更换国内源,click

运行如下命令,检查docker是否安装成功:

sudo docker info

【云计算导论实验4】Docker

安装之后启动docker服务:

sudo service docker start

安装完成之后,建议更换一下docker镜像源
1、修改/etc/docker/daemon.json配置文件

sudo vim /etc/docker/daemon.json

2、修改daemon.json文件的内容

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
systemctl restart docker.service

保存文件之后重启一下docker就完成配置了

sudo systemctl restart docker

二、 容器操作

1.启动容器

1)新建并启动

命令:docker run
例1:输出一个“hello world”后终止容器

sudo docker run ubuntu:14.04 /bin/echo 'hello world'

【云计算导论实验4】Docker
第一次运行需要拉取ubuntu:14.04源,耐心等待即可,如果完成了上述更换docker源的操作的话,拉取速度应该挺快的

例2:启动一个bash终端,允许用户进行交互

sudo docker run -t -i ubuntu:14.04 /bin/bash

-t 让docker分配一个伪终端并绑定到容器的标准输入上
-i 让容器的标准输入保持打开
【云计算导论实验4】Docker

2)启动已终止容器

命令:docker start

守护态运行

-d 参数完成docker容器在后台以守护态形式运行,如下面的例子:

sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

容器启动后会返回一个唯一的id
【云计算导论实验4】Docker

也可以通过下面的命令来查看容器信息

sudo docker ps

【云计算导论实验4】Docker

也可以通过logs命令获取输出信息

sudo docker logs <NAMES|CONTAINER ID>

【云计算导论实验4】Docker

终止容器

命令:docker stop
【云计算导论实验4】Docker
终止状态的容器可以用下面命令查看:

sudo docker ps -a

【云计算导论实验4】Docker

三、 搭建一个Docker应用栈

1.获取镜像

sudo docker pull ubuntu
sudo docker pull django
sudo docker pull haproxy
sudo docker pull redis
sudo docker images

2.应用栈容器节点互连

这部分没啥好说的,就看看书就行了,然后是查看hosts文件

cat /etc/hosts

【云计算导论实验4】Docker
注意这一项主机名为morningtune的连接信息(之前建立hadoop的实验,名字不一定是这个,IP也不一定,看个人设置,下面出现morningtune的地方换成自己的就行

应用栈节点间的连接信息如下:

  • 启动Morningtune-redis容器节点
  • 两个Slave-redis容器节点启动时要连接到Morningtune-redis上
  • 3个App容器节点启动时要连接到Morningtune-redis上
  • HAProxy容器节点启动时要连接到3个App节点上

启动顺序如下:
Morningtune-redis→Slave-redis→App→HAProxy

3.应用栈容器节点启动

以下启动命令,一个窗口执行一个(或者-it改为-itd来后台运行)

应用栈节点启动:

sudo docker run -it --name morningtune-redis redis /bin/bash
sudo docker run -it --name redis-slave1 --link morningtune-redis:morningtune redis /bin/bash
sudo docker run -it --name redis-slave2 --link morningtune-redis:morningtune redis /bin/bash

启动Django容器

sudo docker run -it --name App1 --link morningtune-redis:db -v ~/projects/Django/App1:/usr/src/app django /bin/bash
sudo docker run -it --name App2 --link morningtune-redis:db -v ~/projects/Django/App2:/usr/src/app django /bin/bash
sudo docker run -it --name App3 --link morningtune-redis:db -v ~/projects/Django/App3:/usr/src/app django /bin/bash

启动HAProxy容器

sudo docker run -it --name HAProxy --link App1:App1 --link App2:App2 --link App3:App3 -p 6301:6301 -v ~/projects/HAProxy:/tmp haproxy /bin/bash

【云计算导论实验4】Docker
sudo docker ps查看启动的容器信息如下:
【云计算导论实验4】Docker

4.应用栈容器节点配置

1)Redis Morningtune主数据库容器节点的配置

使用命令查看所挂载volume的情况

sudo docker inspect --format "{{.Mounts}}" morningtune-redis

【云计算导论实验4】Docker
从上述信息中可以看出volume在主机的目录为/var/lib/docker/volumes/fdbd4689bc86d6b2447d30f719f6a7c6a38d73e462b42ad95c9077ab95f3ebf8/_data,在容器中的目录为/data(每个人都不一样)

先切换root用户进行权限赋予,

su root
chmod 777 /var/lib/docker/

如果是第一次使用root用户,先执行下面的命令进行创建用户。

sudo passwd root

接下来来创建主数据库的启动配置文件,命令如下:

cd /var/lib/docker/volumes/fdbd4689bc86d6b2447d30f719                                                                                                                     f6a7c6a38d73e462b42ad95c9077ab95f3ebf8/_data
sudo vim redis.conf

其内容见链接,redis.conf

执行命令,切换到容器中的volume目录:

sudo docker exec -it morningtune-redis /bin/bash

复制启动配置文件到Redis的执行工作目录中,然后启动Redis服务器:

cp redis.conf /usr/local/bin
cd /usr/local/bin
redis-server redis.conf

可能会报错,信息如下:
【云计算导论实验4】Docker
使用命令mkdir /temp/手动创建该目录即可,并重新执行redis-server redis.conf

2)Redis Slave从数据库容器节点的配置

使用命令查看所挂载volume的情况

sudo docker inspect --format "{{.Mounts}}" redis-slave1

类似的创建启动配置文件,内容同上,但要添加一行

slaveof master 6379

完成后,使用下面命令切换到Redis的执行工作目录,然后启动redis服务器

sudo docker exec -it redis-slave1 /bin/bash

同理,完成redis-slave2容器节点的设置

3)Redis数据库容器节点的测试

找到启用morningtune-redis的终端窗口,依次执行下面命令:

redis-cli
set morningtune morningtune-redis
get morningtune

【云计算导论实验4】Docker

随后在另外两个Redis Slave容器中执行如下命令:

redis-cli
get morningtune

【云计算导论实验4】Docker

可以看到已经同步到Slave数据库中了

4)App容器节点(Django)的配置

在App容器节点中安装python语言的Redis支持包

pip install redis

【云计算导论实验4】Docker
在容器内的/usr/src/app/目录下创建App:

cd /usr/src/app
mkdir dockerweb
cd dockerweb
django-admin.py startproject redisweb
ls
cd redisweb
ls
python manage.py startapp helloworld
ls

【云计算导论实验4】Docker
切换到主机进行相应的编辑来配置App:

cd ~/projects/Django/App1
ls

然后修改helloword应用的视图文件views.py:

cd dockerweb/redisweb/helloworld
sudo vim views.py

内容如下:

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
import redis

def hello(requset):
    str=redis.__file__
    str+="<br>"
    r = redis.Redis(host='db', port=6379, db=0)
    info = r.info()
    str+=("Set Hi <br>")
    r.set('Hi', 'HelloWorld-APP1')
    str+=("Get Hi: %s <br>" % r.get('Hi'))
    str+=("Redis Info: <br>")
    str+=("Key: Info Value")
    for key in info:
        str+=("%s: %s<br>" % (key, info[key]))
    return HttpResponse(str)

然后修改redisweb项目的配置文件setting.py:

cd ../redisweb
sudo vim setting.py

其内容如下:

# Application definition
ALLOWED_HOSTS=['*']  
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'helloworld',
]

最后修改redisweb项目的URL模式文件urls.py

sudo vim urls.py

其内容如下:

from django.conf.urls import * 
from django.contrib import admin
admin.autodiscover()
from helloworld.views import hello

urlpatterns = [ 
   url(r'^admin/', include(admin.site.urls)),
   url(r'^helloworld$', hello),
]

完成上述修改后,返回到容器中进行项目生成

cd /usr/src/app/dockerweb/redisweb
python manage.py makemigrations
python manage.py migrate

【云计算导论实验4】Docker
至此App1的设置全部完成,App2和App3的设置和App1的相似。

以App1为例,启动服务器的过程如下:

python manage.py runserver 0.0.0.0:8001

【云计算导论实验4】Docker

5)HAProxy容器节点的配置

首先将主机中的HAProxy的启动配置文件复制到容器中

cd ~/projects/HAProxy/
sudo vim haproxy.cfg

其内容如下:

global
    log 127.0.0.1   local0
    maxconn 4096
    chroot /usr/local/sbin
    daemon
    pidfile /usr/local/sbin/haproxy.pid


defaults
    log     127.0.0.1   local3
    mode    http
    option  dontlognull
    option  redispatch
    retries 2
    maxconn 2000
    balance roundrobin 
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms

listen redis_proxy 
	bind 0.0.0.0:6301
    stats enable
    stats uri /haproxy-stats
        server APP1 APP1:8001 check inter 2000 rise 2 fall 5
        server APP2 APP2:8002 check inter 2000 rise 2 fall 5
        server APP3 APP3:8003 check inter 2000 rise 2 fall 5

随后,在HAProxy容器中执行如下命令,完成启动配置文件的复制:

cd /tmp
cp haproxy.cfg /usr/local/sbin
cd /usr/local/sbin
ls

执行到cp会报错“Permission Denied”,先执行exit 退出当前容器,执行以下语句,以root身份进入容器:

sudo docker start HAProxy
sudo docker exec -it -u root HAProxy /bin/bash 

然后以root身份重新执行复制的指令即可

完成复制后,利用配置文件启用haproxy代理:

haproxy -f haproxy.cfg

如果修改了配置文件的内容,则需要先结束所有的HAProxy进程,并重新启动代理:

apt-get install psmisc
killall haproxy

至此,全部配置均完成
【云计算导论实验4】Docker

四、实现私有云

1.启动Docker

service docker start 

2.实现SSHD,在Base镜像的基础上生成一个新镜像

docker run -t -i ubuntu:14.04 /bin/bash

安装supervisor服务

apt-get supervisor
cp supervisord.conf conf.d/
cd conf.d/  
vi supervisord.conf    

内容如下:

; supervisor config file  
  
[unix_http_server]  
file=/var/run/supervisor.sock   ; (the path to the socket file)  
chmod=0700                       ; sockef file mode (default 0700)  
  
[supervisord]  
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)  
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)  
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)  
nodaemon=true                         ;(修改该软件的启动模式为非daemon,否则docker 在执行的时候会直接退出)  
[include]  
files = /etc/supervisor/conf.d/*.conf  
  
[program:sshd]  
command = /usr/sbin/sshd -D        ;
mkdir /var/run/sshd 
passwd root
vi /etc/ssh/sshd_config
exit

退出之后自动生成一个容器,接下来把容器commit生成封装了sshd的镜像

docker commit f3c8  ubuntu:sshd
docker images

3.开始分配容器

docker run -p 301:22 -d --name test ubuntu /usr/bin/supervisord

docker run -p 302:22 -d --name dev ubuntu /usr/bin/supervisord

docker run -p 303:22 -d --name client1 ubuntu /usr/bin/supervisord
.......
docker run -p xxxxx:22 -d --name clientN ubuntu /usr/bin/supervisord

4.搭建自己的私有仓库

服务的封装才是Docker的杀手锏,怎么可能让这种工作重复数十次?我们可以搭建自己的私有仓库。有点类似github的方式,将封装好的镜像push到仓库,其他主机装好docker后,pull下来即可,在这里不做说明。文章来源地址https://www.toymoban.com/news/detail-503386.html

到了这里,关于【云计算导论实验4】Docker的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机系统安全 实验二 PGP加密软件的安装和使用

    目录 实验目的 实验内容及步骤 一、PGP的安装及汉化 二、创建用户及密钥 三、使用PGPkeys加密文件内容 四、邮件内容加解密 五、使用PGP对文件进行粉碎 实验感想 1.了解加密工具PGP 的原理 2.熟悉PGP 简单配置方法 选择默认语言English   选择安装协议 I accept the license agreement  

    2024年02月07日
    浏览(45)
  • 人工智能导论——A*算法实验

    一、实验目的: 熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。 二、实验原理: A*算法是一种启发式图搜索算法,其特点在于对估价函数的定义上。对于一般的启发式图搜索,总是选择估价函数 f 值最小的节点

    2024年02月06日
    浏览(52)
  • 大数据导论实验一:搭建Hadoop集群

    一、实验要求 (10%) 搭建Hadoop集群,要求至少是3个节点的真分布式集群系统,包含1个NameNode,两个DataNode。 集群的安装配置大致为如下流程: 1)准备3台客户机(关闭防火墙、静态IP、主机名称) 2)安装JDK 3)配置环境变量 4)安装Hadoop 5)配置环境变量 6)配置集群 7)单点

    2024年02月02日
    浏览(45)
  • 人工智能导论——遗传算法求解TSP问题实验

    一、实验目的: 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传算法求解组合优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。 二、实验原理: 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅行商人要拜

    2023年04月13日
    浏览(43)
  • 多媒体系统导论 实验二 基于Premiere的视频处理

    掌握Premiere的基本界面操作; 掌握视频的剪切和切换效果设置; 熟悉视频合成及效果编辑; 熟悉字幕和片头的设置。 介绍你的视频资料来源, 介绍你的视频编辑整体思路 介绍Premiere调整视频播放速度的步骤 利用Premiere创作1-2分钟的影片,包括标题、创作人员、配乐,要求:

    2023年04月26日
    浏览(22)
  • SOLIDWORKS软件安装:SQL server安装失败--解决办法;无法获得下列许可 SOLIDWORKS Standard

    可执行文件 “F:PreReqsSQLServeren_sql_server_2019_express_x64_e2d9f596.exe” /ConfigurationFile=“C:ProgramDataSOLIDWORKS ElectricalSWSQLSetup.ini” /IACCEPTSQLSERVERLICENSETERMS /Q /SAPWD=SQLpwd4ew /AGTSVCPASSWORD=SQLpwd4ew 未成功安装。 未成功: Microsoft SQL Server (安装)在线解决方案 关闭软件, 重启电脑 ,再试一次

    2024年02月04日
    浏览(61)
  • 人工智能导论第一次实验——机器人搬箱子,斑马问题

    实 验 报 告 理解谓词逻辑知识表示的方法,掌握一阶谓词逻辑知识表示的基本原理,能够利用归结原理求解简单问题。掌握Prolog编程环境,熟悉逻辑推理编写过程。 主要知识点:谓词、原子公式、谓词公式、子句、子句集、空子句、归结原理。 重点:谓词公式、子句集和归

    2024年02月08日
    浏览(108)
  • 【李老师云计算】实验三:在Docker中部署Hadoop集群

    同样是参考了学长的几篇博客,涛哥功德无量!在整合了各种信息之后,鄙人会尽量用更精炼、简单的说明来完成这个实验,当然不足一定是会有的,希望各位朋友可以斧正,同样也希望后来的朋友可以再次为这篇博客进行升级迭代! 博客是面向实验的,因此对完成实验无关

    2024年02月05日
    浏览(42)
  • WEB前端人机交互导论实验-实训2格式化文本、段落与列表

    A.题目要求: B.思路: (1)首先,HTML文档的基本结构是通过html.../html标签包围的,包含了头部信息和页面主体内容。 (2)在头部信息中,使用meta charset=\\\"utf-8\\\"指定文档的字符编码为UTF-8,以确保正确显示中文字符。 (3)在style标签内定义了一些CSS样式类,以用于后续的文本格

    2024年02月02日
    浏览(39)
  • 计算机导论05-计算机网络

    计算机网络的概念 计算机网络是“以相互共享资源的方式互联起来的自治计算机系统的集合”。 (1)组建计算机网络的 主要目的是实现资源共享 (2)互联的计算机系统是自治的系统 (3)联网计算机之间的通信 必须遵循共同的网络协议 计算机网络的功能 数据交换和通信

    2024年01月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包