Docker实战

一、Docker安装

以下均以CentOS 7为例

1、安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2、启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

3、配置镜像加速

以阿里云为例,进入阿里云控制台->产品->容器->容器镜像服务ACR->镜像加速器->找到命令,按照示例程序来,例:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

二、Docker常用软件安装

2.1、MySQL

1、建三个文件夹data、conf、init,这里我建在了/root/mysql目录下,大家可根据自己情况

2、run,没有镜像的话会自动安装

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

2.2、Redis

1、创建文件夹data、conf、log,这里我创建到/root/redis目录下

2、去官网下载配置文件 Redis官网 和自己版本对应好就行

然后修改一下配置文件,例如:

bind 127.0.0.1 #注释掉这部分,使redis可以外部访问

daemonize no#用守护线程的方式启动

requirepass 你的密码#给redis设置密码

appendonly yes#redis持久化  默认是no

tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300

下载下来的redis.conf放置在conf目录下,再在log目录下新建redis.log文件夹,赋予777权限。

3、 安装Redis

docker pull redis # 安装最新版本

docker pull redis:5.0.7 # 指定版本

4、运行

docker run -d \
  --name redis \
  -p 6379:6379 \
  -v /root/redis/data:/data \
  -v /root/redis/conf/redis.conf:/etc/redis/redis.conf \
  -v /root/redis/log/redis.log:/var/log/redis.log \
  -d redis:5.0.7 \
  redis-server /etc/redis/redis.conf

对上面命令进行一个解释:

docker run -d \
  --name redis \
  -p 6379:6379 \ # 把容器6379端口映射到宿主6379
  -v /root/redis/data:/data \ # 将主机上的 /root/redis/data 目录挂载到容器内部的 /data 目录,以便可以将 Redis 数据持久化到主机
  -v /root/redis/conf/redis.conf:/etc/redis/redis.conf \ # 将主机上的 /root/redis/conf/redis.conf 文件挂载到容器内部的 /etc/redis/redis.conf 文件,以便可以使用自定义的 Redis 配置文件
  -v /root/redis/log/redis.log:/var/log/redis.log \ # redis日志
  -d redis:5.0.7 \ # 指定要使用的 Redis 镜像及版本号,并在后台运行容器
  redis-server /etc/redis/redis.conf # # 在容器内部执行的命令,启动 Redis 服务,并使用 /etc/redis/redis.conf 配置文件

2.3、RocketMQ

1、创建文件夹rocketmq,其下broker、nameserver,broker下面创建conf、logs、store,nameserver下面创建logs、store

2、在/root/rocketmq/broker/conf下创建broker.conf,并配置如下:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

namesrvAddr=IP:9876
brokerIP1=IP
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911

namesrvAddr和brokerIP1必须是具体的IP地址

3、拉取rocketmq

docker pull apache/rocketmq  # 拉最新

docker pull apache/rocketmq:4.9.4  # 拉取指定版本

4、启动nameserver

docker run -d \
  --name mqnameserver \
  -p 9876:9876 \
  -v /root/rocketmq/nameserver/logs:/root/logs \
  -v /root/rocketmq/nameserver/store:/root/store \
  -d apache/rocketmq:4.9.4 \
  sh mqnamesrv

解释

-name mqnameserver | 把容器的名字设置为mqnameserver

-p 9876:9876| 把容器内的端口9876挂载到宿主机9876上面

-v /root/rocketmq/nameserver/logs:/root/logs | 把容器内的/root/logs日志目录挂载到宿主机的

/root/rocketmq/nameserver/store:/root/store | 把容器内的/root/store数据存储目录挂载到宿主机

-e "MAX_POSSIBLE_HEAP=100000000" | 设置容器的最大堆内存为100000000

apache/rocketmq:4.9.4 | 使用的镜像名称

sh mqnamesrv | 启动namesrv服务

5、启动broker

docker run -d \
  --name mqbroker \
  --link mqnameserver:namesrv \
  -p 10911:10911 \
  -p 10909:10909 \
  -v /root/rocketmq/broker/logs:/root/logs \
  -v /root/rocketmq/broker/store:/root/store \
  -v /root/rocketmq/broker/conf/broker.conf:/opt/rocketmq-4.9.4/conf/broker.conf \
  -e "NAMESRV_ADDR=namesrv:9876" \
  -d apache/rocketmq:4.9.4 \
  sh mqbroker -c /opt/rocketmq-4.9.4/conf/broker.conf 

解释

--link mqnameserver:namesrv | 和rmqnamesrv容器通信

-p 10911:10911 | 把容器的非vip通道端口挂载到宿主机

-p 10909:10909 | 把容器的vip通道端口挂载到宿主机

-e "NAMESRV_ADDR=namesrv:9876" | 指定namesrv的地址为本机namesrv的ip地址:9876

-e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq sh mqbroker | 指定broker服务的最大堆内存

apache/rocketmq:4.9.4 | 使用的镜像名称

sh mqbroker -c /opt/rocketmq-4.9.4/conf/broker.conf | 指定配置文件启动broker节点

6、创建rocketmq-console服务

拉取rocketmq-console

docker pull pangliang/rocketmq-console-ng

启动rocketmq-console

docker run -d \
  --name mqconsole \
  -p 9999:8080 \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.164.100:9876 \
  -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
  pangliang/rocketmq-console-ng

解释上面语句

-name rmqadmin | 把容器的名字设置为rmqadmin

-e "JAVA_OPTS=-Drocketmq.namesrv.addr=IP:9876 | 设置namesrv服务的ip地址

-Dcom.rocketmq.sendMessageWithVIPChannel=false" | 不使用vip通道发送消息

--p 9999:8080 | 把容器内的端口8080挂载到宿主机上的9999端口

相关推荐
舞动CPU4 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
皮锤打乌龟5 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
钰@5 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序
wanhengwangluo5 小时前
云服务器和物理服务器的区别有哪些?
运维·服务器
南猿北者6 小时前
docker Network(网络)
网络·docker·容器
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
yaosheng_VALVE7 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
sam-1237 小时前
k8s上部署redis高可用集群
redis·docker·k8s
看山还是山,看水还是。7 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
扣得君7 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20