1、命令
1.1、配置docker开机启动
systemctl enable docker.service
1.2、配置容器启动
docker update --restart=always 容器id(跟随docker开机重启)
1.3、配置镜像
vim /etc/docker/daemon.json
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
1.4、服务器外部修改容器配置文件
# 查看容器报错原因
[root@pro nginx]# docker logs nginx
nginx: [emerg] unknown directive “gizp” in /etc/nginx/nginx.conf:29
# 在此目录找到nginx容器的配置文件
[root@pro nginx]# cd /var/lib/docker/overlay2/
[root@pro overlay2]# find ./ -name nginx.conf
./7baeb968df6b073708cce37a182cf54fd033023a5eda6bb6d1077438d950ce6e/diff/etc/nginx/nginx.conf
# 将文件修改正确
[root@pro overlay2]# vim
./7baeb968df6b073708cce37a182cf54fd033023a5eda6bb6d1077438d950ce6e/diff/etc/nginx/nginx.conf
# 重启容器
[root@pro overlay2]# docker restart nginx
nginx
1.5、常见应用安装脚本整合
已包含Mysql5.7、Redis、MongoDB、RocketMQ、RabbitMQ软件的安装
注意:①使用命令之前请先关闭服务器防火墙②请给sheel脚本赋予权限
使用:./test.sh 命令
写的比较Low,业余时间整理的,不要嫌弃!!!
#!/bin/sh
# 使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [close_fire|rocketmq|stop_rock|rm_rock|rabbitmq|single_redis|mysql|mongodb]"
exit 1
}
local_ip="172.29.170.34"
rocketmq(){
#安装之前请先关闭防火墙
broker_file_path="/application/rocketmq/conf/"
broker_file_name="broker.conf"
if [ ! -d "$broker_file_path" ];then
mkdir -p $broker_file_path
echo "文件夹创建完毕"
else
echo "文件夹已经存在"
fi
cd $broker_file_path
touch $broker_file_name
echo "brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = $local_ip:9876
brokerIP1 = $local_ip
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
" >> $broker_file_name
#安装nameServer
docker run -d -p 9876:9876 -v /application/rocketmq/data/namesrv/logs:/root/logs --privileged=true --restart=always -v /application/rocketmq/data/namesrv/store:/root/store --name rmqnamesrv -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms1024m -Xmx1024m" rocketmqinc/rocketmq sh mqnamesrv
#安装broker
docker run -d -p 10911:10911 -p 10909:10909 -v /application/rocketmq/data/broker/logs:/root/logs --privileged=true -v /application/rocketmq/rocketmq/data/broker/store:/root/store -v $broker_file_path/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms1024m -Xmx1024m" rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq/conf/broker.conf
#安装控制台
docker run -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=$local_ip:9876 -Drocketmq.config.isVIPChannel=false" -p 8080:8080 --name rocketconsole -t styletang/rocketmq-console-ng
echo "rocketMq 安装完毕—-===========SUCCESS================--"
}
stop_rock(){
docker stop rmqbroker rmqnamesrv rocketconsole
}
rm_rock(){
docker rm rmqbroker rmqnamesrv rocketconsole
}
close_fire(){
if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then
systemctl stop firewalld
systemctl disable firewalld
echo "已关闭防火墙"
elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then
service iptables stop
chkconfig iptables off
fi
}
rabbitmq(){
rabbit_file_path="/application/rabbitmq/data"
mq_host="my_vhost"
mq_user="guest"
mq_password="guest"
docker_name="rabbitmq"
if [ ! -d "$rabbit_file_path" ];then
mkdir -p $rabbit_file_path
echo "文件夹创建完毕"
else
echo "文件夹已经存在"
fi
docker run -d --name $docker_name --privileged=true --restart=always -p 5672:5672 -p 15672:15672 -v $rabbit_file_path:/var/lib/rabbitmq --hostname rabbitmq -e RABBITMQ_DEFAULT_VHOST=$mq_host -e RABBITMQ_DEFAULT_USER=$mq_user -e RABBITMQ_DEFAULT_PASS=$mq_password docker.io/rabbitmq:3.7.17-management
CONTAINER_ID=`docker ps -a | grep "$docker_name" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]
then
echo "启动成功!"
docker ps -a | grep "$docker_name"
exit 0
else
echo "失败!"
docker stop $docker_name
docker rm $docker_name
exit 1
fi
}
#单节点 Redis
single_redis(){
redis_data="/application/redis/data/"
redis_conf_path="/application/redis/conf/"
docker_name="redis"
redis_images="redis"
redis_password="Admin12345!"
if [ ! -d "$redis_conf_path" ];then
mkdir -p $redis_conf_path
echo "文件夹创建完毕"
else
echo "文件夹已经存在"
cd $redis_conf_path
rm redis.conf
fi
cd $redis_conf_path
#生成配置文件
touch redis.conf
echo 'bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
' >> redis.conf
docker run -p 6224:6379 -v $redis_data:/data -v $redis_conf_path/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true --restart=always --name $docker_name -d docker.io/redis:5.0.5 redis-server /usr/local/etc/redis/redis.conf --requirepass $redis_password
CONTAINER_ID=`docker ps -a | grep "$docker_name" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]
then
echo "启动成功!"
docker ps -a | grep "$docker_name"
exit 0
else
echo "失败!"
docker stop $docker_name
docker rm $docker_name
exit 1
fi
}
mysql(){
#Version 5.7
password="Admin12345!"
mysql_data="/application/mysql/data"
docker_name="mysql5.7"
docker run --name $docker_name --privileged=true --restart=always -p 6223:3306 -e MYSQL_ROOT_PASSWORD=$password -v $mysql_data:/var/lib/mysql -d docker.io/mysql:5.7
CONTAINER_ID=`docker ps -a | grep "$docker_name" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]
then
echo "启动成功!"
docker ps -a | grep "$docker_name"
echo "请进入到容器自行改相关配置!"
echo "数据库密码:"$password
exit 0
else
echo "失败!"
docker stop $docker_name
docker rm $docker_name
exit 1
fi
}
mongodb() {
mongodb_data="/application/mongodb"
docker_name="mongodb"
docker run -d --name $docker_name --privileged=true --restart=always -v $mongodb_data/data:/data/db -v $mongodb_data/backup:/data/backup -v $mongodb_data/conf:/data/configdb -p 27017:27017 docker.io/mongo --auth
#docker exec -it mongodb mongo
#use admin
#db.createUser({user:'admin',pwd:'admin',roles:['root']})
#db.auth('admin','admin')
CONTAINER_ID=`docker ps -a | grep "$docker_name" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]
then
echo "启动成功!"
docker ps -a | grep "$docker_name"
echo "请进入到容器自行改相关配置!"
echo "
设置用户:
docker exec -it mongodb mongo
use admin
db.createUser({user:'admin',pwd:'admin',roles:['root']})
db.auth('admin','admin')
"
echo "设置网络:
docker exec -it mongodb /bin/bash
vim /etc/mongod.conf.orig
将bindIp:127.0.0.1 修改为0.0.0.0"
exit 0
else
echo "失败!"
docker stop $docker_name
docker rm $docker_name
exit 1
fi
}
minio() {
minioFilePath="/application/minio"
docker_name="minio"
docker run -d -p 9000:9000 -p 9200:9200 --name=minio --restart=always -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=123456" -v /application/minio/data:/data -v /application/minio/config:/root/.minio minio/minio server /data --console-address ":9200" --address ":9000"
CONTAINER_ID=`docker ps -a | grep "$docker_name" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]
then
echo "启动成功!"
docker ps -a | grep "$docker_name"
exit 0
else
echo "失败!"
docker stop $docker_name
docker rm $docker_name
exit 1
fi
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"rocketmq")
rocketmq
;;
"stop_rock")
stop_rock
;;
"rm_rock")
rm_rock
;;
"close_fire")
close_fire
;;
"rabbitmq")
rabbitmq
;;
"single_redis")
single_redis
;;
"mysql")
mysql
;;
"mongodb")
mongodb
;;
"minio")
minio
;;
*)
usage
;;
esac
1.6、正在运行的容器同步系统时间
# docker镜像内的时间和系统时间相差8个小时。
docker cp -L /usr/share/zoneinfo/Asia/Shanghai 【容器名】:/etc/localtime