部署環境搭建
1安裝docker
一定要用root賬號登錄系統,打開終端/或遠程工具(如xshell)登錄系統
檢查是否已經安裝
rpm –qa|grep docker
出現如上說明已安裝
也可用命令docker -v (如果成功顯示版本號,不成功顯示命令不可用)
也可用命令docker version
可卸載重新安裝(也選擇不重新安裝)
rpm –e docker-1.13.1-84.git07f3374.el7.centos.x86_64 --nodeps (卸載時不檢測依賴,只卸載該包)
開始安裝
安裝新版本:https://blog.csdn.net/hanjun0612/article/details/117086463
yum install docker(安裝升級都可以)
中途提示選項:選y 后面還會提示是否繼續選y
安裝完成后查看版本
docker –v
查看docker狀態
systemctl status docker
開啟遠程訪問
vim /usr/lib/systemd/system/docker.service
(vim常用命令總結 https://www.cnblogs.com/yangjig/p/6014198.html)
(直接用gedit /usr/lib/systemd/system/docker.service 編輯更快捷)
在以下添加
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
重新加載文件
systemctl daemon-reload
設置docker為隨機啟動
systemctl enable docker.service
啟動docker
systemctl start docker.service
如果以上啟動出錯Job for docker.service failed because………
(解決參考https://blog.csdn.net/yangqinfeng1121/article/details/83374477)
根據提示運行:
systemctl status docker.service
該提示說明:
此linux的內核中的SELinux不支持 overlay2 graph driver
解決方案:在docker里禁用selinux
vim /etc/sysconfig/docker (vim常用命令總結 https://www.cnblogs.com/yangjig/p/6014198.html)
在這一行后面添加=false
再啟動
systemctl start docker.service
查看狀態
systemctl status docker.service
顯示如下代表啟動成功
2安裝docker-compose(用於編排服務啟動)
查看是否已經安裝
docker-compose –v
卸載重新安裝(可選擇)
pip uninstall docker-compose -y
(全新安裝從這里開始)
先檢查pip是否安裝
pip --version
如果沒有則先安裝pip
yum -y install epel-release
yum -y install python-pip
pip install --upgrade pip
安裝docker-compose
pip install docker-compose --ignore-installed requests
查看版本
docker-compose –version
配置docker-compose工件目錄
在root目錄下新建docker目錄
mkdir docker
進入docker目錄
cd docker
拉取centos鏡象
docker pull docker.io/centos:7.5.1804
查看拉取的鏡象
docker images
運行鏡象docker.io/centos:7.5.1804,產生名為centos的容器用run命令運行並進入容器
docker run -it --name centos docker.io/centos:7.5.1804
安裝java
升級所有包同時也升級軟件和系統內核 (這個時間可能比較較不同網速時間不一樣,可能需要5-10分鍾左右)
yum -y update
yum install -y java
查看是否安裝成功
java –version
退出當前容器
exit
將容器centos保存為新的鏡象
docker commit -m="update" -a="cjh" centos mycentos:7.5.1804
將鏡象存為docker目錄下的文件mycentos.tar(備用,預計580MB)
docker save -o mycentos.tar mycentos:7.5.1804
刪除容器
docker rm $(docker ps -qa)
刪除鏡象
docker rmi $(docker images -qa)
導入之前的mycentos.tar為鏡象
docker load -i mycentos.tar
查看鏡象
docker images
文件配置
1.Wait.sh(文件wait.sh用來等待注冊中心運行才能運行別的服務)
將項目下doc\deploy\wait.sh拷貝至當前目錄/root/docker/wait.sh
給wait.sh賦可執行權限命令
chmod 754 wait.sh
wait.sh
#!/bin/bash #****************************************************************************** #@date : 2018-12-10 10:18:43 #檢測注冊中心,配置中心,webapisys有沒有啟動 #****************************************************************************** : ${SLEEP_SECOND:=10} #切換容器語言(zw2019-3-14) export LANG='zh_CN.UTF-8' export LC_LANG='zh_CN.UTF-8' localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 #set docker datetime as this Liunx system datetime echo "Asia/shanghai" > /etc/timezone cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime wait_for() { declare status=`curl -I -m 10 -o /dev/null -s -w %{http_code} $1:$2` while [[ $status != 200 ]] do echo $status echo wating for $1 to listen on $2... status=`curl -I -m 10 -o /dev/null -s -w %{http_code} $1:$2` # echo $status sleep $SLEEP_SECOND done } declare DEPENDS declare CMD while getopts "d:c:" arg do case $arg in d) DEPENDS=$OPTARG ;; c) CMD=$OPTARG ;; ?) echo "unkonw argument" exit 1 ;; esac done for var in ${DEPENDS//,/ } do host=${var%:*} port=${var#*:} wait_for $host $port done exec $CMD
2. docker-compose.yml(自動運行編排文件)
將項目下doc\deploy\docker-compose.yml拷貝至當前目錄/root/docker/docker-compose.yml
docker-compose.yml
version: '2.2' services: registry: image: registry:1.0 ports: - '9088:9088' container_name: 'registry' entrypoint: java -jar $SECURITY /springCloud.registry-1.0.jar restart: on-failure #cpu_shares: 10 #cpuset: '0' mem_limit: 1g memswap_limit: 2g mem_reservation: 512m config: image: config:1.0 ports: - "9089:9089" container_name: 'config' entrypoint: java -jar $SECURITY /springCloud.config-1.0.jar restart: on-failure #cpu_shares: 10 #cpuset: '0' mem_limit: 1g memswap_limit: 2g mem_reservation: 512m apicommon: image: apicommon:1.0 volumes: - '/root/docker/logs:/logs' - '/root/docker/uploadFiles:/uploadFiles' - '/root/docker/wait.sh:/wait.sh' container_name: 'apicommon' depends_on: - registry - config entrypoint: /wait.sh -d registry:9088/health,config:9089/health -c 'java -jar -Dhost=$HOST -Dactive=$ACTIVE $SECURITY /kps.webAPICommon-1.0.jar ' restart: on-failure #cpu_shares: 9 #cpuset: '1,2,3' mem_limit: 1g memswap_limit: 2g mem_reservation: 512m apisys: image: apisys:1.0 volumes: - '/root/docker/logs:/logs' - '/root/docker/uploadFiles:/uploadFiles' - '/root/docker/wait.sh:/wait.sh' container_name: 'apisys' depends_on: - registry - config entrypoint: /wait.sh -d registry:9088/health,config:9089/health -c 'java -jar -Dhost=$HOST -Dactive=$ACTIVE $SECURITY /kps.webAPISYS-1.0.jar ' restart: on-failure #cpu_shares: 10 #cpuset: '1,2,3' mem_limit: 1g memswap_limit: 2g mem_reservation: 512m zuul: # 服務名 image: zuul:1.0 #鏡象名 ports: #主機與容器端口映射 - '9090:9090' #前者為主機端口,后為容器端口 volumes: - '/root/docker/logs:/logs' #前者為主機目錄,后為容器目錄 - '/root/docker/uploadFiles:/uploadFiles' - '/root/docker/wait.sh:/wait.sh' container_name: 'zuul' #容器名 depends_on: # 啟動依賴 - registry - config entrypoint: /wait.sh -d registry:9088/health,config:9089/health -c 'java -jar -Dhost=$HOST -Dactive=$ACTIVE $SECURITY /springCloud.zuul-1.0.jar ' restart: on-failure #非正常退出,立即重啟 #cpu_shares: 5 #cpu分配優先權重 #cpuset: '1,2,3' #cpu核編號 mem_limit: 1g #限制容器使用內存 memswap_limit: 2g #交換區內存 mem_reservation: 512m #預留內存
3.file.env文件用來配置環境變量
修改項目下doc\deploy\file.env
將host改為服務主機ip或虛擬機ip,active修改為(test為測試,prod為生產)
修改后將它拷貝至/root/docker/file.env下
file.env
#該文件存放於:/root/docker/file.env #虛擬機快速啟動參數 SECURITY='-Djava.security.egd=file:/dev/./urandom' #虛擬機內存初始化參數 JAVA_OPTS='-server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:CompressedClassSpaceSize=256m' #springboot激活配置與訪問配置中心參數 ACTIVE='test' #服務器內網ip或centos系統ip HOST='192.168.1.250'
4.file.sh文件也是配置環境變量
修改項目下doc\deploy\file.sh
將host改為服務主機ip或虛擬機ip,active修改為(test為測試,prod為生產)
修改后將它拷貝至/etc/profile.d/file.sh
不重啟linux情況下加載,運行命令:
source /etc/profile
設置docker-compose隨機啟動
進入/usr/lib/systemd/system目錄
cd /usr/lib/systemd/system
vim docker-compose.service
內容見項目下docker-compose.service文件,
(也可以直接將項目下docker-compose.service拷貝至/usr/lib/systemd/system /docker-compose.service)
docker-compose.service
[Unit] Description=docker-compose daemon After=docker.service [Service] Type=notify NotifyAccess=main EnvironmentFile=-/root/docker/file.env ExecStart=/usr/bin/docker-compose -f /root/docker/docker-compose.yml up -d [Install] WantedBy=multi-user.target ##[unit]配置了服務的描述,規定了在network啟動之后執行, ##[service]配置服務的啟動,停止,重啟 ##[install]配置用戶模式
然后運行
systemctl enable docker-compose.service
3 防火牆設置
開放這些端口: 9088(注冊中心),9089(配置中心),9090(網關),2375(docker)
4 虛擬機端口映射
映射這些端口(VM IP:192.168.75.143):
9088(注冊中心),9089(配置中心),9090(網關),2375(docker)
5.開啟centOS遠程ssh方便以后部署;
查看本機是否安裝SSH軟件包
[root@localhost ~]# rpm -qa | grep ssh
openssh-server-6.6.1p1-12.el7_1.x86_64
openssh-clients-6.6.1p1-12.el7_1.x86_64
libssh2-1.4.3-8.el7.x86_64
openssh-6.6.1p1-12.el7_1.x86_64
如果沒有,則需要安裝
[root@localhost /]# yum install openssh-server
第二步
開啟 SSH 服務
[root@localhost ~]# service sshd start
Redirecting to /bin/systemctl start sshd.service
查看TCP 22端口是否打開
[root@localhost ~]# netstat -ntpl | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 17816/sshd
tcp6 0 0 :::22 :::* LISTEN 17816/sshd
--------------------- 說明開啟成功.
6關閉防火牆
因為是放在虛擬機里面部署,虛擬機外面有防火牆,所以要關閉CentOS的防火牆,不然上面開的端口(9090,9089,2375…)都不能訪問,如果CentOS不是虛擬機請不要關閉防火牆。
查看centOS防火牆是否開啟(active說明開啟)
systemctl status firewalld
如果開啟了防火牆,用命令停止
systemctl stop firewalld
禁用開機防火牆啟動
systemctl disable firewalld
(再查看狀態變了)
systemctl status firewalld
設置系統自動連接網絡
/etc/sysconfig/network-scripts/ifcfg-ens33 將最后一行的onboot=no改為yes保存。