Docker安装配置及使用命令
虚拟机用户:root,密码:1234
Mysql账户:root,密码:root
服务器的ip和密码:
IP:47.120.0.222
用户:root
密码:H开头的最长密码
安装CentOS
安装VMware虚拟机,随便找个教程即可
下载CentOS7 64位界面,推荐无GUI的简洁版
查看Linux防火墙
查看防火墙状态:systemctl status firewalld
开启防火墙:systemctl start firewalld
关闭防火墙:systemctl stop firewalld
开启防火墙:service firewalld start
开机禁止启动防火墙:systemctl disable firewalld.service
开机允许启动防火墙:systemctl unmask firewalld.service
、systemctl start firewalld.service
设置某个服务开机自启动:systemctl enable [...]
查看Linux端口是否对外开放
1、查询已经对外开放的端口:netstat -anp
2、查看防火墙所有开放的端口:firewall-cmd --zone=public --list-ports
3、查询指定端口是否已经开放:firewall-cmd --query-port=8848/tcp
返回yes/no。此时也有可能返回firewalld is not running,此时需要打开防火墙在开放端口。
开放Linux某个端口
添加指定需要开放的端口:firewall-cmd --add-port=8848/tcp --permanent
重载入添加的端口,配置立即生效:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=8848/tcp
解决Windows端口占用
查看占用端口的进程号
1 | netstat -ano | findstr '被占用的端口号' |
根据进程号
杀掉占用的进程
1 | taskkill /F /PID '进程号' |
安装Docker
卸载系统之前的 docker
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-engine安装 Docker-CE
安装必须的依赖
1
2
3sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2设置 docker repo 的 yum 位置
1
2
3sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo安装 docker,以及 docker-cli
1
sudo yum install docker-ce docker-ce-cli containerd.io
启动Docker
1
sudo systemctl start docker
设置Docker开机自启
1
sudo systemctl enable docker
配置镜像加速(Ubuntu、CentOS)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://uf5mphyd.mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerDocker中文文档
[docker 中文文档](docker 中文文档 | 简果网 (simapple.com))
Docker常用命令
镜像
拉取镜像
1 | docker pull [image]:[version] |
查看下载的镜像
1 | docker images |
本地加载镜像压缩包
1 | docker load -i [saved_image].tar |
保存镜像
1 | docker save -o [saved_image].tar [image]:[version] |
推送镜像
1 | docker push |
构建镜像
1 | docker build |
删除镜像
1 | docker rmi [image] |
容器
第一次运行容器时,运行以下命令构建容器
1 | docker run \ |
启动容器
1 | docker start [container] |
重启容器
1 | docker restart [container] |
停止容器
1 | docker stop [container] |
强制停止容器
1 | docker kill [container] |
删除容器
1 | docker rm (-f) [container] |
暂停容器
1 | docker pause [container] |
恢复容器
1 | docker unpause [container] |
查看容器的详细信息
1 | docker inspect [container] |
查看docker中正在运行的容器
1 | docker ps (-a) |
查看容器的日志(跟随刷新)
1 | docker logs [container] (-f) |
容器内部
在容器中执行命令
1 | docker exec [...] |
进入容器文件系统
1 | docker exec -it [container] /bin/bash |
查看容器的端口映射
1 | docker port [container] |
port/tcp
表示容器内部的端口号和协议类型;0.0.0.0:port1->port2/tcp
表示将主机的port1端口映射到容器内部的port2端口,0.0.0.0
表示监听所有的网络接口,:::
表示监听所有的IPv6网络接口。
设置容器的自动启动
1 | sudo docker update [container] --restart=always |
数据卷
创建数据卷
1 | docker volume create [volume] |
查看所有数据卷
1 | docker volume ls |
查看数据卷的详细信息
1 | docker volume inspect [volume] |
删除数据卷
1 | docker volume rm [volume] |
删除未使用的数据卷
1 | docker volume prune [volume] |
构建镜像
1 | docker build -t [image]:[version] ./[uri_dockerfile] |
uri_dockerfile目录下必须包含”DockerFile”和”Dockerfile中需要的文件”
部署微服务集群
在docker-compose.yml中配置好
1 | docker-compose up -d |
部署Portainer
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
拉取Portainer镜像
英文版:
1 | docker pull portainer/portainer-ce |
汉化版
1 | docker pull 6053537/portainer-ce |
创建实例并启动
1 | docker run -d --restart=always --name=portainer -p 9:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce |
Portainer的默认账号和密码是:admin/admin,第一次进入需要创建用户,同时会提示你修改密码
部署Mysql 5.7
下载mysql5.7镜像文件
1 | docker pull mysql:5.7 |
创建实例并启动
(Mysql5.7)(存在问题,暂未解决)
1 | docker run \ |
参数说明:
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
配置mysql
1 | vi /mydata/mysql/conf/my.cnf |
适合Mysql5.7
1 | [mysqld] |
进入容器的mysql命令行
1 | docker exec -it mysql mysql -uroot -proot |
设置远程访问
1 | grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; |
部署Mysql 8
1 | docker run \ |
参数说明:
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
配置mysql
1 | vi /mydata/mysql/conf/my.cnf |
适合Mysql8
1 | [mysqld] |
进入容器的mysql命令行
1 | docker exec -it mysql mysql -uroot -proot |
设置远程访问
1 | grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; |
部署Redis
下载最新的镜像
1 | docker pull redis |
创建实例并启动
1 | mkdir -p /mydata/redis/conf |
1 | touch /mydata/redis/conf/redis.conf |
1 | docker run -p 6379:6379 --name redis --restart=always \ |
参数说明:
-p 6379:6379
:将容器的 6379 端口映射到Linux机的 6379 端口-v /mydata/redis/data:/data
:将redis数据库挂载到主机-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
:将配置文件夹挂载到主机-d redis redis-server /etc/redis/redis.conf
:使用redis-server命令将使用配置运行
1 | mkdir -p /mydata/redis2/conf |
参数说明:
-p 6380:6379
:将容器的 6379 端口映射到Linux机的 6380 端口
1 | mkdir -p /mydata/redis3/conf |
使用redis镜像执行redis-cli命令连接
1 | docker exec -it redis redis-cli |
或 进入部署的redis命令行
1 | docker exec -it redis redis-cli |
Redis配置文件需要修改的项
1 | 注释掉这部分,不限制redis只能本地访问 |
Redis持久化的RDB和AOF对比
RDB | AOF | |
---|---|---|
持久化方式 | 定时对整个内存做快照 | 记录每一次执行的命令 |
数据完整性 | 不完整,两次备份之间会丢失 | 相对完整,取决于刷盘策略 |
文件大小 | 会有压缩,文件体积小 | 记录命令,文件体积很大 |
宕机恢复速度 | 很快 | 慢 |
数据恢复优先级 | 低,因为数据完整性不如AOF | 高,因为数据完整性更高 |
系统资源占用 | 高,大量CPU和内存消耗 | 低,主要占用磁盘IO资源,且重写时会占用大量CPU资源和内存资源 |
使用场景 | 可以容忍数分钟的数据丢失,追求更快的启动速度 | 对数据安全性要求较高 |
配置Redis主从关系
1、用Docker部署好三台Redis
主机redis,ip地址:192.168.113.132:6379
从机redis2,ip地址:192.168.113.132:6380
从机redis3,ip地址:192.168.113.132:6381
2 在从机上配置主机ip
进入redis2容器内部,配置主机ip
1 | docker exec -it redis2 bash |
1 | redis-cli |
1 | slaveof 192.168.113.132 6379 |
另一个从机重复以上步骤:
1 | docker exec -it redis3 bash |
1 | redis-cli |
1 | slaveof 192.168.113.132 6379 |
3、在主机上查看主从配置结果
1 | info replication |
至此,Redis主从配置就好了!比单独部署更方便!
4、 主从数据同步原理
全量同步的流程
- slave节点请求增量同步
- master节点判断replid,发现不一致,拒绝增量同步
- master将完整内存数据生成RDB,发送RDB到slave
- slave清空本地数据,加载master的RDB
- master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
- slave执行接收到的命令,保持与master之间的同步
增量同步的流程
master节点和slave节点中维护了一个环形数组(前文提到的repl_baklog)和一个指针为offset。
slave来申请增量同步,带着replid和offset,然后master根据获取offset之后的数据,将其发送给slave,slave进行同步。
- 此时会出现一个问题,当slave下限太久时,master中存储的数据已经超过了这个repl_baklog的上线,因此就需要重新进行全量同步。
部署nacos
Windows下启动nacos
下载nacos安装包:https://github.com/alibaba/nacos/releases
解压,进入bin目录下创建一个.bat文件,以后启动就双击这个.bat文件
my_startup.bat:目录路径\nacos\bin\startup.cmd -m standalone
正常的启动命令是:startup.cmd -m standalone
Linux下安装nacos(稍麻烦)
先远程连接服务器数据库,创建nacos数据库
1 | CREATE database if NOT EXISTS `nacos_config` default character set utf8mb4 collate utf8mb4_unicode_ci; |
拉取对应的镜像文件
1 | docker pull nacos/nacos-server |
挂载目录
1 | mkdir -p /mydata/nacos/data/ |
修改nacos配置文件
1 | vi /mydata/nacos/init.d/custom.properties |
1 | server.contextPath=/nacos |
启动nacos容器:
1 | docker run \ |
(排错用)进入nacos容器编辑配置文件
1 | docker exec -it nacos bash |
此时nacos容器就安装成功了可以打开浏览器进行登录:
1 | https://192.168.113.132:8848/nacos |
1 | 账号:nacos |
最后设置nacos自启动:
1 | docker update --restart=always nacos |
部署RabbitMQ
拉取镜像
1 | docker pull rabbitmq:3-management |
或本地加载
1 | docker load -i mq.tar |
启动MQ
-e RABBITMQ_DEFAULT_USER=itcast \ 后台管理界面的用户名、密码
-e RABBITMQ_DEFAULT_PASS=123321
-p 15672:15672 \ 后台管理界面的端口
-p 5672:5672 \ 消息通信的端口
1 | docker run \ |
部署elasticsearch
es与mysql的概念名词对比
es的mapping属性解析
本地安装es
拉取/加载镜像
1 | docker load -i es.tar |
运行docker命令,部署单点es:
命令解释: - `-e "cluster.name=es-docker-cluster"`:设置集群名称 - `-e "http.host=0.0.0.0"`:监听的地址,可以外网访问 - `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小 - `-e "discovery.type=single-node"`:非集群模式 - `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定es的数据目录 - `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定es的日志目录 - `-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定es的插件目录 - `--privileged`:授予逻辑卷访问权 - `--network es-net` :加入一个名为es-net的网络中 - `-p 9200:9200`:暴露给http的端口 - `-p 9300:9300`:暴露给其他节点互联的端口
1 | docker run -d \ |
在浏览器中输入:http://192.168.113.132:9200 即可看到elasticsearch的响应结果
在线安装es
拉取镜像
1 | docker pull elasticsearch:7.4.0 |
创建容器
1 | docker run -id --name elasticsearch -d \ |
配置IK分词器(与上文中的usr/share/elasticsearch/plugins
保持一致)
1 | 切换目录 |
安装IK分词器
在线安装
1 | 进入容器内部 |
离线安装
查看elasticsearch的数据卷目录
1 | docker volume inspect es-plugins |
显示结果:
1 | [ |
将ik文件夹上传到/var/lib/docker/volumes/es-plugins/_data
目录下
重启容器
1 | docker restart es |
查看日志,发现加载ik插件,就说明安装成功了
1 | docker logs -f es |
测试IK分词器
ik_smart
:最少切分ik_max_word
:最细切分
1 | GET /_analyze |
扩展词词典 && 停用词词典
前往/var/lib/docker/volumes/es-plugins/_data/ik/config
目录下,编辑IKAnalyzer.cfg.xml
文件,添加扩展词词典ext.dic
和停用词词典stop.dic
注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑
重启elasticsearch和kibana
1 | docker restart elasticsearch |
查看日志,发现日志中已经成功加载ext.dic和stop.dic配置文件
1 | docker logs -f es |
部署kibana(可视化管理es)
创建网络
需要让es和kibana容器互联,因此需要创建一个网络
1 | docker network create es-net |
拉取/加载镜像
1 | docker load -i kibana.tar |
部署kibana
--network es-net
:加入一个名为es-net的网络中,与elasticsearch在同一个网络中-e ELASTICSEARCH_HOSTS=http://es:9200"
:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch-p 5601:5601
:端口映射配置
1 | docker run -d \ |
此时,在浏览器输入地址访问:http://192.168.113.132:5601,即可看到结果
部署nginx
nginx命令
开启服务:
start nginx
直接点击Nginx目录下的nginx.exe快速停止服务:
nginx -s stop
重启服务:
nginx -s reload
有序停止服务:
nginx -s quit
其他命令重启、关闭nginx:
ps -ef | grep nginx
强制停止Nginx:
pkill -9 nginx
从容停止Nginx:
kill -QUIT 主进程号
快速停止Nginx:
kill -TERM 主进程号
平滑重启nginx:
kill -HUP 主进程号
拉取镜像
1 | docker pull nginx |
简单上手
1 | docker run --restart=always --name=nginx -p 80:80 -d nginx |
创建数据卷文件
1 | mkdir /mydata/nginx/conf/ |
1 | mkdir /mydata/nginx/conf.d/ |
1 | mkdir /mydata/nginx/log/ |
1 | mkdir /mydata/nginx/html/ |
1 | mkdir /mydata/nginx/conf/leadnews/ |
创建容器
1 | docker run \ |
需要手写挂载的数据卷
/etc/nginx/nginx.conf
1 | user nginx; |
/etc/nginx/conf.d/default.conf
1 | server { |
自定义配置文件
1 | upstream heima-app-gateway{ |
部署minio
拉取镜像
1 | docker pull minio/minio |
创建容器(minio端口默认是9000,但是会和Portainer端口冲突,所以这里改成了9100)
现在需要增加额外一个端口号用于web管理 –console-address “:9090” ;API管理地址 –console-address “:9000”
1 | docker run -d \ |
web管理地址:http://192.168.113.132:9001/
API管理地址:http://192.168.113.132:9100/
安装1Panel管理工具
建议内存不低于4G安装此工具,如果内存2G会很卡
安装步骤参考文档:
1Panel文档
:https://1panel.cn/docs/installation/online_installation/
我在虚拟机里安装了,非常简单,结果如下:
辣位大人的语音合成器
拉取镜像
1 | docker pull xijinping615/xi-jinping-tts |
运行容器
1 | docker run --rm -it -p 8501:8501 xijinping615/xi-jinping-tts |
然后在浏览器中打开:http://192.168.113.132:8501/
部署zookeeper、kafka
拉取zookeeper
镜像
1 | docker pull zookeeper:3.4.14 |
创建zookeeper
容器
1 | docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14 |
拉取kafka
镜像
1 | docker pull wurstmeister/kafka:2.12-2.3.1 |
创建kafka
容器
1 | docker run -d --name kafka \ |
如果是云主机,需要把--net=host
改成-p 9092:9092
(个人未验证过)
部署MongoDB
拉取镜像
1 | docker pull mongo |
创建容器
1 | docker run -di --name mongo-service --restart=always -p 27017:27017 -v ~/data/mongodata:/data mongo |
yml配置
1 | server: |
nacos依赖