CentOS 安装 docker-compose
部署环境搭建
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保存。