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用来等待注册中心运行才能运行别的服务)

将项目下docdeploywait.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(自动运行编排文件)

将项目下docdeploydocker-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文件用来配置环境变量

修改项目下docdeployfile.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文件也是配置环境变量

修改项目下docdeployfile.sh

 
file.sh
#该文件存放于:/etc/profile.d/file.sh
#虚拟机快速启动参数
export SECURITY='-Djava.security.egd=file:/dev/./urandom'
#虚拟机内存初始化参数
export JAVA_OPTS='-server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:CompressedClassSpaceSize=256m'
#springboot激活配置与访问配置中心参数
export ACTIVE='test'
#服务器内网ip或centos系统ip
export HOST='192.168.1.250'

将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保存。

原文地址:https://www.cnblogs.com/hanjun0612/p/14776977.html