docker部署教程
如今Docker的使用已經(jīng)非常普遍,特別在一線互聯(lián)網(wǎng)公司。使用Docker技術(shù)可以幫助企業(yè)快速水平擴(kuò)展服務(wù),從而到達(dá)彈性部署業(yè)務(wù)的能力。在云服務(wù)概念興起之后,Docker的使用場(chǎng)景和范圍進(jìn)一步發(fā)展,如今在微服務(wù)架構(gòu)越來(lái)越流行的情況下,微服務(wù)+Docker的完美組合,更加方便微服務(wù)架構(gòu)運(yùn)維部署落地。
本文詳細(xì)解釋介紹Docker入門相關(guān)內(nèi)容,Docker在微服務(wù)體系中的使用。在了解Docker之前我們先考慮幾個(gè)問(wèn)題:
1、Docker是什么?2、為什么要使用Docker,它有什么優(yōu)勢(shì)?帶著這些問(wèn)題我們來(lái)看看下面的內(nèi)容。
什么是Docker?
Docker 是世界領(lǐng)先的軟件容器平臺(tái)。開(kāi)發(fā)人員利用 Docker 可以消除協(xié)作編碼時(shí)“在我的機(jī)器上可正常工作”的問(wèn)題。運(yùn)維人員利用 Docker 可以在隔離容器中并行運(yùn)行和管理應(yīng)用,獲得更好的計(jì)算密度。企業(yè)利用 Docker 可以構(gòu)建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽(yù)為 Linux 和 Windows Server 應(yīng)用發(fā)布新功能。
Docker 屬于 Linux 容器的一種封裝,提供簡(jiǎn)單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Docker 將應(yīng)用程序與該程序的依賴,打包在一個(gè)文件里面。運(yùn)行這個(gè)文件,就會(huì)生成一個(gè)虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣。有了 Docker,就不用擔(dān)心環(huán)境問(wèn)題。
總體來(lái)說(shuō),Docker 的接口相當(dāng)簡(jiǎn)單,用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。
Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國(guó)期間發(fā)起的一個(gè)公司內(nèi)部項(xiàng)目,它是基于 dotCloud 公司多年云服務(wù)技術(shù)的一次革新,并于 2013 年 3 月以 Apache 2.0 授權(quán)協(xié)議開(kāi)源,主要項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。Docker 項(xiàng)目后來(lái)還加入了 Linux 基金會(huì),并成立推動(dòng) 開(kāi)放容器聯(lián)盟。
Docker 自開(kāi)源后受到廣泛的關(guān)注和討論,至今其 GitHub 項(xiàng)目已經(jīng)超過(guò) 4 萬(wàn) 6 千個(gè)星標(biāo)和一萬(wàn)多個(gè) fork。甚至由于 Docker 項(xiàng)目的火爆,在 2013 年底,dotCloud 公司決定改名為 Docker。Docker 最初是在 Ubuntu 12.04 上開(kāi)發(fā)實(shí)現(xiàn)的;Red Hat 則從 RHEL 6.5 開(kāi)始對(duì) Docker 進(jìn)行支持;Google 也在其 PaaS 產(chǎn)品中廣泛應(yīng)用 Docker。
為什么要使用Docker
容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時(shí)系統(tǒng)的開(kāi)銷盡量小。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個(gè)不同的應(yīng)用就要起 10 個(gè)虛擬機(jī),而Docker 只需要啟動(dòng) 10 個(gè)隔離的應(yīng)用即可。
具體說(shuō)來(lái),Docker 在如下幾個(gè)方面具有較大的優(yōu)勢(shì)。
1、更快速的交付和部署
對(duì)開(kāi)發(fā)和運(yùn)維人員來(lái)說(shuō),最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行。
開(kāi)發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來(lái)構(gòu)建一套開(kāi)發(fā)容器,開(kāi)發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來(lái)部署代碼。 Docker 可以快速創(chuàng)建容器,快速迭代應(yīng)用程序,并讓整個(gè)過(guò)程全程可見(jiàn),使團(tuán)隊(duì)中的其他成員更容易理解應(yīng)用程序是如何創(chuàng)建和工作的。 Docker 容器很輕很快!容器的啟動(dòng)時(shí)間是秒級(jí)的,大量地節(jié)約開(kāi)發(fā)、測(cè)試、部署的時(shí)間。
2、更高效的虛擬化
Docker 容器的運(yùn)行不需要額外的 hypervisor 支持,它是內(nèi)核級(jí)的虛擬化,因此可以實(shí)現(xiàn)更高的性能和效率。
3、更輕松的遷移和擴(kuò)展
Docker 容器幾乎可以在任意的平臺(tái)上運(yùn)行,包括物理機(jī)、虛擬機(jī)、公有云、私有云、個(gè)人電腦、服務(wù)器等。 這種兼容性可以讓用戶把一個(gè)應(yīng)用程序從一個(gè)平臺(tái)直接遷移到另外一個(gè)。
4、更簡(jiǎn)單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發(fā)和更新,從而實(shí)現(xiàn)自動(dòng)化并且高效的管理。
Docker vs VM
從下圖可以看出,VM是一個(gè)運(yùn)行在宿主機(jī)之上的完整的操作系統(tǒng),VM運(yùn)行自身操作系統(tǒng)會(huì)占用較多的CPU、內(nèi)存、硬盤資源。Docker不同于VM,只包含應(yīng)用程序以及依賴庫(kù),基于libcontainer運(yùn)行在宿主機(jī)上,并處于一個(gè)隔離的環(huán)境中,這使得Docker更加輕量高效,啟動(dòng)容器只需幾秒鐘之內(nèi)完成。由于Docker輕量、資源占用少,使得Docker可以輕易的應(yīng)用到構(gòu)建標(biāo)準(zhǔn)化的應(yīng)用中。但Docker目前還不夠完善,比如隔離效果不如VM,共享宿主機(jī)操作系統(tǒng)的一些基礎(chǔ)庫(kù)等;網(wǎng)絡(luò)配置功能相對(duì)簡(jiǎn)單,主要以橋接方式為主;查看日志也不夠方便靈活。
Docker 在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極大的簡(jiǎn)化了容器的創(chuàng)建和維護(hù)。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷。
作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢(shì)。Docker 容器的啟動(dòng)可以在秒級(jí)實(shí)現(xiàn),這相比傳統(tǒng)的虛擬機(jī)方式要快得多;Docker 對(duì)系統(tǒng)資源的利用率很高,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè) Docker 容器。
相關(guān)概念
Docker是CS架構(gòu),主要有兩個(gè)概念:
Docker daemon: 運(yùn)行在宿主機(jī)上,Docker守護(hù)進(jìn)程,用戶通過(guò)Docker client(Docker命令)與Docker daemon交互
Docker client: Docker 命令行工具,是用戶使用Docker的主要方式,Docker client與Docker daemon通信并將結(jié)果返回給用戶,Docker client也可以通過(guò)socket或者RESTful api訪問(wèn)遠(yuǎn)程的Docker daemon
了解了Docker的組成,再來(lái)了解一下Docker的三個(gè)主要概念:
Docker image:鏡像是只讀的,鏡像中包含有需要運(yùn)行的文件。鏡像用來(lái)創(chuàng)建container,一個(gè)鏡像可以運(yùn)行多個(gè)container;鏡像可以通過(guò)Dockerfile創(chuàng)建,也可以從Docker hub/registry上下載。
Docker container:容器是Docker的運(yùn)行組件,啟動(dòng)一個(gè)鏡像就是一個(gè)容器,容器是一個(gè)隔離環(huán)境,多個(gè)容器之間不會(huì)相互影響,保證容器中的程序運(yùn)行在一個(gè)相對(duì)安全的環(huán)境中。
Docker hub/registry: 共享和管理Docker鏡像,用戶可以上傳或者下載上面的鏡像,官方地址為 https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
鏡像就相當(dāng)于打包好的版本,鏡像啟動(dòng)之后運(yùn)行在容器中,倉(cāng)庫(kù)就是裝存儲(chǔ)鏡像的地方。
好了,接下來(lái)就是具體進(jìn)行docker實(shí)戰(zhàn)演練了!!!
這幾天學(xué)習(xí)了docker相關(guān)的教程,做個(gè)筆記,可以日后查看。
第一節(jié)課docker前戲
購(gòu)買了一臺(tái)騰訊云的服務(wù)器。首先進(jìn)行了服務(wù)器的系統(tǒng)更新:
- 1
第二步,更新內(nèi)核
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y cat /boot/grub2/grub.cfg grub2-set-default 'CentOS Linux (4.20.13-1.el7.elrepo.x86_64) 7 (Core)'- 1
- 2
- 3
- 4
- 5
第三步,內(nèi)核更新完成。進(jìn)行重啟:
reboot- 1
通過(guò) uname -r 查看系統(tǒng)的最新版本。
安裝掛載磁盤
通過(guò) 命令查看系統(tǒng)盤和磁盤:
- 1
第二步,格式化硬盤 ;
- 1
接著 執(zhí)行 n p 1; wq
3.創(chuàng)建分區(qū)
- 1
4.將數(shù)據(jù)盤掛載
命令:
- 1
- 1
第五步:寫入硬盤啟動(dòng)信息,下次啟動(dòng)后自動(dòng)掛載數(shù)據(jù)盤
echo /dev/vdb1 /data ext4 defaults 0 0 >> /etc/fstab- 1
第二課docker安裝及注意事項(xiàng)
接下來(lái)就是在購(gòu)買的云服務(wù)器上進(jìn)行docker的安裝。具體步驟如下:
創(chuàng)建一個(gè)docker 文件夾: mkdir docker
第一步:下載一個(gè)工具類
- 1
- 2
- 3
第二步:添加docker源
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo- 1
- 2
- 3
第三步,安裝docker
yum install -y docker-ce- 1
安裝完docker之后,就要啟動(dòng)docker服務(wù)了。
systemctl start docker- 1
可以通過(guò)以下命令,查看docker服務(wù)開(kāi)啟的狀態(tài)
systemctl status docker- 1
讓dokcer服務(wù)開(kāi)啟自動(dòng)啟動(dòng)
systemctl enable docker- 1
查看docker的信息
docker info- 1
查看信息的時(shí)候,會(huì)發(fā)現(xiàn)有報(bào)錯(cuò)。如下:
WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled- 1
- 2
解決辦法,編輯
vim /etc/sysctl.conf- 1
文件增加下面兩行配置
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1- 1
- 2
然后執(zhí)行命令:
sysctl -p- 1
查看信息的時(shí)候,如果出現(xiàn)報(bào)錯(cuò),如下:
WARNING: IPv4 forwarding is disabled- 1
解決辦法,編輯
vim /etc/sysctl.conf- 1
添加一行配置文件
net.ipv4.ip_forward=1- 1
重啟docker的命令:
systemctl daemon-reload systemctl restart docker- 1
- 2
下載安裝docker -compose。
第一步,下載一個(gè)compose上傳到服務(wù)器,或者使用該地址下載
- 1
網(wǎng)速慢,用百度云:鏈接:https://pan.baidu.com/s/1Dxz-QnxECHW3fLFQjsndag
提取碼:uumo
復(fù)制這段內(nèi)容后打開(kāi)百度網(wǎng)盤手機(jī)App,操作更方便哦
第二步:給docker-compose添加可執(zhí)行權(quán)限
- 1
第三步:
docker-compose --version- 1
如何卸載 docker -compose
rm /usr/local/bin/docker-compose- 1
第三課docker安裝 openvpn
https://docs.docker.com/compose/install/
創(chuàng)建 openvpn文件夾 mkdir openvpn
在data掛載盤,進(jìn)行編輯配置文件
- 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
cd 到 openvpn路徑下
docker-compose run --rm openvpn ovpn_genconfig -u udp://129.211.130.142- 1
初始化
docker-compose run --rm openvpn ovpn_initpki- 1
這些是提示的輸入
Enter PEM pass phrase: 輸入123456(你是看不見(jiàn)的) Verifying - Enter PEM pass phrase: 輸入123456(你是看不見(jiàn)的) Common Name (eg: your user, host, or server name) [Easy-RSA CA]:回車一下 Enter pass phrase for /etc/openvpn/pki/private/ca.key:輸入123456 ```- 1
- 2
- 3
- 4
// 開(kāi)啟 openvpn服務(wù)
docker-compose up -d openvpn- 1
創(chuàng)建一個(gè)客戶端用戶
docker-compose run --rm openvpn easyrsa build-client-full virtuousOne nopass Enter pass phrase for /etc/openvpn/pki/private/ca.key:輸入123456- 1
- 2
把證書導(dǎo)入到virtuousOne.ovpn中
在openvpn中創(chuàng)建文件夾: mkdir clientovpn
- 1
同時(shí),去云服務(wù)控制臺(tái)開(kāi)啟端口
win客戶端下載一個(gè)openVPN的連接工具:地址 https://openvpn.net/index.php/open-source/downloads.html
同時(shí),我們把證書下載下來(lái),放到安裝在win的conf目錄下
查看哪些是正常啟動(dòng)的:
- 1
第四課–docker實(shí)戰(zhàn)-安裝mysql、redis
在data目錄下創(chuàng)建mysql: mkdir mysql
然后再里面創(chuàng)建配置文件,配置好配置文件
- 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
安裝mysql
docker run --restart=always --name mysql \-v /data/docker/mysql/data:/var/lib/mysql -v /data/docker/mysql:/etc/mysql/conf.d \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD='123456' -d mysql:5.7.25 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci- 1
- 2
- 3
- 4
設(shè)置mysql的版本
將安裝到docker的mysql,設(shè)置到openvpn的網(wǎng)絡(luò)中
- 1
查看mysql在該容器中的 網(wǎng)絡(luò)IP
docker exec mysql cat /etc/hosts- 1
查看openvpn的網(wǎng)絡(luò)IP
docker exec openvpn cat /etc/hosts- 1
本地計(jì)算機(jī)開(kāi)啟openVPN GUI
然后就可以遠(yuǎn)程連接mysql.
在mysql中查看設(shè)置的配置連接池:
show VARIABLES like ‘%max_connections%’;
安裝redis
在data目錄下,創(chuàng)建redis文件夾。mkdir redis
docker run --restart=always --name redis -p 6379:6379 -v /data/redis/data:/data -d redis --appendonly yes- 1
安裝完成,進(jìn)行配置redis的openvpn
docker network connect openvpn_default redis- 1
查看redis在openvpn對(duì)應(yīng)的IP
docker exec redis cat /etc/hosts- 1
查看docker對(duì)應(yīng)的openvpn對(duì)應(yīng)的IP
docker exec openvpn cat /etc/hosts- 1
成功連接后,即可表示安裝完成!
第五課–docker實(shí)戰(zhàn)-安裝nginx,配置https
首先創(chuàng)建 mdkir nginx 。然后繼續(xù)
在nginx文件夾下創(chuàng)建三個(gè)文件建
- 1
- 2
- 3
下一步,在www目錄下編輯index.html
cd www vim index.html- 1
- 2
在nginx中 創(chuàng)建 nginx.conf文件
vim nginx.conf- 1
編輯的內(nèi)容是:
#user nobody; user root; worker_processes 4; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events {use epoll; worker_connections 20480; } http {include 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 logs/access.log main; #下面三行是nginx解決跨域問(wèn)題#add_header Access-Control-Allow-Origin *;# add_header Access-Control-Allow-Headers X-Requested-With;#add_header Access-Control-Allow-Methods GET,POST,OPTIONS;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;#關(guān)閉顯示nginx版本號(hào)server_tokens off;include /etc/nginx/conf.d/*.conf; }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
在 conf.d中創(chuàng)建 docker.virtuousone.cn.conf文件,編輯的內(nèi)容為:
server{listen 443 ssl http2 default_server ;server_name docker.virtuousone.cn;index index.html index.htm ;root /usr/share/nginx/html; ssl on;ssl_certificate /etc/nginx/cert/fullchain.pem;ssl_certificate_key /etc/nginx/cert/privkey.pem;ssl_protocols TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_session_timeout 10m;ssl_session_cache builtin:1000 shared:SSL:10m; #SSL 會(huì)話緩存類型和大小ssl_buffer_size 1400; # 1400 bytes to fit in one MTUadd_header Strict-Transport-Security max-age=15768000;ssl_stapling on;ssl_stapling_verify on;#如果使用這個(gè)AES256+EECDH:AES256+EDH:!aNULL 當(dāng)nginx開(kāi)啟http2的時(shí)候,瀏覽器會(huì)訪問(wèn)不了,chrome瀏覽器報(bào)錯(cuò)內(nèi)容ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY#http://www.chinaz.com/web/2016/0323/515111.shtml 參考這個(gè)#ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;#強(qiáng)烈推薦使用下面這個(gè)ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # location / {# proxy_pass http://127.0.0.1:5250;# proxy_set_header Host $host;# proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #}#access_log /home/wwwlogs/access.log;location ~* \.(jpg|jpeg|png|gif|ico|css|js|mp3)$ {expires 30d;}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
復(fù)制文件
cp docker.virtuousone.cn.conf api.virtuousone.cn.conf.bak docker.virtuousone.cn.conf test.virtuousone.cn.conf.bak- 1
- 2
生成證書:
docker run --name certbot -p 443:443 -p 80:80 -v /data/certbot/letsencrypt:/etc/letsencrypt -d certbot/certbot certonly --standalone --agree-tos --non-interactive --email 2812927266@qq.com -d docker.virtuousone.cn -d api.virtuousone.cn -d test.virtuousone.cn- 1
這個(gè)證書的有效期是90天,到期之后,可以更新證書:
docker run --name certbot -p 443:443 -p 80:80 -v /data/docker/certbot/letsencrypt:/etc/letsencrypt -d certbot/certbot certonly renew --force-renew- 1
在域名網(wǎng)站開(kāi)啟二級(jí)域名以及 開(kāi)通443和80端口
進(jìn)入到cerbot下。的 letsencrypt的live的目錄下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
復(fù)制生成的證書 到cert中
cp fullchain.pem privkey.pem /data/nginx/cert- 1
進(jìn)入到cert目錄下
cd /data/nginx/cert ls cd ..- 1
- 2
- 3
查看 .conf文件
cat conf.d/docker.virtuousone.cn.conf- 1
拉取并啟動(dòng) nginx
docker run --net host --restart=always --name nginx -e TZ="Asia/Shanghai" -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/localtime:/etc/localtime:ro -v /data/nginx/conf.d:/etc/nginx/conf.d -v /data/nginx/cert:/etc/nginx/cert -v /data/nginx/www:/usr/share/nginx/html -d nginx- 1
在 conf.d中的 docker.virtuousone.cn.conf中
添加一個(gè)Server配置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
重啟nginx服務(wù)
docker restart nginx- 1
在瀏覽器中輸入二級(jí)域名,就可以看到nginx配置成功的了。
同時(shí),可以在https://www.sslshopper.com/ssl-checker.html
進(jìn)行檢測(cè)配置的https的安全級(jí)別。
第六課 docker實(shí)戰(zhàn)-spring boot項(xiàng)目docker容器化的部署
周末學(xué)習(xí)了下如何在docker中部署spring boot項(xiàng)目。
第一步,是打包。
在data目錄下,創(chuàng)建 api文件夾和 test文件夾
- 1
進(jìn)入api,創(chuàng)建一個(gè)Dockerfile文件夾
進(jìn)行編輯:
- 1
里面的內(nèi)容為:
FROM java:8 MAINTAINER virtuousone <2812927266@qq.com> VOLUME /tmp ADD docker-0.0.1-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=prod" ]- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
同理,在test中的Dockerfile中編輯內(nèi)容:
[root@virtuousOne test]# cat Dockerfile FROM java:8 MAINTAINER virtuousone <2812927266@qq.com> VOLUME /tmp ADD docker-0.0.1-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=test" ]- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
將打包的spring boot項(xiàng)目,傳到api文件夾中。
復(fù)制一份,到test中
- 1
修改在nginx中的nginx.conf的配置:
vim /data/nginx/conf.d/api.virtuousone.cn.conf- 1
修改nginx對(duì)應(yīng)的轉(zhuǎn)發(fā)配置(方式一):是根據(jù)宿主主機(jī)映射端口,進(jìn)行訪問(wèn)。
server{listen 443 ssl http2;#listen 80;server_name test.virtuousone.cn;index index.html index.htm ;root /usr/share/nginx/html; ssl_certificate /etc/nginx/cert/fullchain.pem;ssl_certificate_key /etc/nginx/cert/privkey.pem;ssl_protocols TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_session_timeout 10m;ssl_session_cache builtin:1000 shared:SSL:10m; #SSL 會(huì)話緩存類型和大小ssl_buffer_size 1400; # 1400 bytes to fit in one MTUadd_header Strict-Transport-Security max-age=15768000;ssl_stapling on;ssl_stapling_verify on;#如果使用這個(gè)AES256+EECDH:AES256+EDH:!aNULL 當(dāng)nginx開(kāi)啟http2的時(shí)候,瀏覽器會(huì)訪問(wèn)不了,chrome瀏覽器報(bào)錯(cuò)內(nèi)容ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY#http://www.chinaz.com/web/2016/0323/515111.shtml 參考這個(gè)#ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;#強(qiáng)烈推薦使用下面這個(gè)ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;location / {proxy_pass http://127.0.0.1:10001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#access_log /home/wwwlogs/access.log;location ~* \.(jpg|jpeg|png|gif|ico|css|js|mp3)$ {expires 30d;}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
改變端口號(hào),就可以寫到test中
修改nginx對(duì)應(yīng)的轉(zhuǎn)發(fā)配置(方式二):根據(jù)容器的IP端口映射訪問(wèn)
1.通過(guò)該命令,查詢下該項(xiàng)目對(duì)應(yīng)的ID
- 1
2.通過(guò)該ID,查詢?cè)赿ocker容器中的IP:
- 1
3,修改conf.d里面的配置文件的IP
- 1
這樣就可以了。另一個(gè)環(huán)境的也是同理這樣解決!
以上兩種修改conf.d路徑下的test.virtuousone.cn.conf的方式,選擇一種即可。
第三步,在docker鏡像中執(zhí)行打包上去的項(xiàng)目:
執(zhí)行api環(huán)境中的:
- 1
執(zhí)行test環(huán)境中的:
docker build -t virtuousone/docker-test-springboot:1.0 .- 1
分別運(yùn)行兩個(gè)環(huán)境的項(xiàng)目:
api環(huán)境
- 1
test環(huán)境
docker run --restart=always --name docker-test-springboot -p 10001:8080 -d virtuousone/docker-test-springboot:1.0- 1
重啟nginx容器:
docker restart nginx- 1
查看nginx中的日志:
docker logs -f nginx- 1
如果日志顯示正常,就說(shuō)明已經(jīng)發(fā)布部署城里了。我們可以進(jìn)行訪問(wèn)了。
刪除容器和文件夾,才能刪掉我們刪掉的安裝程序。
刪除容器具體命令:
- 1
刪除文件夾命令:
rm -rf 文件夾- 1
第七課 基于docker的nginx進(jìn)行集群部署
基于上一課,這次主要講解基于nginx的集群部署。
查看之前的容器:
- 1
基于之前放上去的springboot的項(xiàng)目的容器,再進(jìn)行一個(gè)實(shí)例化。
docker run --restart=always --name docker-product-springboot -p 10002:8080 -d virtuousone/docker-api-springboot:1.0- 1
可以查看該容器在docker中的ip:
docker exec 70708b55281c cat /etc/hosts- 1
修改nginx中的配置(配置機(jī)制一:按照輪詢的機(jī)制):
- 1
- 2
修改內(nèi)容如下:
upstream api{ server 127.0.0.1:10000; server 127.0.0.1:10002;}
同時(shí),將location中的 proxy_pass 修改為:
proxy_pass http://api;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
修改ngxin的配置(基于權(quán)重的方式進(jìn)行配置:)
}
- 1
- 2
- 3
- 4
- 5
- 6
其他配置一樣,這是第二種配置的方式。
重啟ngxin之后,就可以了。集群部署多個(gè)項(xiàng)目到此完成了!
進(jìn)行驗(yàn)證:
可以關(guān)閉其中的一個(gè)
- 1
當(dāng)關(guān)閉兩個(gè)后,就502報(bào)錯(cuò)了。沒(méi)法訪問(wèn)了。驗(yàn)證完成。
第八課 docker實(shí)戰(zhàn)-安裝rabbitmq及其使用
在docker目錄下創(chuàng)建一個(gè)rabbitmq
- 1
rabbitmq的安裝比較簡(jiǎn)單。
執(zhí)行命令
- 1
- 2
- 3
- 4
將其網(wǎng)絡(luò)添加到openvpn中,就可以進(jìn)行內(nèi)網(wǎng)使用了。
docker network connect openvpn_default rabbitmq- 1
查看rabbitmq在openvpn對(duì)應(yīng)的IP
docker exec rabbitmq cat /etc/hosts- 1
打開(kāi)openvpn,就可以先查看Web管理的rabbitmq,即可表示安裝成功了。
總結(jié)
以上是生活随笔為你收集整理的docker部署教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GJB 质量分析报告(模板)
- 下一篇: 笔记——数据归一化 scikit-lea