Docker安装与简单使用

一. CentOS7 安装docker  

0、安装gcc环境    https://docs.docker.com/engine/
yum -y install gcc
yum -y install gcc-c++
1、卸载docker旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、安装依赖 docker依赖于系统的一些必要的工具,可以提前安装。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3、添加软件源 镜像仓库地址为阿里云(DockerHub在国外太慢)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装docker-ce
yum makecache fast -- 更新yum软件包索引
sudo yum install docker-ce docker-ce-cli containerd.io
-- 列出并排序存储库中可用的版本
yum list docker-ce --showduplicates | sort -r
-- 通过其完整的软件包名称安装特定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

5、启动服务 通过systemctl启动服务
sudo systemctl start docker | service docker start

6、查看安装版本
sudo docker version

7、通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
sudo docker run hello-world

8、添加docker镜像加速
vim /etc/docker/daemon.json -- 该文件需要修改或者新增 https://4817kh0e.mirror.aliyuncs.com 个人阿里镜像加速器地址
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://4817kh0e.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
或者使用如下配置
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
]
}
重启docker服务 :service docker restart
启动docker服务 :service docker start
停止docker服务 :service docker stop

二. docker 安装MySQL5.7

1、拉取镜像文件
docker search mysql //搜索mysql镜像仓库
docker pull mysql:5.7 //拉取mysql镜像
docker images //查看所有镜像

2、docker启动mysql5.7 --当前机器上部署有mysql
方式一: docker run --name mysql5.7 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
方式二: docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

命令说明:
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v $PWD/conf:/etc/mysql/conf.d:将主机当前路径下的conf目录挂载到容器的/etc/mysql/conf.d目录
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
--lower_case_table_names=1 设置表名参数名等忽略大小写
-v /etc/localtime:/etc/localtime:ro   设置容器的时间与宿主机同步

三. docker 安装单机版zookeeper+Kafka+Kafka Manager

1. docker安装zookeeper
1>. 拉取zookeeper的镜像
docker pull wurstmeister/zookeeper
2>. 查看拉取成功的镜像
     docker images
3>. 安装zookeeper
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
4>. 启动zookeeper
docker start zookeeper
5>. 查看zookeeper日志
docker logs -f zookeeper
6>. 远程连接zookeeper验证
zkCli.cmd -server 101.101.101.101:2181

2. docker安装kafka+kafka manager
1>. 拉取镜像
# kafka镜像
docker pull wurstmeister/kafka
# kafka管理镜像
docker pull sheepkiller/kafka-manager
2>. 查看拉取成功的镜像
docker images
3>. 安装kafka
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=101.101.101.101 \
--env KAFKA_ZOOKEEPER_CONNECT=101.101.101.101:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://101.101.101.101:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms128M" \
--net=host wurstmeister/kafka

1、101.101.101.101是宿主机ip 修改成自己服务器ip地址
2、--net=host 表示使用与宿主机网络模式
4>. 启动kafka
docker kafka start
5>. 查看kafka日志
docker logs kafka
6>. 验证kafka,进入kafka容器
docker exec -it kafka /bin/bash
cd /opt/kafka_2.12-2.2.0/bin/
7>. kafka-manager安装
docker run -d --name kafka-manager -e ZK_HOSTS="101.101.101.101:2181" --net=host sheepkiller/kafka-manager
firewall-cmd --add-port=9000/tcp
访问:http://101.101.101.101:9000,并添加一个cluster即可

四. docker 安装ActiveMQ

1. 搜索activeMQ的docker镜像库<目前没有官方制作的docker镜像>
[root@VM-16-13-centos ~]# docker search activemq
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
webcenter/activemq ActiveMQ 5.14.3 with OpenJDK-jre-8-headless … 175 [OK]
rmohr/activemq Various versions of ActiveMQ neatly packet i… 128 [OK]
vromero/activemq-artemis ActiveMQ Artemis image (Debian and Alpine ba… 30 [OK]
cloudesire/activemq Latest activemq 5 [OK]
andreptb/activemq Debian Jessie based image with ActiveMQ inst… 3

2. 选取一个stars最多的镜像拉取下来,默认使用最新版本即可
[root@VM-16-13-centos ~]# docker pull webcenter/activemq
Using default tag: latest

latest: Pulling from webcenter/activemq
7dcf5a444392: Pull complete
9eebba75a87f: Pull complete
1f0440d87cc7: Pull complete
dacd0555c1b4: Pull complete
b0f19aa05a94: Pull complete
4796f64423b2: Pull complete
5d994b710cb9: Pull complete
313a84c05d3c: Pull complete
1d6a562461f1: Pull complete
e25558998b21: Pull complete
1423ae5a1b0b: Pull complete
8d4e082d1ca6: Pull complete
098d68aaa4ae: Pull complete
Digest: sha256:35015988c4047a2ab1888466f5aae30420f7addde4c467e5db9ae64eea6b47b0
Status: Downloaded newer image for webcenter/activemq:latest
docker.io/webcenter/activemq:latest

3. 查看下载的所有docker镜像
[root@VM-16-13-centos ~]# clear
[root@VM-16-13-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
webcenter/activemq latest 3af156432993 3 years ago 422MB

4. 启动activeMQ 镜像
[root@VM-16-13-centos ~]# docker run -d --name activemq -p 61617:61616 -p 8162:8161 webcenter/activemq
e464bb882c939fe1bd3f6cd33f83fdeba6f85816dafa1154657176e7b11ddcc8

* PS: 61616是 activemq 的容器使用端口(映射为61617)
8161是 web 页面管理端口(对外映射为8162)
避免与安装在当前Linux服务器上的ActiveMQ端口冲突

5. 检查是否启动成功
[root@VM-16-13-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e464bb882c93 webcenter/activemq "/app/run.sh" 5 seconds ago Up 3 seconds 1883/tcp, 5672/tcp, 61613-61614/tcp, 0.0.0.0:8162->8161/tcp, 0.0.0.0:61617->61616/tcp activemq

5. 查看activeMQ日志
[root@VM-16-13-centos ~]# docker logs activemq
2020-11-26 07:39:08,532 CRIT Supervisor running as root (no user in config file)
2020-11-26 07:39:08,532 WARN Included extra file "/etc/supervisor/conf.d/activemq.conf" during parsing
2020-11-26 07:39:08,532 WARN Included extra file "/etc/supervisor/conf.d/cron.conf" during parsing
2020-11-26 07:39:08,538 INFO RPC interface 'supervisor' initialized
2020-11-26 07:39:08,538 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2020-11-26 07:39:08,538 INFO supervisord started with pid 1
2020-11-26 07:39:09,541 INFO spawned: 'cron' with pid 15
2020-11-26 07:39:09,542 INFO spawned: 'activemq' with pid 16
2020-11-26 07:39:10,717 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-11-26 07:39:10,717 INFO success: activemq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

6. 进入activemq容器操作|退出操作
[root@VM-16-13-centos ~]# docker exec -it activemq /bin/bash
root@e464bb882c93:/opt/activemq# ls
LICENSE NOTICE README.txt activemq-all-5.14.3.jar bin conf conf.tmp data docs examples lib tmp webapps webapps-demo
root@e464bb882c93:/opt/activemq# exit
exit
[root@VM-16-13-centos ~]#

7. activemq添加用户
[root@VM-16-13-centos ~]# docker exec -it activemq /bin/bash
root@e464bb882c93:/opt/activemq# ls
LICENSE NOTICE README.txt activemq-all-5.14.3.jar bin conf conf.tmp data docs examples lib tmp webapps webapps-demo
root@e464bb882c93: vi /config/jetty-realm.properties
最后一行添加 dyg:dyg,admin 用户名:密码,角色
root@e464bb882c93: exit
[root@VM-16-13-centos ~]# docker restart activemq

8. 访问activemq的管理控制界面
http://101.101.101.101:8162/admin/
ps: 101.101.101.101 修改成自己服务器ip地址

五. docker 安装Redis 

1. 获取 redis 镜像
docker pull redis
* 不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源
2. 查看本地镜像
docker images
3. docker 启动 redis 命令
docker run -itd --name redis-test -p 6379:6379 redis
命令解释说明:
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
--name myredis 指定该容器名称,查看和进行操作都比较方便。
-d redis 表示后台启动redis
appendonly yes 开启redis 持久化
4. 检查服务是否安装成功
docker ps
5. 进入容器内部操作
docker exec -it redis-test /bin/bash
6. 上面讲到的是 链接redis 没有密码,但是一般我们会用到密码所以设置密码 可以用以下命令
docker run -d -p 6379:6379 -v $PWD/data:/data -d --name redis-server redis --appendonly yes --requirepass "root"
注释:
-p 6379:6379 => 映射端口6379
-v $PWD/data:/data => 将主机中当前目录下的data挂载到容器的/data
--name redis-server =>容器别名
--requirepass "root" => 设置密码为root
--appendonly yes => 启用AOF持久化方式,设置为no重启数据不会保存进入容器内部测试
进入容器: docker exec -it redis-server /bin/bash
连接redis: redis-cli

登录redis: auth root
测试redis: set test 1

六. docker 安装RocketMQ

1、rocketMQ安装
  (1)安装NameSrv
1、创建nameSrv数据挂载文件夹
   mkdir -p /usr/data/rocketMQ/data/namesrv/logs
   mkdir -p /usr/data/rocketMQ/data/namesrv/store
2、拉取镜像
docker pull rocketmqinc/rocketmq:4.4.0
3、运行NameSrv新容器
docker run -d -p 9876:9876 -v /usr/data/rocketMQ/data/namesrv/logs:/root/logs \
-v /usr/data/rocketMQ/data/namesrv/store:/root/store --name rmqnamesrv \
-e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
(2)安装broker
1、创建broker配置文件挂载文件夹
mkdir -p /usr/data/rocketMQ/data/broker/logs
mkdir -p /usr/data/rocketMQ/data/broker/store
mkdir -p /usr/data/rocketMQ/data/broker/conf
cd /usr/data/rocketMQ/data/broker/conf
touch broker.conf
2、新增broker配置文件
  在conf文件夹下新增broker.conf文件,文件内容如下,其中brokerIP1为宿主机IP
vim broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 101.101.101.101
3、运行broker容器
docker run -d -p 10911:10911 -p 10909:10909 -v /usr/data/rocketMQ/data/broker/logs:/root/logs \
-v /usr/data/rocketMQ/data/broker/store:/root/store \
-v /usr/data/rocketMQ/data/broker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
--name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m" \
rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
 (3)安装控制台
  1、拉取镜像
docker pull pangliang/rocketmq-console-ng
  2、启动新容器
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=101.101.101.101:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8085:8080 -t \
pangliang/rocketmq-console-ng
  3、访问
http://101.101.101.101:8085/
(4)开通端口
9876 8085 10911 10909
2. 相关问题处理
1. Consumer使用SQL表达式报异常: CODE: 1 DESC: The broker does not support consumer to filter message by SQL92
代码: consumer.subscribe(FilterMQProducer.MQ_TOPIC, MessageSelector.bySql("a between 0 and 6"));
解决方案:
docker容器部署ROcketMQ:
[root@iz2zeb3jqdsspthv2j9xu4z ~]# docker exec -it -u root aebc1b8ac97e /bin/bash
[root@aebc1b8ac97e bin]# cd /opt/rocketmq-4.4.0/conf/
[root@aebc1b8ac97e conf]# vi broker.conf
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=101.101.101.101
enablePropertyFilter=true // 添加此行配置
[root@iz2zeb3jqdsspthv2j9xu4z ~]# docker restart aebc1b8ac97e // 重启docker broker容器
普通部署RocketMQ:
[root@aebc1b8ac97e bin]# cd /xxx/rocketmq-4.4.0/conf/
[root@aebc1b8ac97e conf]# vi broker.conf
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=60.205.216.206
enablePropertyFilter=true // 添加此行配置
重新启动broker服务
posted @ 2021-06-10 14:29  521pingguo1314  阅读(249)  评论(0编辑  收藏  举报