【云计算导论实验4】Docker

一、Docker的安装

使用下列命令进行安装:

sudo apt-get install docker.io

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

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

sudo docker info

在这里插入图片描述

安装之后启动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'

在这里插入图片描述
第一次运行需要拉取ubuntu:14.04源,耐心等待即可,如果完成了上述更换docker源的操作的话,拉取速度应该挺快的

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

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

-t 让docker分配一个伪终端并绑定到容器的标准输入上
-i 让容器的标准输入保持打开
在这里插入图片描述

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
在这里插入图片描述

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

sudo docker ps

在这里插入图片描述

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

sudo docker logs <NAMES|CONTAINER ID>

在这里插入图片描述

终止容器

命令:docker stop
在这里插入图片描述
终止状态的容器可以用下面命令查看:

sudo docker ps -a

在这里插入图片描述

三、 搭建一个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

在这里插入图片描述
注意这一项主机名为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

在这里插入图片描述
sudo docker ps查看启动的容器信息如下:
在这里插入图片描述

4.应用栈容器节点配置

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

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

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

在这里插入图片描述
从上述信息中可以看出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

可能会报错,信息如下:
在这里插入图片描述
使用命令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

在这里插入图片描述

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

redis-cli
get morningtune

在这里插入图片描述

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

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

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

pip install redis

在这里插入图片描述
在容器内的/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

在这里插入图片描述
切换到主机进行相应的编辑来配置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

在这里插入图片描述
至此App1的设置全部完成,App2和App3的设置和App1的相似。

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

python manage.py runserver 0.0.0.0:8001

在这里插入图片描述

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

至此,全部配置均完成
在这里插入图片描述

四、实现私有云

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下来即可,在这里不做说明。

  • 11
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
云计算Docker是两个不同但相关的概念。 云计算是一种通过网络提供计算资源的模型,它允许用户根据需要使用计算资源,而无需拥有和管理自己的物理服务器。云计算提供了弹性和可扩展性,用户可以根据需要增加或减少计算资源,以适应业务需求的变化。云计算可以提供各种服务,包括基础设施即服务(Infrastructure as a Service,IaaS)、平台即服务(Platform as a Service,PaaS)和软件即服务(Software as a Service,SaaS)等。 Docker是一种开源的容器化平台,它允许开发人员将应用程序及其依赖项打包到一个称为容器的独立运行环境中。每个容器都可以独立运行,且与宿主机环境隔离。Docker容器可以在任何支持Docker的操作系统上运行,提供了跨平台和可移植性。使用Docker可以更加高效地部署和管理应用程序,提供了快速部署、可扩展性和灵活性等优势。 在云计算环境中,Docker可以用于打包和部署应用程序。通过使用Docker容器,开发人员可以将应用程序与其依赖项一起打包,并在云上的任何支持Docker的环境中运行。这样可以简化应用程序的部署过程,提高应用程序的可移植性和可扩展性。同时,Docker还提供了一套工具和服务,用于管理和编排多个容器,以实现更高级的应用程序部署和管理需求。 总结起来,云计算Docker都是为了提供更高效、灵活和可扩展的应用程序部署和管理解决方案。云计算提供了计算资源的弹性和可扩展性,而Docker提供了容器化技术,简化了应用程序的打包和部署过程。在实际应用中,它们可以结合使用,为开发人员和运维人员带来更好的体验和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒商

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值