婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Docker搭建簡單的應用棧與容器Hello World訪問詳解

Docker搭建簡單的應用棧與容器Hello World訪問詳解

熱門標簽:德州外呼系統排名 貴州全自動外呼系統廠家 福州外呼系統中間件 好看的地圖標注圖標下載 威海人工智能電銷機器人系統 地圖標注員怎么去做 上海電銷卡外呼系統廠家 百度地圖標注備注 機器人電銷有什么用

本文實例講述了Docker搭建簡單的應用棧與容器Hello World訪問。分享給大家供大家參考,具體如下:

這里參考《Docker容器和容器云》 2.3.2章節應用棧搭建過程,對原書中出現的問題 -鏡像不斷的更新導致- 做了修改,特此說明。

系統環境

操作系統版本

$ cat /etc/issue
Debian GNU/Linux 8 \n \l

內核版本

$ uname -r
3.16.0-4-amd64

Docker版本

 docker version
Client:
 Version:   1.12.1
 API version: 1.24
 Go version:  go1.6.3
 Git commit:  23cf638
 Built:    Thu Aug 18 05:02:53 2016
 OS/Arch:   linux/amd64

Server:
 Version:   1.12.1
 API version: 1.24
 Go version:  go1.6.3
 Git commit:  23cf638
 Built:    Thu Aug 18 05:02:53 2016
 OS/Arch:   linux/amd64

應用棧搭建

我們將搭建一個包含6個節點的Docker應用棧,其中包括一個代理節點、兩個Web應用節點、一個主數據庫節點及兩個從數據庫節點。應用棧的具體結構如圖所示:

獲取應用棧節點所需的鏡像

根據應用棧結構,需要從Docker Hub獲取HAProxy、Redis和Django的鏡像:

# docker pull ubuntu:14.04
# docker pull haproxy
# docker pull redis
# docker pull django
# docker images
REPOSITORY     TAG         IMAGE ID      CREATED       SIZE
haproxy       latest       65599e2ea3f2    2 weeks ago     139.1 MB
redis        latest       0d1cbfaa41da    2 weeks ago     185 MB
ubuntu       14.04        4a725d3b3b1c    3 weeks ago     188 MB
django       latest       79d802ec2b6c    4 weeks ago     437.4 MB

應用棧容器節點互聯

docker run --link redis:redis --name console ubuntu bash

此處將在Ubuntu鏡像上啟動一個容器,并命名為console,同時將新啟動的console容器連接到名為redis的容器上。docker run 命令的 --link選項用于添加連接到一個容器。這里還使用了 --name選項為容器指定名稱。

關于Docker link用法可參考本站《Docker如何使用link建立容器之間的連接》

應用棧節點啟動

啟動應用棧節點之前先整理應用棧節點的連接過程:

  • 啟動redis-master容器節點;
  • 兩個redis-slave容器節點啟動時連接到redis-master;
  • 兩個APP容器節點啟動時連接到redis-master;
  • HAProxy容器節點啟動時連接到兩個APP節點。

此外,為了能夠從外網訪問應用棧,并通過HAproxy節點訪問應用棧中的APP,在啟動HAProxy節點時使用-p參數將端口暴露給主機。

綜上,容器啟動順序為:

redis-master -》redis slave -》APP -》HAProxy

啟動Redis容器

# docker run -it --name redis-master redis /bin/bash
# docker run -it --name redis-slave1 --link redis-master:master redis /bin/bash
# docker run -it --name redis-slave2 --link redis-master:master redis /bin/bash

啟動Django容器

# docker run -it --name APP1 --link redis-master:db -v ~/Projects/Django/APP1:/usr/src/app django /bin/bash
# docker run -it --name APP2 --link redis-master:db -v ~/Projects/Django/APP2:/usr/src/app django /bin/bash

啟動HAproxy容器

# docker run -it --name HAProxy --link APP1:APP1 --link APP2:APP2 -p 6301:6301 -v ~/Projects/HAProxy:tmp haproxy /bin/bash

說明:啟動每個容器時都需分配一個終端。

容器啟動信息查看:

# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS          NAMES
ab25650701f0    haproxy       "/docker-entrypoint.s"  3 hours ago     Up 3 hours     0.0.0.0:6301->6301/tcp  HAProxy
ace790044e06    django       "/bin/bash"       3 hours ago     Up 3 hours                  APP2
64963af16131    django       "/bin/bash"       3 hours ago     Up 3 hours                  APP1
aa77330aee2a    redis        "docker-entrypoint.sh"  3 hours ago     Up 3 hours     6379/tcp         redis-slave2
1fd72289d4f2    redis        "docker-entrypoint.sh"  3 hours ago     Up 3 hours     6379/tcp         redis-slave1
518b41200dab    redis        "docker-entrypoint.sh"  3 hours ago     Up 3 hours     6379/tcp         redis-master

應用棧容器節點配置

Redis Master主數據庫容器節點配置

我們知道通過volume可以在宿主機和容器之間共享數據,因此可在宿主機上創建和編輯Redis的啟動配置文件。使用docker inpect命令查看volume掛載情況:

# docker inspect -f '{{ .Mounts }}' redis-master
[{5920a23b5e230a449230bbd4807912793bbc3bab0a05ae085ff95423301f0d6c /var/lib/docker/volumes/5920a23b5e230a449230bbd4807912793bbc3bab0a05ae085ff95423301f0d6c/_data /data local true }]

可以看出,redis-master的volume在宿主機上為目錄/var/lib/docker/volumes/5920a23b5e230a449230bbd4807912793bbc3bab0a05ae085ff95423301f0d6c/_data,在容器中為/data。

執行如下命令創建Redis的啟動配置文件redis.conf:

# cd /var/lib/docker/volumes/5920a23b5e230a449230bbd4807912793bbc3bab0a05ae085ff95423301f0d6c/_data
# cp /~/redis.conf .
# vim redis.conf

對于redis主數據庫,修改如下模板文件中的幾個參數:

daemonize yes
pidfile /var/run/redis.pid

redis.conf模板下載:https://github.com/yhsong-linux/docker-redis/blob/master/redis.conf

在宿主機上創建好啟動配置文件后,切換到容器中的/data目錄,將redis.conf拷貝到執行工作目錄,然后啟動redis服務:

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

Redis Slave從數據庫容器節點配置

與Redis Master容器節點類似,在啟動Redis Slave容器節點之后,需要查看vloume信息,并創建啟動配置文件。

對于Redis從數據庫,需要修改如下幾個參數:

daemonize yes
pidfile /var/run/redis.pid
slaveof master 6379

在宿主機上創建好啟動配置文件后,切換到容器中的/data目錄,將redis.conf拷貝到執行工作目錄,然后啟動redis服務:

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

Redis數據庫容器節點測試

在Redis Master和Redis Slave容器節點的配置和服務啟動后,可以通過啟動Redis的客戶端程序來測試數據庫。

首先,在Redis Master容器內,啟動Redis的客戶端程,并存儲一個數據:

# redis-cli
127.0.0.1:6379> set master 518b
OK
127.0.0.1:6379> get master
"518b"

接著,在兩個Redis Slave容器內,分別啟動Redis的客戶端程,查詢之前在Master數據庫中存儲的數據:

# redis-cli
127.0.0.1:6379> get master
"518b"

根據響應可知,Master數據庫中的數據已經同步到Slave數據庫中。至此,應用棧的數據庫部分搭建完成。

APP容器節點(Django)的配置

Django容器啟動后,需要利用Django框架,開發一個簡單的Web程序。為了訪問數據庫,需要在容器中安裝Python的Redis支持包:

# pip install redis

安裝完成后,驗證支持包是否安裝成功:

# python
Python 3.4.5 (default, Aug 22 2016, 20:55:07)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> print(redis.__file__)
/usr/local/lib/python3.4/site-packages/redis/__init__.py

如上面的輸出,則表示現在可以使用Pythob語言調用Redis數據庫了。接下來創建Web程序。以APP1為例,進入宿主機的volume目錄對新建APP進行編輯。

在容器的volume目錄下/usr/src/app下,開始創建APP:

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

在容器中創建APP后,切換到宿主機的volume目錄~/Projects/Django/App1下:

# cd ~/Projects/Django/App1
# ls
dockerweb

可以看到,在容器內創建的APP文件在宿主機的volume目錄下同樣可見。然后修改helloword應用的視圖文件views.py:

# cd dockerweb/redisweb/helloworld
# ls
admin.py __init__.py migrations models.py tests.py views.py
# vim views.py

修改后的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)

注意,連接Redis數據庫時,使用–link參數創建db連接來代替具體的IP地址;同理,對于APP2,使用想要的db連接即可。

接下來,修改redisweb項目的配置文件setiing.py,添加新建的helloworld應用:

# cd ../redisweb
# ls
__init__.py __pycache__ settings.py urls.py wsgi.py

在setting.py文件中的INSTALLED_APPS選項下添加helloworld:

# Application definition
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,它將設置訪問應用的URL模式,并為URL模式調用的視圖函數之間的映射表:

# vim urls.py

在url.py文件中,引入helloworld應用的hello視圖,并為hello視圖添加一個urlpatterns變量。修改后的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),
]

以上修改完成后,再次進入容器,在目錄/usr/src/app/dockerweb/redisweb下生成項目:

# python manage.py makemigrations
No changes detected
# python manage.py migrate
Operations to perform:
 Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
 Rendering model states... DONE
 Applying contenttypes.0001_initial... OK
 Applying auth.0001_initial... OK
 Applying admin.0001_initial... OK
 Applying admin.0002_logentry_remove_auto_add... OK
 Applying contenttypes.0002_remove_content_type_name... OK
 Applying auth.0002_alter_permission_name_max_length... OK
 Applying auth.0003_alter_user_email_max_length... OK
 Applying auth.0004_alter_user_username_opts... OK
 Applying auth.0005_alter_user_last_login_null... OK
 Applying auth.0006_require_contenttypes_0002... OK
 Applying auth.0007_alter_validators_add_error_messages... OK
 Applying auth.0008_alter_user_username_max_length... OK
 Applying sessions.0001_initial... OK

至此,所有APP1容器的配置已經完成,APP2容器的配置也是同樣的過程。配置完成APP1和APP2的容器后,就完成了應用棧的APP部分的全部配置。

在啟動APP容器的Web服務器時,可以指定服務器的端口和IP地址,為了通過HAproxy容器節點接受外網所有的公共IP地址訪問,實現負載均衡,需要指定服務器的IP地址和端口。對于APP1使用8001端口,而APP2使用8002端口,同時,都使用0.0.0.0地址。以APP1為例,啟動服務器的過程如下:

# python manage.py runserver 0.0.0.0:8001
# python manage.py runserver 0.0.0.0:8001
Performing system checks...

System check identified no issues (0 silenced).
September 20, 2016 - 23:16:44
Django version 1.10, using settings 'redisweb.settings'
Starting development server at http://0.0.0.0:8001/
Quit the server with CONTROL-C.

HAproxy容器節點配置

所有對應用棧的訪問均通過HAproxy負載均衡代理容器節點實現負載均衡。
首先,將HAProxy的啟動配置我呢間復制到容器中,在宿主機的volumes目錄~/Projects/HAProxy/下:

# cd ~/Projects/HAProxy/
# vim haproxy.cfg

修改后的haproxy.cfg文件如下:

global
  log 127.0.0.1  local0
  maxconn 4096
  chroot /usr/local/sbin
  daemon
  nbproc 4
  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
  stats auth phil:NRG93012
    server APP1 APP1:8001 check inter 2000 rise 2 fall 5
    server APP2 APP2:8002 check inter 2000 rise 2 fall 5

隨后,進入容器的volume目錄/tmp下,將Haproxy的啟動配置文件復制到HAproxy的工作目錄:

# cd /tmp
# cp haproxy.cfg /usr/local/sbin
# cd /usr/local/sbin
# ls
haproxy haproxy-systemd-wrapper haproxy.cfg

然后,利用配置文件啟動HAProxy代理:

# haproxy -f haproxy.cfg

應用棧訪問測試

在瀏覽器中訪問http://172.17.0.7:6301/helloworld,可以看到APP1或APP2的頁面(本地主機訪問應用棧):

說明:172.17.0.7是HAProxy容器的地址。

本地測試通過后,嘗試在其他主機上通過應用棧入口地址的IP地址和6301端口訪問應用棧APP,即http://192.168.1.104:6301/helloworld,如下圖所示(外網其他主機訪問應用棧):

說明:192.168.1.104是宿主機的IP地址。

希望本文所述對大家docker容器使用有所幫助。

標簽:邵陽 南陽 岳陽 白城 葫蘆島 泉州 南陽 撫州

巨人網絡通訊聲明:本文標題《Docker搭建簡單的應用棧與容器Hello World訪問詳解》,本文關鍵詞  Docker,搭建,簡單,的,應用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Docker搭建簡單的應用棧與容器Hello World訪問詳解》相關的同類信息!
  • 本頁收集關于Docker搭建簡單的應用棧與容器Hello World訪問詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    午夜精品一区二区三区电影天堂| 久久综合九色欧美综合狠狠| 色成人在线视频| 91麻豆精品国产91久久久资源速度 | 色噜噜狠狠一区二区三区果冻| 午夜日韩在线观看| av网站免费线看精品| 精品成人a区在线观看| 伊人色综合久久天天| 高清不卡一二三区| 久久免费精品国产久精品久久久久| 首页欧美精品中文字幕| 色一情一乱一乱一91av| 中文字幕亚洲区| 成人福利视频网站| 国产精品久久久爽爽爽麻豆色哟哟 | 蜜桃视频一区二区三区在线观看| 日本福利一区二区| 国产精品理伦片| 成人污污视频在线观看| 欧美在线观看你懂的| 国产精品热久久久久夜色精品三区 | 久久精品视频一区二区| 国产成a人亚洲| 26uuu亚洲综合色| 狠狠狠色丁香婷婷综合激情 | 国产酒店精品激情| 日韩美女在线视频| 国产成人午夜视频| 亚洲欧美aⅴ...| 欧美午夜电影网| 午夜久久久久久电影| 精品国产乱码久久久久久久| 国产一区在线视频| 日本一区二区三区久久久久久久久不 | 精品国产乱码久久久久久蜜臀| 免费成人av资源网| 国产欧美日韩一区二区三区在线观看 | 久久这里只有精品6| 国产一区二区美女诱惑| 久久精品人人做人人爽人人| 国产成人av在线影院| 国产精品久久久99| 欧美日韩三级在线| 久久国产人妖系列| 国产欧美日韩中文久久| 在线视频国内自拍亚洲视频| 久久精品国产成人一区二区三区| 国产日韩欧美精品电影三级在线| 91网站在线观看视频| 亚洲国产精品99久久久久久久久| 91国内精品野花午夜精品| 日韩中文欧美在线| 国产精品免费观看视频| 欧美日韩免费一区二区三区 | 色欧美88888久久久久久影院| 五月激情综合色| 7777精品伊人久久久大香线蕉完整版 | 亚洲乱码一区二区三区在线观看| 久久综合视频网| 久久久精品国产免大香伊| 久久婷婷成人综合色| 精品久久久久久久一区二区蜜臀| 日韩一区二区在线看| 日韩美女视频一区二区在线观看| 日韩精品一区二区三区在线观看| 精品久久久网站| 欧美激情综合在线| 最新欧美精品一区二区三区| 国产精品超碰97尤物18| 日韩美女精品在线| 亚洲高清视频在线| 日韩精品亚洲一区二区三区免费| 日本大胆欧美人术艺术动态| 老司机精品视频导航| 国产福利精品一区| 国产成人免费xxxxxxxx| 成人av网址在线观看| 91在线免费视频观看| 91精彩视频在线| 日韩一区二区在线观看| 国产人妖乱国产精品人妖| 亚洲色图清纯唯美| 亚洲成人黄色影院| 青青草成人在线观看| 国产精品综合视频| 一本一道综合狠狠老| 欧美日韩国产免费一区二区| 91在线看国产| 日韩视频一区二区三区在线播放| 久久久国产一区二区三区四区小说| 中文字幕精品三区| 日本三级韩国三级欧美三级| 国产精品资源网站| 欧美日韩综合在线| 久久久久久久久蜜桃| 亚洲综合自拍偷拍| 国产精品99久久久久久久vr| 欧美午夜片在线看| 日本一区二区高清| 麻豆成人av在线| 色视频欧美一区二区三区| 久久久久久久久久久久电影 | www精品美女久久久tv| 中文字幕一区二区三区四区 | 色综合婷婷久久| 欧美成人免费网站| 亚洲线精品一区二区三区八戒| 国产一区二区在线视频| 欧美丰满少妇xxxbbb| 亚洲欧美日韩国产另类专区| 国产高清久久久久| 欧美丰满嫩嫩电影| 一区二区三区欧美日| 国产精品一级片| 日韩精品一区二区三区在线播放| 亚洲福利国产精品| 色综合一个色综合| 亚洲品质自拍视频| 99国产精品久久| 国产精品天美传媒| 国产成人免费高清| 国产无一区二区| 狠狠色2019综合网| 久久久精品中文字幕麻豆发布| 久久爱另类一区二区小说| 欧美一区二区网站| 婷婷中文字幕综合| 欧美日韩美少妇| 天堂久久久久va久久久久| 欧美日韩精品系列| 日韩国产在线观看一区| 欧美日韩一区二区三区在线看| 亚洲欧美日韩久久| 欧美亚洲精品一区| 香港成人在线视频| 欧美一区二区播放| 极品美女销魂一区二区三区免费| 欧美成人福利视频| 国产一区二区在线观看免费| 久久婷婷一区二区三区| 成人黄色片在线观看| 亚洲精品国久久99热| 欧美三级电影网站| 免费观看一级欧美片| 欧美大片一区二区| 国产一区二区三区香蕉| 国产精品毛片大码女人| 色综合天天综合狠狠| 亚洲午夜激情网页| 日韩亚洲欧美在线| 国产在线日韩欧美| 中文字幕视频一区二区三区久| 色丁香久综合在线久综合在线观看| 亚洲电影一区二区| 日韩欧美一二三区| jvid福利写真一区二区三区| 亚洲午夜羞羞片| 精品国产三级电影在线观看| av午夜一区麻豆| 免费成人在线影院| 国产精品免费视频观看| 欧美日韩的一区二区| 国产在线乱码一区二区三区| 中文字幕一区二区三区在线播放 | 福利91精品一区二区三区| 亚洲欧洲精品天堂一级| 欧美性色欧美a在线播放| 精品一二三四在线| 一区二区在线观看免费| 欧美一级电影网站| 北条麻妃一区二区三区| 日韩精品亚洲专区| 国产精品久久久久久久久动漫| 欧美精品国产精品| 中文字幕一区二区三区蜜月| 欧美一区日本一区韩国一区| 成人黄色av网站在线| 日本特黄久久久高潮| 亚洲精品福利视频网站| 久久久久免费观看| 欧美日韩高清一区二区不卡| 成人黄色一级视频| 久久91精品国产91久久小草| 亚洲一区二区三区免费视频| 国产喷白浆一区二区三区| 91麻豆精品国产91久久久| 一本一道波多野结衣一区二区| 高清国产一区二区| 国产一区二区不卡在线| 亚欧色一区w666天堂| 一区二区三区四区精品在线视频| 国产日韩欧美亚洲| 久久影院视频免费| 日韩欧美国产综合| 91精品国产综合久久婷婷香蕉| 欧美美女一区二区三区| 欧美亚洲国产bt| 欧美日韩国产区一| 欧美久久久久久久久久|