如今Docker的使用已經非常普遍,特別在一線互聯網公司。使用Docker技術可以幫助企業快速水平擴展服務,從而到達彈性部署業務的能力。在雲服務概念興起之後,Docker的使用場景和範圍進一步發展,如今在微服務架構越來越流行的情況下,微服務+Docker的完美組合,更加方便微服務架構運維部署落地。
本文詳細解釋介紹Docker入門相關內容,Docker在微服務體系中的使用。在瞭解Docker之前我們先考慮幾個問題:
1、Docker是什麼?2、爲什麼要使用Docker,它有什麼優勢?帶着這些問題我們來看看下面的內容。
什麼是Docker?
Docker 是世界領先的軟件容器平臺。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。運維人員利用 Docker 可以在隔離容器中並行運行和管理應用,獲得更好的計算密度。企業利用 Docker 可以構建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽爲 Linux 和 Windows Server 應用發佈新功能。
Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。
總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 項目後來還加入了 Linux 基金會,併成立推動 開放容器聯盟。
Docker 自開源後受到廣泛的關注和討論,至今其 GitHub 項目已經超過 4 萬 6 千個星標和一萬多個 fork。甚至由於 Docker 項目的火爆,在 2013 年底,dotCloud 公司決定改名爲 Docker。Docker 最初是在 Ubuntu 12.04 上開發實現的;Red Hat 則從 RHEL 6.5 開始對 Docker 進行支持;Google 也在其 PaaS 產品中廣泛應用 Docker。
爲什麼要使用Docker
容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷儘量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啓動 10 個隔離的應用即可。
具體說來,Docker 在如下幾個方面具有較大的優勢。
1、更快速的交付和部署
對開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。
開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署代碼。 Docker 可以快速創建容器,快速迭代應用程序,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程序是如何創建和工作的。 Docker 容器很輕很快!容器的啓動時間是秒級的,大量地節約開發、測試、部署的時間。
2、更高效的虛擬化
Docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實現更高的性能和效率。
3、更輕鬆的遷移和擴展
Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。
4、更簡單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。
Docker vs VM
從下圖可以看出,VM是一個運行在宿主機之上的完整的操作系統,VM運行自身操作系統會佔用較多的CPU、內存、硬盤資源。Docker不同於VM,只包含應用程序以及依賴庫,基於libcontainer運行在宿主機上,並處於一個隔離的環境中,這使得Docker更加輕量高效,啓動容器只需幾秒鐘之內完成。由於Docker輕量、資源佔用少,使得Docker可以輕易的應用到構建標準化的應用中。但Docker目前還不夠完善,比如隔離效果不如VM,共享宿主機操作系統的一些基礎庫等;網絡配置功能相對簡單,主要以橋接方式爲主;查看日誌也不夠方便靈活。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更爲輕便、快捷。
作爲一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有衆多的優勢。Docker 容器的啓動可以在秒級實現,這相比傳統的虛擬機方式要快得多;Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。
相關概念
Docker是CS架構,主要有兩個概念:
Docker daemon: 運行在宿主機上,Docker守護進程,用戶通過Docker client(Docker命令)與Docker daemon交互
Docker client: Docker 命令行工具,是用戶使用Docker的主要方式,Docker client與Docker daemon通信並將結果返回給用戶,Docker client也可以通過socket或者RESTful api訪問遠程的Docker daemon
瞭解了Docker的組成,再來了解一下Docker的三個主要概念:
Docker image:鏡像是隻讀的,鏡像中包含有需要運行的文件。鏡像用來創建container,一個鏡像可以運行多個container;鏡像可以通過Dockerfile創建,也可以從Docker hub/registry上下載。
Docker container:容器是Docker的運行組件,啓動一個鏡像就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程序運行在一個相對安全的環境中。
Docker hub/registry: 共享和管理Docker鏡像,用戶可以上傳或者下載上面的鏡像,官方地址爲 https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
鏡像就相當於打包好的版本,鏡像啓動之後運行在容器中,倉庫就是裝存儲鏡像的地方。
好了,接下來就是具體進行docker實戰演練了!!!
這幾天學習了docker相關的教程,做個筆記,可以日後查看。
第一節課docker前戲
購買了一臺騰訊雲的服務器。首先進行了服務器的系統更新:
yum update
- 1
第二步,更新內核
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
第三步,內核更新完成。進行重啓:
reboot
- 1
通過 uname -r 查看系統的最新版本。
安裝掛載磁盤
通過 命令查看系統盤和磁盤:
fdisk -l
- 1
第二步,格式化硬盤 ;
fdisk /dev/vdb
- 1
接着 執行 n p 1; wq
3.創建分區
mkfs.ext4 /dev/vdb1
- 1
4.將數據盤掛載
命令:
mkdir/data
- 1
mount /dev/vdb1 /data
- 1
第五步:寫入硬盤啓動信息,下次啓動後自動掛載數據盤
echo /dev/vdb1 /data ext4 defaults 0 0 >> /etc/fstab
- 1
第二課docker安裝及注意事項
接下來就是在購買的雲服務器上進行docker的安裝。具體步驟如下:
創建一個docker 文件夾: mkdir docker
第一步:下載一個工具類
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 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之後,就要啓動docker服務了。
systemctl start docker
- 1
可以通過以下命令,查看docker服務開啓的狀態
systemctl status docker
- 1
讓dokcer服務開啓自動啓動
systemctl enable docker
- 1
查看docker的信息
docker info
- 1
查看信息的時候,會發現有報錯。如下:
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
然後執行命令:
sysctl -p
- 1
查看信息的時候,如果出現報錯,如下:
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。
第一步,下載一個compose上傳到服務器,或者使用該地址下載
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- 1
網速慢,用百度雲:鏈接:https://pan.baidu.com/s/1Dxz-QnxECHW3fLFQjsndag
提取碼:uumo
複製這段內容後打開百度網盤手機App,操作更方便哦
第二步:給docker-compose添加可執行權限
chmod +x /usr/local/bin/docker-compose
- 1
第三步:
docker-compose --version
- 1
如何卸載 docker -compose
rm /usr/local/bin/docker-compose
- 1
第三課docker安裝 openvpn
https://docs.docker.com/compose/install/
創建 openvpn文件夾 mkdir openvpn
在data掛載盤,進行編輯配置文件
vim docker-compose.yml
- 1
version: '2'
services:
openvpn:
cap_add:
- NET_ADMIN
image: kylemanna/openvpn
container_name: openvpn
ports:
- "1194:1194/udp"
restart: always
volumes:
- /data/openvpn:/etc/openvpn
- 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(你是看不見的)
Verifying - Enter PEM pass phrase: 輸入123456(你是看不見的)
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
// 開啓 openvpn服務
docker-compose up -d openvpn
- 1
創建一個客戶端用戶
docker-compose run --rm openvpn easyrsa build-client-full virtuousOne nopass
Enter pass phrase for /etc/openvpn/pki/private/ca.key:輸入123456
- 1
- 2
把證書導入到virtuousOne.ovpn中
在openvpn中創建文件夾: mkdir clientovpn
docker-compose run --rm openvpn ovpn_getclient virtuousOne > /data/openvpn/clientovpn/virtuousOne.ovpn
- 1
同時,去雲服務控制檯開啓端口
win客戶端下載一個openVPN的連接工具:地址 https://openvpn.net/index.php/open-source/downloads.html
同時,我們把證書下載下來,放到安裝在win的conf目錄下
查看哪些是正常啓動的:
docker ps -a
- 1
第四課–docker實戰-安裝mysql、redis
在data目錄下創建mysql: mkdir mysql
然後再裏面創建配置文件,配置好配置文件
vim my.cnf
- 1
[mysqld]
default-time-zone = '+8:00'
max_connections = 1200
thread_cache_size = 100
character_set_server = utf8mb4
#default-storage-engine=INNODB
#init_connect='SET NAMES utf8'
max_allowed_packet=1024M
skip-name-resolve
[mysql]
#default-character-set=utf8
[client]
#default-character-set=utf8
- 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
設置mysql的版本
將安裝到docker的mysql,設置到openvpn的網絡中
docker network connect openvpn_default mysql
- 1
查看mysql在該容器中的 網絡IP
docker exec mysql cat /etc/hosts
- 1
查看openvpn的網絡IP
docker exec openvpn cat /etc/hosts
- 1
本地計算機開啓openVPN GUI
然後就可以遠程連接mysql.
在mysql中查看設置的配置連接池:
show VARIABLES like ‘%max_connections%’;
安裝redis
在data目錄下,創建redis文件夾。mkdir redis
docker run --restart=always --name redis -p 6379:6379 -v /data/redis/data:/data -d redis --appendonly yes
- 1
安裝完成,進行配置redis的openvpn
docker network connect openvpn_default redis
- 1
查看redis在openvpn對應的IP
docker exec redis cat /etc/hosts
- 1
查看docker對應的openvpn對應的IP
docker exec openvpn cat /etc/hosts
- 1
成功連接後,即可表示安裝完成!
第五課–docker實戰-安裝nginx,配置https
首先創建 mdkir nginx 。然後繼續
在nginx文件夾下創建三個文件建
1.mkdir conf.d
2.mkdir cert
3. mkdir www
- 1
- 2
- 3
下一步,在www目錄下編輯index.html
cd www
vim index.html
- 1
- 2
在nginx中 創建 nginx.conf文件
vim nginx.conf
- 1
編輯的內容是:
#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解決跨域問題
#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;
#關閉顯示nginx版本號
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中創建 docker.virtuousone.cn.conf文件,編輯的內容爲:
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 會話緩存類型和大小 ssl_buffer_size 1400; # 1400 bytes to fit in one MTU add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; #如果使用這個AES256+EECDH:AES256+EDH:!aNULL 當nginx開啓http2的時候,瀏覽器會訪問不了,chrome瀏覽器報錯內容ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY #http://www.chinaz.com/web/2016/0323/515111.shtml 參考這個 #ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL; #強烈推薦使用下面這個 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
複製文件
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 [email protected] -d docker.virtuousone.cn -d api.virtuousone.cn -d test.virtuousone.cn
- 1
這個證書的有效期是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
在域名網站開啓二級域名以及 開通443和80端口
進入到cerbot下。的 letsencrypt的live的目錄下
cd certbot
ls
cd letsencrypt
ls
cd live
ls
cd docker.virtuousone.cn
ls
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
複製生成的證書 到cert中
cp fullchain.pem privkey.pem /data/nginx/cert
- 1
進入到cert目錄下
cd /data/nginx/cert
ls
cd ..
- 1
- 2
- 3
查看 .conf文件
cat conf.d/docker.virtuousone.cn.conf
- 1
拉取並啓動 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中
添加一個Server配置
server {
listen 80;
server_name docker.virtuousone.cn ;
#return 301 https://docker.virtuousone.cn$request_uri;
#【這是 nginx 最新支持的寫法】
return 301 https://$server_name$request_uri;
#rewrite ^(.*) https://docker.virtuousone.cn$1 permanent;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
重啓nginx服務
docker restart nginx
- 1
在瀏覽器中輸入二級域名,就可以看到nginx配置成功的了。
同時,可以在https://www.sslshopper.com/ssl-checker.html
進行檢測配置的https的安全級別。
第六課 docker實戰-spring boot項目docker容器化的部署
週末學習了下如何在docker中部署spring boot項目。
第一步,是打包。
在data目錄下,創建 api文件夾和 test文件夾
mkdir api test
- 1
進入api,創建一個Dockerfile文件夾
進行編輯:
vim Dockerfile
- 1
裏面的內容爲:
FROM java:8
MAINTAINER virtuousone <[email protected]>
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中編輯內容:
[root@virtuousOne test]# cat Dockerfile
FROM java:8
MAINTAINER virtuousone <[email protected]>
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項目,傳到api文件夾中。
複製一份,到test中
cp docker-0.0.1-SNAPSHOT.jar ../test/
- 1
修改在nginx中的nginx.conf的配置:
vim /data/nginx/conf.d/api.virtuousone.cn.conf
- 1
修改nginx對應的轉發配置(方式一):是根據宿主主機映射端口,進行訪問。
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 會話緩存類型和大小 ssl_buffer_size 1400; # 1400 bytes to fit in one MTU add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; #如果使用這個AES256+EECDH:AES256+EDH:!aNULL 當nginx開啓http2的時候,瀏覽器會訪問不了,chrome瀏覽器報錯內容ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY #http://www.chinaz.com/web/2016/0323/515111.shtml 參考這個 #ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL; #強烈推薦使用下面這個 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
改變端口號,就可以寫到test中
修改nginx對應的轉發配置(方式二):根據容器的IP端口映射訪問
1.通過該命令,查詢下該項目對應的ID
docker ps -a
- 1
2.通過該ID,查詢在docker容器中的IP:
docker exec 378cc5f1bee1 cat /etc/hosts
- 1
3,修改conf.d裏面的配置文件的IP
vim /data/nginx/conf.d/test.virtuousone.cn.conf
- 1
這樣就可以了。另一個環境的也是同理這樣解決!
以上兩種修改conf.d路徑下的test.virtuousone.cn.conf的方式,選擇一種即可。
第三步,在docker鏡像中執行打包上去的項目:
執行api環境中的:
docker build -t virtuousone/docker-api-springboot:1.0 .
- 1
執行test環境中的:
docker build -t virtuousone/docker-test-springboot:1.0 .
- 1
分別運行兩個環境的項目:
api環境
docker run --restart=always --name docker-springboot -p 10000:8080 -d virtuousone/docker-api-springboot:1.0
- 1
test環境
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
如果日誌顯示正常,就說明已經發布部署城裏了。我們可以進行訪問了。
刪除容器和文件夾,才能刪掉我們刪掉的安裝程序。
刪除容器具體命令:
docker rm -f 容器名稱或容器id
- 1
刪除文件夾命令:
rm -rf 文件夾
- 1
第七課 基於docker的nginx進行集羣部署
基於上一課,這次主要講解基於nginx的集羣部署。
查看之前的容器:
docker ps -a
- 1
基於之前放上去的springboot的項目的容器,再進行一個實例化。
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中的配置(配置機制一:按照輪詢的機制):
cd /data/nginx/conf.d/
vim api.virtuousone.cn.conf
- 1
- 2
修改內容如下:
upstream api{
server 127.0.0.1:10000;
server 127.0.0.1:10002;
}
同時,將location中的 proxy_pass 修改爲:
proxy_pass http://api;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
修改ngxin的配置(基於權重的方式進行配置:)
upstream api{
server 127.0.0.1:10000 weight=1;
server 127.0.0.1:10002 weight=2;
}
- 1
- 2
- 3
- 4
- 5
- 6
其他配置一樣,這是第二種配置的方式。
重啓ngxin之後,就可以了。集羣部署多個項目到此完成了!
進行驗證:
可以關閉其中的一個
docker stop 70708b55281c
- 1
當關閉兩個後,就502報錯了。沒法訪問了。驗證完成。
第八課 docker實戰-安裝rabbitmq及其使用
在docker目錄下創建一個rabbitmq
mkdir rabbitmq
- 1
rabbitmq的安裝比較簡單。
執行命令
docker run --restart=always --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin \
-e TZ="Asia/Shanghai" -e RABBITMQ_DEFAULT_PASS=virtuousone \
-v /data/docker/rabbitmq/rabbitmq-data/:/var/lib/rabbitmq \
-v /etc/localtime:/etc/localtime:ro -d rabbitmq:management
- 1
- 2
- 3
- 4
將其網絡添加到openvpn中,就可以進行內網使用了。
docker network connect openvpn_default rabbitmq
- 1
查看rabbitmq在openvpn對應的IP
docker exec rabbitmq cat /etc/hosts
- 1
打開openvpn,就可以先查看Web管理的rabbitmq,即可表示安裝成功了。
</div>