企业开发进阶-5-DockerInstall
安装 Docker
安装 Docker
安装步骤
确定机器是CentOS7及以上版本
1
cat /etc/redhat-release
卸载旧版本
1
2
3
4
5
6
7
8sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engineyum安装gcc
1
2yum -y install gcc
yum -y install gcc-c++Set up the repository
1
yum install -y yum-utils
设置镜像仓库
1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
1
yum makecache fast
Install Docker Engine
1
yum -y install docker-ce docker-ce-cli containerd.io
启动docker
1
2systemctl start docker
ps -ef | grep docker测试Docker
1
2
3docker version
docker run hello-world卸载Docker
1
2
3
4
5
6
7systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
配置阿里云镜像加速
登录阿里云
进入控制台,选择 容器镜像服务,在镜像根据栏目下选择镜像加速器
1
2
3
4
5
6
7
8mkdir -p /etc/docker
cd /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://djimxgok.mirror.aliyuncs.com"]
}
EOF重启服务
1
2systemctl daemon-reload
systemctl restart docker测试
1
docker run hello-world
run发生了什么
Docker 常规安装
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像:服务端口映射
- 停止容器
- 移除容器
安装 Tomcat
docker hub上面查找tomcat镜像
1 | docker search tomcat |
从docker hub上拉取tomcat镜像到本地
1 | docker pull tomcat |
docker images查看是否有拉取到的tomcat
1 | docker images tomcat |
使用tomcat镜像创建容器实例(也叫运行镜像)
1 | # 交互运行 |
- -p 小写,主机端口:docker容器端口
- -P 大写,随机分配端口
- i:交互
- t:终端
- d:后台
访问tomcat首页出现404
- 可能没有映射端口或者没有关闭防火墙
- 把webapps.dist目录换成webapps(启动tomcat后查看webapps为空)
1 | [root@cyan ~]# docker ps |
1 | root@0b15077c9db2:/usr/local/tomcat# rm -r webapps |
最后访问http://47.113.217.195:8080/,成功访问Tomcat
免修改版说明
1 | [root@cyan ~]# docker ps |
1 | docker pull billygoo/tomcat8-jdk8 |
安装MySQL
1 | # 先查看服务器有没有mysql |
docker hub 查找镜像
1 | docker search mysql |
拉取镜像
1 | docker pull mysql:5.7 |
使用镜像创建容器
简单版本
1 | docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 |
问题描述:
- docker中字符编码全是latin
- 容器删除后数据将消失,存在隐患
实战版本
新建mysql容器实例
1 | docker run -d -p 3306:3306 --privileged=true -v /temp/mysql/log:/var/log/mysql -v /temp/mysql/data:/var/lib/mysql -v /temp/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7 |
新建my.cnf
通过容器卷同步给mysql容器实例
1 | [client] |
重新启动mysql容器实例再重新进入并查看字符编码
1 | dcoker restart mysql |
安装Redis
从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
1 | docker pull redis:6.0.8 |
入门命令
1 | docker run -d -p 6379:6379 redis:6.0.8 |
命令提醒:容器卷记得加入—privileged=true
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个—privileged=true参数即可
在CentOS宿主机下新建目录/app/redis
1 | mkdir -p /app/redis |
将一个redis.conf文件模板拷贝进/app/redis目录下
/app/redis目录下修改redis.conf文件:开启redis验证 可选requirepass root
允许redis外地连接 必须注释掉 # bind 127.0.0.1
daemonize no:将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
开启redis数据持久化 appendonly yes 可选
使用redis6.0.8镜像创建容器(也叫运行镜像)
1 | docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf |
测试redis-cli连接
1 | docker exec -it 运行着Rediis服务的容器ID redis-cli |
Docker 复杂安装
MySQL主从复制安装
Redis集群安装
Docker轻量级可视化工具Portainer
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
1 | docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer |
- 第一次登录需创建admin,访问地址:xxx.xxx.xxx.xxx:9000
设置admin用户和密码后首次登陆
选择local选项卡后本地docker详细信息展示
Docker容器监控 CAdvisor+InfluxDB+Granfana
原生命令
1 | docker stats |
通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,但是,docker stats统计结果只能是当前宿主机的全部容器,数据资料是实时的,没有地方存储、没有健康指标过线预警等功能
CIG
CAdvisor监控收集+InfluxDB存储数据+Granfana展示图表
CAdvisor
CAdvisor是一个容器资源监控工具,包括容器的内存、CPU、网络IO、磁盘IO等监控,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机。不过,CAdvisor提供了很多数据集成接口,支InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。
CAdvisor功能主要有两点:
- 展示Host和容器两个层次的监控数据
- 展示历史变化数据。
InfluxDB
InfluxDB是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。
CAdvisor默认只在本机保存最近2分钟的数据,为了持久化存储数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor的数据。而且CAdvisor本身已经提供了InfluxDB的集成方法,丰启动容器时指定配置即可。
lnfluxDB主要功能:
- 基于时间序列,支持与时间有关的相关函数(如最大、最小、求和等)
- 可度量性:你可以实时对大量数据进行计算;
- 基于事件:它支持任意的事件数据;
Granfana
Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置(支持的数据源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和丰富的插件及模板功能,支持图表权限控制和报警。
Grafan主要特性
- 灵活丰富的图形化选项
- 可以混合多种风格
- 支持白天和夜间模式
- 多个数据源
实战
新建docker-compose.yml
1 | version: '3.1' |
1 | docker-compose config -q |
启动docker-compose文件
1 | docker-compose up |
查看服务是否启动
1 | docker ps |
测试
浏览cAdvisor收集服务,http://ip:8080/
浏览influxdb存储服务,http://ip:8083/
- 浏览grafana展现服务,http://ip:3000