【云计算导论实验4】Docker
【云计算导论实验4】Docker一、Docker的安装二、 容器操作三、 搭建一个Docker应用栈四、实现私有云一、Docker的安装二、 容器操作三、 搭建一个Docker应用栈四、实现私有云
【云计算导论实验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下来即可,在这里不做说明。
更多推荐
所有评论(0)