docker容器的使用
1.docker 安装
# 1、查看安装过的docker
yum list installed | grep docker
docker.x86_64 2:1.13.1-74.git6e3bb8e.el7.centos
docker-client.x86_64 2:1.13.1-74.git6e3bb8e.el7.centos
docker-common.x86_64 2:1.13.1-74.git6e3bb8e.el7.centos
# 2、卸载docker:
sudo yum remove -y docker-ce.x86_64 docker-client.x86_64 docker-common.x86_64
# 3、删除容器镜像(不能删除就先重启):
sudo rm -rf /var/lib/docker
#安装 Docker
sudo yum install docker
# 启动docker服务
sudo systemctl start docker
首次启动会报错
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
查看docker 版本,发现只有client,没有server
解决方法:执行 vi /etc/sysconfig/selinux , 把 selinux 属性值改为disabled。然后重启系统,docker就可以启动
[root@localhost ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@localhost ~]# vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
"/etc/docker/daemon.json" 3L, 62C written
[root@localhost ~]# reboot
# 启动docker服务 ,你会发现启动成功
sudo systemctl start docker
# 查看版本,server已经有了
[root@localhost ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Experimental: false
修改镜像文件拉取地址为[ustc](https://docker.mirrors.ustc.edu.cn/) 拉取镜像快一点
[root@localhost ~]# vi /etc/docker/daemon.json
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
2.启动docker
# 开机自启
sudo systemctl enable docker
# 启动docker服务
sudo systemctl start docker
# 停止docker
sudo systemctl stop docker
3.docker的常用命令
# 查看docker中已下载的镜像
docker images
# 查看docker中已安装的容器
docker ps -a
#删除容器(83806d576f69为容器的id,上面的命令可查看)
docker rm 83806d576f69
# 停止某个正在运行的容器
docker stop 83806d576f69
# 启动某个容器
docker start 83806d576f69
# 进入名字为rmqbroker的容器
docker exec -it -u root rmqbroker /bin/bash
4.Elasticsearch 安装
# 下载镜像
docker pull elasticsearch:5.6.8
# 安装容器(9200端口(Web管理平台端口) 9300(服务默认端口))
docker run -di --name=shop_elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
宿主机中输入http://localhost:9200/
(1) 开启远程连接
上面完成安装后,es并不能正常使用,elasticsearch从5版本以后默认不开启远程连接
我们需要修改es配置开启远程连接,代码如下:
登录容器
docker exec -it shop_elasticsearch /bin/bash
查看目录结构 输入: dir
root@67d810803acc:/usr/share/elasticsearch# dir
NOTICE.txt README.textile bin config data lib logs modules plugins
进入config目录,并查看该目录下的文件
root@67d810803acc:/usr/share/elasticsearch# cd config
root@67d810803acc:/usr/share/elasticsearch/config# ls
elasticsearch.yml log4j2.properties scripts
修改elasticsearch.yml文件
root@67d810803acc:/usr/share/elasticsearch/config# vi elasticsearch.yml
bash: vi: command not found
这个错误是vi命令没有识别,我们需要安装
root@617c5d3d69f8:/usr/share/elasticsearch/config# apt-get update
root@617c5d3d69f8:/usr/share/elasticsearch/config# apt-get install vim
安装好了后,修改elasticsearch.yml配置
cluster.name: my-application
重启docker
docker restart shop_elasticsearch
# 开放端口,是windows能访问
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
(2)系统参数配置
重启后发现重启启动失败了,这时什么原因呢?这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优
[root@localhost ~]# vi /etc/security/limits.conf
#追加内容 (nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制 )
soft nofile 65536
hard nofile 65536
[root@localhost ~]# vi /etc/sysctl.conf
#追加内容 (限制一个进程可以拥有的VMA(虚拟内存区域)的数量 )
vm.max_map_count=655360
#执行下面命令 修改内核参数马上生效
[root@localhost ~]# sysctl -p
#重新启动虚拟机,再次启动容器
[root@localhost ~]# reboot
windows中输入http://192.168.43.40:9200/
(3)跨域配置
修改elasticsearch/config下的配置文件:elasticsearch.yml
#登录容器
[root@localhost ~]# docker exec -it shop_elasticsearch /bin/bash
root@617c5d3d69f8:/usr/share/elasticsearch# cd config
root@617c5d3d69f8:/usr/share/elasticsearch/config# ls
elasticsearch.yml log4j2.properties scripts
#修改elasticsearch.yml 文件
root@617c5d3d69f8:/usr/share/elasticsearch/config# vi elasticsearch.yml
增加以下三句命令
#此步为允许elasticsearch跨域访问,默认是false。
http.cors.enabled: true
#表示跨域访问允许的域名地址(*表示任意)
http.cors.allow-origin: "*"
#跨域访问的ip(设置为虚拟机ip)
network.host: 192.168.43.40
重启
docker restart shop_elasticsearch
小提示:如果想让容器开启重启,可以执行下面命令
docker update --restart=always 容器名称或者容器id
5.IK分词器安装
(1)安装ik分词器
IK分词器下载地址https://github.com/medcl/elasticsearch-analysis-ik/releases
将ik分词器上传到服务器上,然后解压,并改名字为ik
unzip elasticsearch-analysis-ik-5.6.8.zip
mv elasticsearch ik
将ik目录拷贝到docker容器的plugins目录下
docker cp ./ik shop_elasticsearch:/usr/share/elasticsearch/plugins
重启容器
docker restart shop_elasticsearch
登录容器去上述位置查看
[root@localhost ~]# docker exec -it shop_elasticsearch /bin/bash
root@617c5d3d69f8:/usr/share/elasticsearch# ls
NOTICE.txt README.textile bin config data lib logs modules plugins
root@617c5d3d69f8:/usr/share/elasticsearch# cd plugins
root@617c5d3d69f8:/usr/share/elasticsearch/plugins# ls
ik
root@617c5d3d69f8:/usr/share/elasticsearch/plugins# cd ik
root@617c5d3d69f8:/usr/share/elasticsearch/plugins/ik# ls
commons-codec-1.9.jar commons-logging-1.2.jar config elasticsearch-analysis-ik-5.6.8.jar httpclient-4.5.2.jar httpcore-4.4.4.jar plugin-descriptor.properties
(2)IK分词器测试
标准分词器
访问:http://192.168.43.40:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员
最大分词器
访问:http://192.168.43.40:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员
6.Kibana安装
#下载镜像
docker pull docker.io/kibana:5.6.8
#安装
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.43.40:9200 --name kibana --restart=always -p 5601:5601 kibana:5.6.8
ELASTICSEARCH_URL=http://192.168.43.40:9200:是指链接的ES地址
restart=always:每次服务都会重启,也就是开启启动
5601:5601:端口号
访问测试
访问http://192.168.43.40:5601
如下:
7.安装mysql-5.7.24
拉取镜像
docker pull mysql:5.7
在/etc下新建my.cnf配置文件,如果有的话先删除原来的,再加入创建新的
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
#mysql5.7以后的不兼容问题处理
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#允许最大连接数
max_connections=200
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
#设置时区
default-time_zone='+8:00'
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
运行
docker run -p 3306:3306 --privileged=true -v /usr/local/docker/mysql/logs:/logs -v /usr/local/docker/mysql/data:/var/lib/mysql -v /etc/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7
--privileged=true 获取临时的selinux的权限
-v 宿主机目录挂在到容器的地址,映射
-e MYSQL_ROOT_PASSWORD 初始化密码
开放3306端口号 firewalld 防火墙(centos-7)运行命令,并重启:
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
# firewall-cmd --reload
8.canal安装
下载镜像:
docker pull docker.io/canal/canal-server
容器安装
docker run -p 11111:11111 --name canal -d docker.io/canal/canal-server
进入容器,修改核心配置canal.properties 和instance.properties,canal.properties 是canal自身的配置,instance.properties是需要同步数据的数据库连接配置。
执行代码如下:
docker exec -it canal /bin/bash
cd canal-server/conf/
vi canal.properties
cd example/
vi instance.properties
修改canal.properties的id,不能和mysql的server-id重复,如下图:
修改instance.properties,配置数据库连接地址:
这里的canal.instance.filter.regex
有多种配置,如下:
可以参考地址如下:
https://github.com/alibaba/canal/wiki/AdminGuide
mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)
常见例子:
1. 所有表:.* or .*\\..*
2. canal schema下所有表: canal\\..*
3. canal下的以canal打头的表:canal\\.canal.*
4. canal schema下的一张表:canal.test1
5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)
开放11111端口号 firewalld 防火墙(centos-7)运行命令,并重启:
# firewall-cmd --zone=public --add-port=11111/tcp --permanent
# firewall-cmd --reload
配置完成后,设置开机启动,并记得重启canal。
docker update --restart=always canal
docker restart canal
9.redis的安装
拉取官方redis5.0镜像
docker pull redis:5.0.3
创建本机redis挂载目录
mkdir -p /root/redis/data /root/redis/conf
在/root/redis/conf目录中创建文件 redis.conf
touch redis.conf
创建redis容器
docker run -d --name redis -p 6379:6379 -v /root/redis/conf/redis.conf:/redis.conf -v /root/redis/data:/data redis:5.0.3 redis-server --appendonly yes
-d 后台运行
-p 端口映射到主机的端口
-v 将主机目录挂载到容器的目录
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
配置完成后,设置开机启动,并记得重启。
docker update --restart=always redis
docker restart redis
开放6379端口号 firewalld 防火墙(centos-7)运行命令,并重启:
# firewall-cmd --zone=public --add-port=6379/tcp --permanent
# firewall-cmd --reload
10.安装RabbitMQ
拉取镜像
#指定版本,该版本包含了web控制页面
docker pull rabbitmq:management
安装
docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
-d 后台运行容器;
--name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
配置完成后,设置开机启动,并记得重启。
docker update --restart=always rabbit
docker restart rabbit
11.安装MongoDB
拉取镜像
[root@localhost ~]# docker pull mongo
安装
[root@localhost ~]# docker run -id --name mongo -p 27017:27017 mongo
配置完成后,设置开机启动,并记得重启。
docker update --restart=always mongo
docker restart mongo
12.安装rocketmq
#拉取镜像
[root@localhost ~]# docker pull docker.io/foxiswho/rocketmq:server-4.5.1
[root@localhost ~]# docker pull docker.io/foxiswho/rocketmq:broker-4.5.1
#创建容器
[root@localhost ~]# docker run -d -p 9876:9876 --name rmqserver foxiswho/rocketmq:server-4.5.1
必须先创建如下路径的broker.conf文件
/root/data/rocketmq-4.5.1/conf/broker.conf
文件内具体内容为
brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH #此地址必须是真实地址,不能是127.0.0.1 brokerIP1 = 192.168.43.33
然后执行如下命令,创建broker容器
[root@localhost ~]# docker run -d -p 10911:10911 -p 10909:10909 -v /root/data/broker/logs:/root/logs -v /root/rocketmq/data/broker/store:/root/store -v /root/data/rocketmq-4.5.1/conf/broker.conf:/opt/rocketmq-4.5.1/conf/broker.conf --name rmqbroker --link rmqserver:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" foxiswho/rocketmq:broker-4.5.1 sh mqbroker -c /opt/rocketmq-4.5.1/conf/broker.conf
-v 真实位置和docker中位置的映射
我这里是直接以我在外部创建的broker.conf作为broker的配置文件
#前台管理工具 rocketmq-console-ng
[root@localhost ~]# docker pull pangliang/rocketmq-console-ng:latest
#创建容器,Drocketmq.namesrv.addr=192.168.43.33:9876这个地方的ip要换成自己的
[root@localhost ~]# docker run -d -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.43.33:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t pangliang/rocketmq-console-ng
完成上述步骤后,访问http://192.168.43.33:8080
配置完成后,设置开机启动,并记得重启。
docker update --restart=always rmqserver
docker restart rmqserver
docker update --restart=always rmqbroker
docker restart rmqbroker
docker update --restart=always musing_kilby
docker restart musing_kilby
``