摘要:此時查詢數(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é)會講。
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-worldTomcat容器
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/servletANginx容器hello I am Kerry!
This is the servlet test A!
[root@VM_60_202_centos ~]# curl http://localhost:8002/kerryNginxServlet/servletAhello I am Kerry!
This is the servlet test B!
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/servletAhello I am Kerry!
This is the servlet test A!
[root@VM_60_202_centos ~]# curl http://localhost:8000/kerryNginxServlet/servletAhello 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
摘要:此時查詢數(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。只...
摘要:參考鏈接外部容器的幾種方式參考內(nèi)容中有些許實(shí)現(xiàn)不到位的地方,按照測試?yán)樱懿黄饋恚蕝⒖己筮M(jìn)行了一些修改,重新寫了下文章記錄一下,有些自己理解的可能不是很到位,大家湊合著看下,有問題歡迎指出,在此先謝過了,。 參考:Docker Compose:鏈接外部容器的幾種方式參考內(nèi)容中有些許實(shí)現(xiàn)不到位的地方,按照測試?yán)樱懿黄饋恚蕝⒖己筮M(jìn)行了一些修改,重新寫了下文章記錄一下,有些自己理解...
閱讀 1438·2023-04-25 16:31
閱讀 2040·2021-11-24 10:33
閱讀 2745·2021-09-23 11:33
閱讀 2528·2021-09-23 11:31
閱讀 2900·2021-09-08 09:45
閱讀 2336·2021-09-06 15:02
閱讀 2647·2019-08-30 14:21
閱讀 2313·2019-08-30 12:56