久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

怎么在Docker中完整部署Web應(yīng)用

這篇文章主要介紹“怎么在Docker中完整部署Web應(yīng)用”,在日常操作中,相信很多人在怎么在Docker中完整部署Web應(yīng)用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么在Docker中完整部署Web應(yīng)用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)中國電信云錦天府報價,主機托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。

一個完整的 Web 應(yīng)用包含前端頁面、數(shù)據(jù)庫、后臺邏輯等,按照一般流程去構(gòu)建需要配置 Nginx、MySQL,以及后臺服務(wù)器,運維涉及到的部分十分復(fù)雜。而 Docker 可以將這些東西(數(shù)據(jù)+服務(wù))封裝起來,雖然有些場合不建議數(shù)據(jù)和服務(wù)放在一起。本文就在一個 Docker 容器中完整部署整個 Web 應(yīng)用的需求作詳細的介紹。

本文舉例的 Web 應(yīng)用為 「top-topic-Zhihu」(換個 timeline 看知乎),整個項目可以在 Github 中找到。

Dockerfile 和依賴文件托管在 docker-toptopic,云服務(wù)商選擇「靈雀云」提供容器服務(wù)。

在「靈雀云」服務(wù)提供的域名 http://toptopic-huangtuzhi.myalauda.cn:19991/ 可以看到本網(wǎng)站。

文件目錄

整個 Web 應(yīng)用的目錄結(jié)構(gòu)如下所示:

├── docker-toptopic
│   ├── Dockerfile      
│   ├── init.sh        # 啟動 Nginx MySQL 和后臺 Server 的初始化腳本
│   ├── mysql          # MySQL 配置文件
│   │   └── my.cnf    
│   ├── nginx          # Nginx 配置文件
│   │   ├── global.conf
│   │   └── nginx.conf
│   ├── question.txt   # 需要導(dǎo)入到 DB 的數(shù)據(jù)
│   ├── README.md
│   └── web
│       ├── dataAccess.py # 后臺 Server 的 AO 服務(wù)
│       ├── dataCGI.py    # 后臺 Server
│       └── www           # 網(wǎng)站
│           ├── assets
│           │   ├── tuzhii.ico
│           │   └── tuzhii.jpg
│           ├── css
│           │   ├── button.css
│           │   └── toptopic.css
│           ├── index.html
│           └── js
│               └── template.js

Dockerfile

Dockerfile 描述了容器的依賴和進行構(gòu)建的步驟,下面會逐步解釋語句的含義。

FROM ubuntu
MAINTAINER titushuang "ituzhi@163.com"
ENV REFRESHED_AT 2015-10-12

RUN apt-get update \
    && apt-get install -y mysql-server-5.6 python  python-dev python-pip libmysqlclient-dev nginx

RUN pip install MySQL-python flask 
RUN pip install -U flask-cors

RUN mkdir -p /home/toptopic /home/toptopic/web

COPY init.sh /home/toptopic/init.sh
COPY web /home/toptopic/web
COPY question.txt /home/toptopic/question.txt

COPY nginx/global.conf /etc/nginx/conf.d/
COPY nginx/nginx.conf /etc/nginx/nginx.conf
COPY mysql/my.cnf /etc/mysql/my.cnf

RUN ln -s /home/toptopic/web/www /usr/share/nginx/html

RUN chmod +x /home/toptopic/init.sh 
RUN chmod -R 755 /home/toptopic/web

RUN ./etc/init.d/mysql start &&\  
    mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'dbpasswd';"&&\  
    mysql -e "grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'dbpasswd';"&&\  
    mysql -e "CREATE DATABASE top_topic_zhihu; use top_topic_zhihu;"&&\ 
    mysql -e "CREATE TABLE top_topic_zhihu.question(question_id varchar(30) NOT NULL, \
    title varchar(200), ask_time datetime,followers int)"&&\ 
    mysql -e "load data infile '/home/toptopic/question.txt' into \
    table top_topic_zhihu.question fields terminated by ';;'"&&\ 
    mysql -e "grant all privileges on *.* to 'root'@'localhost'\
     identified by 'dbpasswd';"

EXPOSE 2223 5000

CMD ["/home/toptopic/init.sh"]

MySQL 安裝和配置

MySQL 服務(wù)器只需要用包管理器安裝 mysql-server-5.6,因為后臺使用 Python 作為服務(wù)器語言,還需要安裝 MySQL 對 Python 語言的支持。需要使用 apt 安裝 python ,libmysqlclient-dev 和 python-dev,然后使用 pip 管理器安裝 MySQL-python。

MySQL 的默認字符集為 latin1,而網(wǎng)頁顯示一般是 utf8 字符集,需要將 MySQL 的配置文件的字符集置為 utf8。

使用命令

COPY mysql/my.cnf /etc/mysql/my.cnf

將本地已修改好的配置文件覆蓋 Docker 中的 MySQL 配置文件。查看字符集

mysql> SHOW VARIABLES LIKE 'character_set_%'; 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

若字符集如上所示,則說明已經(jīng)修改成功。

MySQL的坑

在上面的 Dockerfile 中看到分別給 'root'@'127.0.0.1' 和 'root'@'localhost' 都加了權(quán)限, 'root'@'localhost' 的權(quán)限在 SQL 語句最后才加上。這是因為

  • 使用 'root'@'localhost' 沒權(quán)限建數(shù)據(jù)庫和表,報錯

Access denied for user 'root'@'localhost' (using password: No)

  • 使用 'root'@'127.0.0.1' 進入 Docker 后沒權(quán)限連接 Mysql,報錯

Access denied for user 'root'@'localhost' (using password: YES)

于是這里用 'root'@'127.0.0.1' 來建數(shù)據(jù)庫和表,最后再用 'root'@'localhost' 來連接數(shù)據(jù)庫。

Nginx 安裝和配置

Nginx 在這里作為靜態(tài)頁面的服務(wù)器,安裝只需要用 apt 管理器安裝即可。

Nginx 需要配置 root 目錄來指定網(wǎng)站的文件位置,把本地的 global.conf 和 nginx.conf 文件覆蓋到 Docker 中。

COPY nginx/global.conf /etc/nginx/conf.d/
COPY nginx/nginx.conf /etc/nginx/nginx.conf

在 global.conf 中我們指明服務(wù)器根目錄為 /usr/share/nginx/html/www

server {
        listen          0.0.0.0:2223;
        server_name     _;

        root            /usr/share/nginx/html/www;
        index           index.html index.htm;
        }

在 Docker 中,我們將網(wǎng)站文件放到新建的 /home/toptopic/web/www目錄。這里建立一個軟鏈接將它們關(guān)聯(lián)起來,便于修改和維護。

RUN ln -s /home/toptopic/web/www /usr/share/nginx/html

EXPOSE 兩個端口

EXPOSE 在 Docker 中用來限制開放的端口。我們使用 Nginx 來提供靜態(tài)頁面訪問,使用 Flask 框架來提供動態(tài)頁面數(shù)據(jù)的獲取,所以需要開放兩個端口。

EXPOSE 2223 5000

查詢端口狀態(tài),可以看到宿主機 2333 端口被映射到 Docker 的 2333 端口,宿主機 5000 端口被映射到 Docker 的 5000 端口。

hy@HP /tmp $ sudo docker ps
[sudo] password for huangyi: 
CONTAINER ID      IMAGE                COMMAND         
CREATED           STATUS               PORTS         NAMES
2d1d03d08a95        titus/mysql:latest   /bin/bash   
9 seconds ago      Up 9 seconds   0.0.0.0:2223->2223/tcp,0.0.0.0:5000->5000/tcp   clever_hoover

2223 端口與上節(jié)中的 Nginx 中設(shè)定的端口必須保持一致,因為 Nginx 使用 2223 端口提供服務(wù),Docker 剛好必須把這個端口開放出去。

在基于 Flask 框架寫的后臺服務(wù) dataCGI.py 中,服務(wù)器對應(yīng)的監(jiān)聽地址為

app.run(host='0.0.0.0', port=5000, debug=True, threaded=True)

host 必須設(shè)置為 0.0.0.0,表示監(jiān)聽所有的 IP 地址。如果 host 使用 127.0.0.1,在容器外將無法訪問服務(wù)。同時,這里的端口 5000 和 Dockerfile 中開放的另一個端口一致。

啟動腳本

在 Dockerfile 中的 CMD 中可以指定 Docker 運行時執(zhí)行一些命令。

/etc/init.d/mysql start
/etc/init.d/nginx start &
/home/toptopic/web/dataCGI.py

這三行分別啟動 MySQL,Nginx 和后臺服務(wù)。

構(gòu)建命令

構(gòu)建 Docker 容器

sudo docker build -t="titus/toptopic" .

運行容器

sudo docker run -t -i -p 2223:2223 -p 5000:5000 titus/toptopic

需要注意的是若使用

sudo docker run -t -i -p 2223:2223 -p 5000:5000 titus/toptopic /bin/bash

無法啟動 CMD 中的腳本命令,這是因為在 docker run 后指定了 /bin/bash 后會覆蓋 CMD 中的命令。

在云平臺上部署

在「靈雀云」上部署一個 Docker 應(yīng)用需要兩步:構(gòu)建——創(chuàng)建服務(wù)。

怎么在Docker中完整部署Web應(yīng)用

點擊「構(gòu)建」——「創(chuàng)建鏡像構(gòu)建倉庫」,然后選擇 Github 倉庫源。需要把預(yù)先寫好的 Dockerfile 放在 Github中。

怎么在Docker中完整部署Web應(yīng)用

構(gòu)建好倉庫之后,點擊「創(chuàng)建服務(wù)」。

怎么在Docker中完整部署Web應(yīng)用

進行服務(wù)的設(shè)置,高級設(shè)置中服務(wù)地址類型選為 tcp-endpoint 即可(外部用戶可以直接通過 TCP 方式訪問這個服務(wù)地址,服務(wù)地址的端口是隨機分配的,一般會大于 10000 小于 65535)

最后點擊最下方的「創(chuàng)建服務(wù)」完成部署。新建的服務(wù)如下所示:

怎么在Docker中完整部署Web應(yīng)用

在瀏覽器中輸入http://toptopic-huangtuzhi.myalauda.cn:19991/ 即可訪問網(wǎng)站。

到此,關(guān)于“怎么在Docker中完整部署Web應(yīng)用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

文章題目:怎么在Docker中完整部署Web應(yīng)用
標題網(wǎng)址:http://sd-ha.com/article42/popsec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈動態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)軟件開發(fā)、做網(wǎng)站網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)