一、docker 容器化部署企业级应用
1.1使用容器化部署企业级应用必要性
1.有利于快速实现企业级应用部署
2.有利于实现企业级应用恢复
1.2Docker 参考资料
二、docker安装部署
系统环境:CentOS7
2.1安装前准备工作
查看内核版本是否大于3.10
[jack@TEST ~]# uname -r
3.10.0-1160.102.1.el7.x86_64
查看版本系统
[jack@TEST ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
2.2安装docker 容器
安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 bash-completion
配置阿里镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#清除缓存
yum clean all
yum makecache fast
安装docker
yum install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
查看docker版本
docker version
运行hello-world 测试
docker run hello-world
如果本地没有镜像则自己拉取线上镜像并运行
查看所有镜像源
docker images
设置阿里镜像源 编辑/etc/docker/daemon.json
阿里云镜像加速可以进
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
wq
systemctl restart docker 重启服务生效
注:可以阿里云镜像加速器地址中添加源地址
开启内核转发-重要
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
2.3daemon.json 详细配置
vim /etc/docker/daemon.json
{
"data-root": "/data/docker",
"exec-root": "/var/run/docker",
"bridge": "none",
"iptables": false,
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:4243"],
"labels": [
"AlidockerMod=true"
],
"vfsconfig": "/etc/sysconfig/docker.vfsconfig",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
},
"insecure-registries" : ["aaa.com","bbb.com"],
"bip": "169.254.123.1/24",
"oom-score-adjust": -1000,
"registry-mirrors": ["https://pqbap4ya.mirror.aliyuncs.com"],
"storage-driver": "overlay2",
"storage-opts":["overlay2.override_kernel_check=true"],
"live-restore": true
}
systemctl daemon-reload && systemctl restart docker
#守护进程配置更改后,需要重启。
"data-root": "/data/docker" | 指定 Docker 存储所有运行时数据的根目录,包括镜像、容器、卷和网络等。默认情况下,这个目录位于 /var/lib/docker |
"exec-root": "/var/run/docker" | 定义 Docker 执行状态文件的存储路径,如运行中容器的网络配置。默认情况下,它通常位于 /var/run/docker |
"bridge": "none" | 告诉 Docker 不要自动创建默认的网桥接口 docker0。这通常用于自定义网络或在不需要 Docker 管理网络的情况下。 |
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:4243"] | 置 Docker 守护进程监听的接口和端口,允许通过 Unix 套接字和 TCP 端口 4243 进行通信。0.0.0.0:4243 表示接受来自任何 IP 地址的连接 |
"labels": ["AlidockerMod=true"] | 为 Docker 守护进程添加标签,可以用来标识守护进程或进行过滤 |
"exec-opts": ["native.cgroupdriver=systemd"] | 指定 Docker 使用 systemd 作为其 cgroup 驱动程序。cgroup (Control groups) 是 Linux 提供的一个特性,用于限制、记录和隔离进程组的资源使用(如 CPU、内存等)。使用 systemd 作为 cgroup 驱动程序有助于集成 Docker 和使用 systemd 的系统组件 |
"log-driver": "json-file" | 将 Docker 容器的日志记录驱动程序设置为 json-file,这意味着容器的日志将以 JSON 格式写入文件。这是 Docker 的默认日志驱动程序 |
"log-opts": { "max-size": "100m", "max-file": "10" } | 设置容器日志文件的轮转策略。"max-size": "100m" 指每个日志文件的最大大小为 100MB,达到该大小后日志文件会轮转。"max-file": "10" 指最多保留 10 个轮转后的日志文件 |
"insecure-registries" | 列出了 Docker 可以通过 HTTP 而非 HTTPS 连接的不安全镜像仓库地址。在这个例子中,给出了几个私有仓库的地址,Docker 将不会验证这些仓库的 SSL 证书。如果配置为0.0.0.0/0,信任所有地址的所有私有仓库 |
"bip": "169.254.123.1/24" | 指定 Docker 默认桥接网络 docker0 的 IP 地址和网络掩码。这个网络用于容器之间和宿主机之间的通信。 |
"oom-score-adjust": -1000 | 为 Docker 守护进程设置 OOM(内存耗尽)得分调整值。数值 -1000 表示 Docker 守护进程在内存耗尽时应该最后被杀死,以保护它的运行稳定 |
"registry-mirrors": ["https://pqbap4ya.mirror.aliyuncs.com"] | 设置 Docker 镜像拉取时使用的镜像仓库加速地址。这对于位于中国等地区的用户来说,可以提供更快的镜像下载速度 |
"storage-driver": "overlay2" | 指定 Docker 使用 overlay2 存储驱动,这是推荐的存储驱动,用于管理容器和镜像的分层文件系统。 "storage-opts":["overlay2.override_kernel_check=true"]:提供额外的存储驱动选项。在这里,它允许 overlay2 存储驱动忽略内核版本检查,这可能对于在不完全支持 overlay2 的旧内核版本上运行 Docker 是有用的 |
"live-restore": true | 启用“实时恢复”功能,允许 Docker 守护进程在更新或重启时不终止运行中的容器。这有助于减少服务中断并提高系统的可用性 |
三、使用docker部署Nginx部署
3.1获取nginx参考资料
访问官网-选择官方镜像
查看对应镜像tags 信息 及 dockerfile 信息
3.2运行Nginx应用容器
docker search nginx #查看镜像
docker run -id --name nginx-1 -p 80:80 -v /opt/nginx-1:/usr/share/nginx/html:ro nginx
#解释
--name nginx-1 定义容器名
-p 80:80 映射容器端口(后)至宿主机端口(前)
-v /opt/nginx-1:/usr/share/nginx/html:ro 挂在宿主机目录至容器目录并给与只读权限
nginx 最后为对应镜像名
docker ps 查看容器是否已正常运行
查询容器内nginx的ip地址 根据容器ID进行查询
[root@TEST nginx-1]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
228711cc16d2 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx-1
[root@TEST nginx-1]# docker inspect 228711cc16d2 |grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
curl http://172.17.0.2 验证
报403错误,原因是对应html 文件夹中是空没有对应页面文件,写入测试文件
echo "nginx is working" > /opt/nginx-1/index.html
cat /opt/nginx-1/index.html
curl http://172.17.0.2
宿主机地址验证 打开网页验证即可 宿主机为192.168.0.202 防火墙需开启对应端口
3.3最后nginx容器启动的方式
挂在两个目录,一个html,一个config
#创建目录及文件
mkdir -p /opt/nginx-1/html #目录会自动创建
#可临时运行一个nginx容器拷贝容器中的nginx.confwe文件至宿主机目录以便修改,过程略
docker cp nginx-1:/etc/nginx/nginx.conf /opt/nginx-1/nginx.conf
#启动nginx容器
docker run -id \ #后台启动
--name nginx-1 \ #容器名
-p 80:80 \ #端口映射
-v /opt/nginx-1/html:/usr/share/nginx/html:ro \ #html文件
-v /opt/nginx-1/nginx.conf:/etc/nginx/nginx.conf:ro \ #conf文件
nginx #镜像名
也可将nginx日志目录进行挂载,方便后期查看
3.4修改nginx 配置文件
验证修改配置文件后容器是否生效
worker_processes auto 目前为4个进程
user nginx;
#worker_processes auto;
worker_processes 2; #修改为2
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
四、使用docker部署Tomcat部署
4.1获取Tomcat参考资料
4.2运行Tomcat应用容器
部署jdk 部署tomcat 修改环境变量
下载镜像
docker pull tomcat:9.0
运行容器
docker run -id -p 8080:8080 --name mytomcat9.0 \
-v /opt/tomcat-server:/usr/local/tomcat/webapps/ROOT tomcat:9.0
#挂在目录/opt/tomcat-server至容器/usr/local/tomcat/webapps/ROOT中
#其中ROOT自动创建用户存放web页面
容器启动成功
查看宿主机和容器中的目录有无创建成功
写入一个页面进行测试,默认无页面提示404
echo "tomcat running" > /opt/tomcat-server/index.html
最后访问web页面验证
五、使用docker部署Mysql部署
5.1获取Tomcat参考资料
5.2部署单节点mysql
需要挂在log目录,方便查看mysql日志文件
需要挂在数据目录,方便迁移与备份
需要挂在conf目录,mysql配置文件目录
docker run -id --name mysql.5.7 -p 3306:3306 \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=password \ 设置mysql密码
mysql:5.7
数据文件保存路径查看 /opt/mysql/data
通过容器内客户端连接mysql
docker exec -it mysql.5.7 mysql -uroot -ppassword
通过宿主机客户端进行访问测试
yum -y install mariadb #安装客户端
docker inspect b76fbf8a3fa1 |grep "IPAddress" #找到mysql ip
mysql -h 192.168.0.202 -uroot -ppassword -P 3306
5.3 部署主从复制集群mysql
5.3.1mysql主节点部署
docker run -id -p 3307:3306 \
--name mysql-master \
-v /opt/mysql-master/log:/var/log/mysql \
-v /opt/mysql-master/data:/var/lib/mysql \
-v /opt/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=password \
mysql:5.7
mysql主节点配置
编辑配置文件
vim /opt/mysql-master/conf/my.cnf
cat /opt/mysql-master/conf/my.cnf
[client]
default-character-set=utf8
[mysq1]
default-character-set=utf8
[mysq1d]
init_connect='SET collation_connection = utf8_unicode_ci"
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server_id=1
1og-bin=mysql-bin #开始日志
read-only=0
bin1og-do-db=kubemsb_test #同步数据库名
replicate-ignore-db=mysq
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
:wq
5.3.2mysql从节点部署
docker run -id -p 3308:3306 \
--name mysql-slave \
-v /opt/mysql-slave/log:/var/log/mysql \
-v /opt/mysql-slave/data:/var/lib/mysql \
-v /opt/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=password \
--link mysql-master:mysql-master \ #从节点连接主节点 映射host别名
mysql:5.7
mysql从节点配置
编辑配置文件
vim /opt/mysql-slave/conf/my.cnf
cat /opt/mysql-slave/conf/my.cnf
[client]
default-character-set=utf8
[mysq1]
default-character-set=utf8
[mysq1d]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server_id=2 #修改为2
1og-bin=mysql-bin
read-only=0
bin1og-do-db=kubemsb_test #保持与主节点一致
replicate-ignore-db=mysq
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
:wq
5.3.3主从节点配置
master节点配置
进入master数据库授权
mysql -h 192.168.0.202 -uroot -ppassword -P 3307
grant replication slave on *.* to 'backup'@'%' identified by 'password';
flush privileges;
重启master节点
docker restart mysql-master
#解释
slave on *.* to 'backup'@'%'
#授权给所有库,所有主机,可指定其中需要同步的数据库
identified by 'password'
#同步认证密码
flush privileges
#刷新授权表
需要断点位置信息
show master status\G
slave节点配置
docker restart mysql-slave
mysql -h 192.168.0.202 -uroot -ppassword -P3308
MySQL [(none)]> change master to
-> master_host='mysql-master',
-> master_user='backup',
-> master_password='password',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=154,
-> master_port=3306;
启动从服务器查看状态
start slave;
show master status\G
5.3.4验证mysql集群
在master数据库中添加数据库验证slave数据库中是否同步
六、使用docker部署Oralce部署
6.1获取oracle 参考资料
6.2运行oracle容器
我们下载下图中的oracle镜像,该镜像为其他作者制作的镜像非官方源镜像
下载镜像并运行 注意cpu和内存不能给的过于小 2核4G以上
docker pull oracleinanutshell/oracle-xe-11g
docker run -h oracle --name oracle -d -p 49160:22 -p 49161:1521 -p 49162:8080 oracleinanutshell/oracle-xe-11g
#说明
-h 设置容器主机名
49160 ssh端口
49161 sqlplus端口
49162 oem端口
oracle连接参数
port:49161
sid:xe
username:oracle
password:oracle
SYS密码:oracle
下载oracle 连接工具测试
七、使用docker部署ElasticSearch+Kibaba部署
7.1获取参考资料
ElasticSearch
注意ElasticSearch版本 7.17.0 用的最多
Kibaba
Kibaba版本需与ElasticSearch版本一致
7.2ElasticSearch应用部署
相关前置配置
mkdir -p /opt/es/config
mkdir -p /opt/es/data
chmod -R 777 /opt/es
下载镜像并运行
docker pull elasticsearch:7.17.0
#运行容器
docker run --name es -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/es/data:/usr/share/elasticsearch/data \
-v /opt/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.17.0
#解释
-e "discovery.type=single-node" \ 单节点部署
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \ 设置启动内存范围
-v /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ 挂在配置文件
-v /opt/es/data:/usr/share/elasticsearch/data \ 挂在数据目录
-v /opt/es/plugins:/usr/share/elasticsearch/plugins \ 挂在插件目录
写入配置信息
echo "http.host:0.0.0.0">>/opt/es/config/elasticsearch.yml
docker restart es
验证
7.3Kibana应用部署
下载镜像并运行
docker pull kibana:7.17.0
docker run -d --name kibana \
-e ELASTICSEARCH_HOSTS=http://192.168.0.202:9200 \
-p 5601:5601 kibana:7.17.0
如部署报错可查看日志纠错
docke logs ID/
八、使用docker部署Redis部署
8.1获取参考资料
8.2运行单节点redis
下载镜像及运行
#创建配置文件目录
mkdir -p /opt/redis/conf
touch /opt/redis/conf/redis.conf
#下载镜像
docker pull redis
#运行容器
docker run --name redis -p 6379:6379 \
-v /opt/redis/data:/data \
-v /opt/redis/conf:/etc/redis \
-d redis redis-server /etc/redis/redis.conf
#解释
-v /opt/redis/data:/data \ 挂在数据目录
-v /opt/redis/conf:/etc/redis \ 挂在redis 配置目录
-d redis redis-server /etc/redis/redis.conf
运行redis镜像中的redis-server 并从/etc/redis/redis.conf读取配置信息
验证部署
docker验证 先查询容器内redis IP地址
docker inspect redis
docker run -it redis:latest redis-cli -h 172.17.0.4
也可在物理机中安装redis后进行远程连接
yum -y install redis
redis-cli -h 192.168.0.202 -p 6379
8.3部署集群redis
安装redis-cluster;3主3从方式,从为了同步备份,主进行slot数据分片
编辑脚本文件
for port in $(seq 8001 8006); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.202
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
EOF
docker run -p ${port}:${port} -p 1${port}:1${port} --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d redis:5.0.7 redis-server /etc/redis/redis.conf; \
done
#解释
for port in $(seq 8001 8006);
6个redis 创建6个端口 8001-8006
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
#创建6个配置目录保存redis配置
cat << E0F>/mydata/redis/node-${port}/conf/redis.conf
port ${port}
#每个redis端口
cluster-enabled yes
#每个redis集群模式
cluster-config-file nodes.conf
#配置文件名字
cluster-node-timeout 5000
#每个redis timeout时间
cluster-announce-ip 192.168.0.202 #宿主机地址
cluster-announce-port ${iport}
#对外声明的IP地址及端口
cluster-announce-bus-port 1${port}
appendonly yes
EOF
docker run -p ${port}:${port} -p 1${port}:1${port} --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d redis:5.0.7 redis-server /etc/redis/redis.conf; \
done
循环6次 创建6个redis
首先登录其中一个集群-redis-8001
docker exec -it reedis-8001 bash
创建redis-cluster 集群
redis-cli --cluster create 192.168.0.202:8001 192.168.0.202:8002 192.168.0.202:8003 192.168.0.202:8004 192.168.0.202:8005 192.168.0.202:8006 --cluster-replicas 1
配置方式 3主3从 分别对应6个redis容器
接受此配置方式 输入 yes即可创建成功
访问redis 集群
redis-cli -h 192.168.0.202 -p 8001 -c
访问集群redis 需要加 -c
九、使用docker部署RabbitMQ部署
9.1获取参考资料
选择带有management的镜像
9.2部署rabbitmq
本次部署带有管理控制台的rabitmq
docker run -d --name rabbitmq \
-p 5671:5671 -p 5672:5672 -p 25672:25672 -p 15671:15671 -p 15672:15672 \
-v /opt/rabbitmq:/var/lib/rabbitmq rabbitmq:management
#说明
4369,25672(Erlang发现和集群端口)
5672,5671(AMQP端口)
15672(web管理端口)
61613,61614(STOMP协议端口)
1883,8883(MQTT协议端口)
默认用户密码