CentOS 安装 docker-compose
Posted 正怒月神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 (卸载时不检测依赖,只卸载该包)
开始安装
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
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保存。
以上是关于CentOS 安装 docker-compose的主要内容,如果未能解决你的问题,请参考以下文章