国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

服務(wù)器從零開始(2D)-Docker+Tomcat+Nginx+MySQL

ghnor / 2848人閱讀

摘要:此時查詢數(shù)據(jù)庫的用戶信息為其他掛載的原理內(nèi)的文件系統(tǒng)工作情況。此只讀層及在頂部的讀寫層的組合被稱為聯(lián)合文件系統(tǒng)。

簡介

對于企業(yè)應(yīng)用架構(gòu)來說,肯定不局限于一臺服務(wù)器,按照我的設(shè)想:至少一臺部署后臺接口的服務(wù)器;一臺部署前端頁面的服務(wù)器;一臺做代理的服務(wù)器;一臺裝載數(shù)據(jù)庫的服務(wù)器等等,這還不包括對某些應(yīng)用做負(fù)載均衡。
可是慷慨的許姓朋友只能贊助我一臺服務(wù)器,這時候我就想到了Docker。只要我多開幾個容器,就能模擬分出多個服務(wù)器,對應(yīng)多個IP。
所以本章首先是講解安裝Docker,其次是一一示例如何在Docker容器中安裝配置Nginx、Tomcat和MySQL。原計劃數(shù)據(jù)庫使用Oracle,但是由于服務(wù)器配置太低,每次Oracle容器運(yùn)行起來后都會導(dǎo)致服務(wù)器宕機(jī),所以不得不改為MySQL。
由于考慮到Docker容器每次重啟都會從鏡像中初始化,文章中會大量使用到掛載,具體原理最后章節(jié)會講。

Docker安裝

1、使用uname -r 查看系統(tǒng)內(nèi)核,Docker 要求CentOS系統(tǒng)的內(nèi)核版本高于 3.10

[root@VM_60_202_centos ~]# uname -r   
3.10.0-862.9.1.el7.x86_64

2、做好準(zhǔn)備,確認(rèn)yum更新到最新,沒有安裝過舊版本Docker

[root@VM_60_202_centos ~]# yum update    --最新版yum包
[root@VM_60_202_centos ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker.io
                                         --刪除舊版本Docker

3、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅(qū)動依賴的

[root@VM_60_202_centos ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

4、最新版本的 Docker 分兩個版本,docker-ce(Community Edition)和docker-ee(Enterprise Edition)。CE版本是免費(fèi)的,如果我們學(xué)習(xí)或者一般應(yīng)用,CE足夠。我們安裝社區(qū)版。下面可以設(shè)置數(shù)據(jù)源倉庫,可以選用Docker官方數(shù)據(jù)源或者阿里云數(shù)據(jù)源:

[root@VM_60_202_centos ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
--添加官方數(shù)據(jù)源

[root@VM_60_202_centos ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
--添加阿里云數(shù)據(jù)源

5、安裝Docker

[root@VM_60_202_centos ~]# yum list docker-ce --showduplicates | sort -r  
--列出可以安裝的docker版本
[root@VM_60_202_centos ~]# yum install docker-ce     
--下載最新版本
[root@VM_60_202_centos ~]# yum install -y docker-ce-18.03.1.ce-1.el7.centos 
--安裝指定版本

6、啟動Docker

[root@VM_60_202_centos ~]# systemctl start docker    --啟動
[root@VM_60_202_centos ~]# systemctl stop docker     --關(guān)閉
[root@VM_60_202_centos ~]# systemctl restart docker  --重啟

7、驗(yàn)證安裝情況

[root@VM_60_202_centos ~]# docker --version  --查看安裝的docker版本
[root@VM_60_202_centos ~]# docker run hello-world
Tomcat容器

1、從數(shù)據(jù)源中查找Tomcat鏡像。一般下載官方的鏡像Starts最高的那個。

[root@VM_60_202_centos ~]# docker search tomcat    --查詢tomcat官方鏡像
[root@VM_60_202_centos ~]# docker pull tomcat      --下載下來其中的名為“tomcat”的鏡像
[root@VM_60_202_centos ~]# docker images           --查看本地所有的鏡像

2、宿主機(jī)創(chuàng)建掛載目錄,啟動Tomcat容器

[root@VM_60_202_centos ~]# mkdir -p /u01/tomcat/webapps/tomcat1
--創(chuàng)建目錄/u01/tomcat/webapps/tomcat1,用于掛載Tomcat的

[root@VM_60_202_centos ~]# mkdir -p /u01/tomcat/webapps/tomcat2
--創(chuàng)建目錄/u01/tomcat/webapps/tomcat2,用于掛載Tomcat的
--并分別在/u01/tomcat/webapps/tomcat1和/u01/tomcat/webapps/tomcat2中放置已經(jīng)準(zhǔn)備好的不同的war包(雖然都是kerryNginxServlet.war,但內(nèi)容不同)

[root@VM_60_202_centos ~]# docker run --name=my_tomcat1 -v /u01/tomcat/webapps/tomcat1:/usr/local/tomcat/webapps -p 8001:8080 -d tomcat
--啟動一個Tomcat容器,命名為my_tomcat1;將容器的8080端口映射到宿主機(jī)的8001
--將宿主機(jī)的/u01/tomcat/webapps/tomcat1 目錄掛載到容器上的/usr/local/tomcat/webapps 目錄

[root@VM_60_202_centos ~]# docker run --name=my_tomcat2 -v /u01/tomcat/webapps/tomcat2:/usr/local/tomcat/webapps -p 8002:8080 -d tomcat
--再運(yùn)行一個Tomcat容器,命名my_tomcat2,用于做負(fù)載均衡

3、驗(yàn)證Tomcat容器

[root@VM_60_202_centos ~]# curl http://localhost:8001/kerryNginxServlet/servletA

hello I am Kerry!

This is the servlet test A!

[root@VM_60_202_centos ~]# curl http://localhost:8002/kerryNginxServlet/servletA

hello I am Kerry!

This is the servlet test B!

Nginx容器

1、同樣,從數(shù)據(jù)源中查找Nginx鏡像。一般下載官方的鏡像Starts最高的那個。

[root@VM_60_202_centos ~]# docker search nginx    --查詢nginx官方鏡像
[root@VM_60_202_centos ~]# docker pull nginx      --下載下來其中的名為“nginx”的鏡像
[root@VM_60_202_centos ~]# docker images           --查看本地所有的鏡像

2、宿主機(jī)創(chuàng)建掛載目錄,編輯配置文件

[root@VM_60_202_centos ~]# mkdir -p /u01/nginx
[root@VM_60_202_centos ~]# mkdir -p /u01/nginx/conf.d
[root@VM_60_202_centos ~]# touch /u01/nginx/nginx.conf
[root@VM_60_202_centos ~]# touch /u01/nginx/conf.d/default.conf

然后vi 編輯 /u01/nginx/nginx.conf 文件

user  root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
                      "$status $body_bytes_sent "$http_referer" "
                      ""$http_user_agent" "$http_x_forwarded_for"";

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;

    upstream tomcatServer {
      server t1:8080;
      server t2:8080;
    }
}

編輯 /u01/nginx/conf.d/default.conf 文件

server {
    listen       80;
    server_name localhost;
    location / {
        proxy_pass   http://tomcatServer;
    }
}

3、啟動Nginx容器

[root@VM_60_202_centos ~]# docker run --name=my_nginx1 --link=my_tomcat1:t1 --link=my_tomcat2:t2 -v /u01/nginx/nginx.conf:/etc/nginx/nginx.conf -v /u01/nginx/conf.d:/etc/nginx/conf.d -p 8000:80 -d nginx
--運(yùn)行Nginx的容器,命名為my_nginx1
--給my_tomcat1、my_tomcat2容器分別起別名,t1、t2(會在my_nginx1的/etc/hosts文件中自動配置)
--掛載/u01/nginx/nginx.conf文件和/u01/nginx/conf.d目錄
--將容器的端口號80映射到宿主機(jī)的8000端口

[root@VM_60_202_centos ~]# curl http://localhost:8000/kerryNginxServlet/servletA

hello I am Kerry!

This is the servlet test A!

[root@VM_60_202_centos ~]# curl http://localhost:8000/kerryNginxServlet/servletA

hello I am Kerry!

This is the servlet test B!

因?yàn)榕渲昧素?fù)載均衡,所以在訪問http://localhost:8000/kerryNginxServlet/servletA時,會有平均概率地訪問http://localhost:8001/kerryNginxServlet/servletA 和 http://localhost:8002/kerryNginxServlet/servletA

MySQL容器

1、從數(shù)據(jù)源中查找MySQL鏡像。一般下載官方的鏡像Starts最高的那個。

[root@VM_60_202_centos ~]# docker search mysql    --查詢mysql官方鏡像
[root@VM_60_202_centos ~]# docker pull mysql      --下載下來其中的名為“mysql”的鏡像
[root@VM_60_202_centos ~]# docker images           --查看本地所有的鏡像

2、創(chuàng)建掛載目錄

[root@VM_60_202_centos ~]# mkdir -p /u01/mysql/data /u01/mysql/logs /u01/mysql/conf

--data目錄將映射為mysql容器配置的數(shù)據(jù)文件存放路徑
--logs目錄將映射為mysql容器的日志目錄
--conf目錄里的配置文件將映射為mysql容器的配置文件

3、啟動MySQL容器

docker run -p 3306:3306 --name my_mysql1 -v /u01/mysql/conf:/etc/mysql/conf.d -v /u01/mysql/logs:/logs -v /u01/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=kerry -d mysql

-p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口。
-v 掛載。
-e MYSQL_ROOT_PASSWORD=kerry:初始化 root 用戶的密碼。

4、遠(yuǎn)程連接數(shù)據(jù)庫
這時遠(yuǎn)程來連接該數(shù)據(jù)庫,可能會報錯:

ERROR 2059 (HY000): Authentication plugin "caching_sha2_password" cannot be loaded

在安裝mysql8的時候如果選擇了密碼加密,之后用客戶端連接比如navicate,會提示客戶端連接caching-sha2-password,是由于客戶端不支持這種插件,可以通過如下方式進(jìn)行修改:
1)進(jìn)入容器

docker exec -it my_mysql1 bash

2)進(jìn)入mysql

mysql -uroot -pkerry

3)修改用戶登錄權(quán)限信息
先查詢用戶信息

mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | root             | caching_sha2_password | *B9C0EAD50A12474280CBCFD8CFB40DF416A93E02                              |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | mysql_native_password | *B9C0EAD50A12474280CBCFD8CFB40DF416A93E02                              |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)

host為 % 表示不限制ip localhost表示本機(jī)使用 plugin非mysql_native_password 則需要修改密碼。
上文中可以見,root用戶不限制ip,但需要修改 plugin。當(dāng)然,如果為了應(yīng)對各種應(yīng)用場景,可以統(tǒng)一執(zhí)行下列SQL:

ALTER USER "root"@"%" IDENTIFIED BY "kerry" PASSWORD EXPIRE NEVER; 
ALTER USER "root"@"%" IDENTIFIED WITH mysql_native_password BY "kerry"; 
FLUSH PRIVILEGES; #刷新權(quán)限 

改完之后,就可以用其他客戶端連接該數(shù)據(jù)庫了。此時查詢數(shù)據(jù)庫的用戶信息為:

mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | root             | mysql_native_password | *B9C0EAD50A12474280CBCFD8CFB40DF416A93E02                              |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | mysql_native_password | *B9C0EAD50A12474280CBCFD8CFB40DF416A93E02                              |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
其他

1、掛載的原理
Docker內(nèi)的文件系統(tǒng)工作情況。Docker鏡像被存儲在一系列的只讀層。當(dāng)我們開啟一個容器,Docker讀取只讀鏡像并添加一個讀寫層在頂部。如果正在運(yùn)行的容器修改了現(xiàn)有的文件,該文件將被拷貝出底層的只讀層到最頂層的讀寫層。在讀寫層中的舊版本文件隱藏于該文件之下,但并沒有被不破壞 - 它仍然存在于鏡像以下。當(dāng)Docker的容器被刪除,然后重新啟動鏡像時,將開啟一個沒有任何更改的新的容器 - 這些更改會丟失。此只讀層及在頂部的讀寫層的組合被Docker稱為Union File System(聯(lián)合文件系統(tǒng))。
為了能夠保存(持久)數(shù)據(jù)以及共享容器間的數(shù)據(jù),Docker提出了Volumes的概念。很簡單,volumes是目錄(或者文件),它們是外部默認(rèn)的聯(lián)合文件系統(tǒng)或者是存在于宿主文件系統(tǒng)正常的目錄和文件。
2、MySQL的表數(shù)據(jù)等,在本地宿主機(jī)上存儲的策略尚不完整,后續(xù)會另起篇幅,拿實(shí)際項(xiàng)目舉例說明。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/27428.html

相關(guān)文章

  • 務(wù)器從零開始2D)-Docker+Tomcat+Nginx+MySQL

    摘要:此時查詢數(shù)據(jù)庫的用戶信息為其他掛載的原理內(nèi)的文件系統(tǒng)工作情況。此只讀層及在頂部的讀寫層的組合被稱為聯(lián)合文件系統(tǒng)。 簡介 對于企業(yè)應(yīng)用架構(gòu)來說,肯定不局限于一臺服務(wù)器,按照我的設(shè)想:至少一臺部署后臺接口的服務(wù)器;一臺部署前端頁面的服務(wù)器;一臺做代理的服務(wù)器;一臺裝載數(shù)據(jù)庫的服務(wù)器等等,這還不包括對某些應(yīng)用做負(fù)載均衡。可是慷慨的許姓朋友只能贊助我一臺服務(wù)器,這時候我就想到了Docker。只...

    dadong 評論0 收藏0
  • docker 容器間通訊

    摘要:參考鏈接外部容器的幾種方式參考內(nèi)容中有些許實(shí)現(xiàn)不到位的地方,按照測試?yán)樱懿黄饋恚蕝⒖己筮M(jìn)行了一些修改,重新寫了下文章記錄一下,有些自己理解的可能不是很到位,大家湊合著看下,有問題歡迎指出,在此先謝過了,。 參考:Docker Compose:鏈接外部容器的幾種方式參考內(nèi)容中有些許實(shí)現(xiàn)不到位的地方,按照測試?yán)樱懿黄饋恚蕝⒖己筮M(jìn)行了一些修改,重新寫了下文章記錄一下,有些自己理解...

    zebrayoung 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<