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/

docker 容器安装多个应用 docker容器内安装软件_docker 容器安装多个应用

(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配置

docker 容器安装多个应用 docker容器内安装软件_elasticsearch_02

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/

docker 容器安装多个应用 docker容器内安装软件_elasticsearch_03

(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=我是程序员

docker 容器安装多个应用 docker容器内安装软件_docker_04

最大分词器

访问:http://192.168.43.40:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员

docker 容器安装多个应用 docker容器内安装软件_docker 容器安装多个应用_05

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如下:

docker 容器安装多个应用 docker容器内安装软件_elasticsearch_06

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重复,如下图:

docker 容器安装多个应用 docker容器内安装软件_java_07

修改instance.properties,配置数据库连接地址:

docker 容器安装多个应用 docker容器内安装软件_mysql_08

这里的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 容器安装多个应用 docker容器内安装软件_java_09


配置完成后,设置开机启动,并记得重启。

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

``