docker启动命令汇总-redis/mongo/nginx/mysql/nacos/rabbitMQ/kafka

说 明:此文章为docker常用容器启动命令(直接运行命令也可以安装)
系统环境:centos7.9
容器列表:redis/mongo/nginx/mysql/nacos/rabbitMQ/kafka

持续更新中…

0.安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。

Docker CE 分为 stable testnightly 三个更新频道。

官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。

1.0CentOS安装Docker

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。

1.1.卸载(可选)

如果之前安装过旧版本的Docker,可以使用下面命令卸载:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

1.2.安装docker

首先需要大家虚拟机联网,安装yum工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

然后更新本地镜像源:

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

然后输入命令:

yum install -y docker-ce

docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

1.3.启动docker

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!

启动docker前,一定要关闭防火墙后!!

启动docker前,一定要关闭防火墙后!!

启动docker前,一定要关闭防火墙后!!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

通过命令启动docker:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

然后输入命令,可以查看docker版本:

docker -v

如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jyI8fa0-1679491261646)(assets/image-20210418154704436.png)]

1.4.配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

1.redis

docker启动redis简单方法

1拉取redis镜像

docker pull redis

2在本地某个位置创建以下内容

​ 建议将以下内容放在一起,方便以后管理和查看

# 以/docker/redis为例
mkdir -p /dockerdata/redis
mkdir -p /dockerdata/redis/data
touch /dockerdata/redis/redis.conf
touch /dockerdata/redis/redis.bash

3编辑配置文件vim /docker/redis/redis.conf

# Redis配置文件
# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

daemonize no

# 指定Redis监听端口,默认端口为6379
port 6379

# 绑定的主机地址,不要绑定容器的本地127.0.0.1地址,因为这样就无法在容器外部访问
bind 0.0.0.0

#需要密码则打开
requirepass mima

# 持久化
appendonly yes

4启动

docker run --restart=always \
-p 6379:6379 --name redis \
-v /dockerdata/redis/redis.conf:/etc/redis/redis.conf \
-v /dockerdata/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf 

解释以上命令

docker run redis # 从redis镜像运行容器
-p 6379:6379 # 映射本地6379端口到容器6379端口,前为本地端口
--name redis # 设置容器名称为redis,方便以后使用docker ps进行管理
-v /docker/redis/redis.conf:/etc/redis/redis.conf # 关联本地/docker/redis/redis.conf文件到容器中/etc/redis/redis.conf,同样,前为本地
-v /docker/redis/data:/data # 关联本地/docker/redis/data到容器内/data目录,此为存放redis数据的目录,为方便以后升级redis,而数据可以留存
-d # 后台启动,使用此方式启动,则redis.conf中daemonize必须设置为no,否则会无法启动
redis-server /etc/redis/redis.conf # 在容器内启动redis-server的命令,主要是为了加载配置
# 查看是否已启动
docker ps
# 如果无法启动或者docker ps中无对应内容,将bash中命令复制出来,删除-d参数启动,查看报错信息
# 使用redis-cli或者rdm访问 localhost:6379
# 如需访问容器,可使用
docker exec -it redis bash
# 或直接使用redis-cli访问容器内redis
docker exec -it redis redis-cli [-a mima]

5注意

#出现以下错误则是没有输入密码导致
127.0.0.1:6379> set name "hello"  
(error) NOAUTH Authentication required.

#运行以下命令即可
127.0.0.1:6379> auth “mima”

2.mongo

#拉取镜像 
docker pull mongo:latest


mkdir -p /dockerdata/mongo/db

#创建和启动容器   --restart=always随着docker启动而启动
docker run -d --restart=always -e TZ=Asia/Shanghai -p 27017:27017 --name mymongo -v /dockerdata/mongo/db:/data/db -d mongo

#进入容器 
docker exec -it mymongo /bin/bash 

#使用MongoDB客户端进行操作 
mongo 

> show dbs #查询所有的数据库 
admin 0.000GB 
config 0.000GB 
local 0.000GB 

3.nginx

docker 开启 nginx 容器

1拉取nginx镜像

docker pull nginx:1.22.0

2开启容器

> docker run --name my-nginx -p 80:80 -d nginx:1.22.0 

3将 nginx 容器内数据复制到存放数据的文件目录

创建存放数据的文件目录

mkdir -p /dockerdata/nginx/html /dockerdata/nginx/conf /dockerdata/nginx/logs

将 nginx 容器内数据复制到存放数据的文件目录

docker cp my-nginx:/etc/nginx/nginx.conf /dockerdata/nginx
docker cp my-nginx:/etc/nginx/conf.d/default.conf /dockerdata/nginx/conf

4停止删除 nginx 容器

docker stop my-nginx
docker rm my-nginx

5启动

docker run --restart=always --privileged=true -e TZ="Asia/Shanghai" -it -d --name nginx -p 8080:8080 -p 8081:8081 \
   -v /dockerdata/nginx/html:/usr/share/nginx/html \
   -v /dockerdata/nginx/nginx.conf:/etc/nginx/nginx.conf \
   -v /dockerdata/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf \
   -v /dockerdata/nginx/logs:/var/log/nginx nginx:1.22.0 
docker run --restart=always --privileged=true -e TZ="Asia/Shanghai" -it -d --name nginx -p 8080:8080 \
   -p 8081:8081 \
   -p 8082:8082 \
   -v /dockerdata/nginx/html:/usr/share/nginx/html \
   -v /dockerdata/nginx/nginx.conf:/etc/nginx/nginx.conf \
   -v /dockerdata/nginx/conf:/etc/nginx/conf.d \
   -v /dockerdata/nginx/logs:/var/log/nginx nginx:1.22.0 

6.测试

进入 dockerdata/nginx/html 目录

cd /dockerdata/nginx/html/

创建 index.html 文件

touch index.html      vi index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .content {
            margin-top: 20%;
            text-align: center;
        }
        .detail {
            font-size: 40px;
            font-weight: bold;
            font-family: Cursive;
        }
    </style>
</head>
<body>
    <div class="content">
        <p class="detail">享清福不在为官,只要囊有钱,仓有米,腹有诗书,便是山中宰相</p>
        <p class="detail">祈寿年无须服药,但愿身无病,心无忧,门无债主,可为地上神仙</p>
    </div>
</body>
</html>

备注:

location root后面需要接绝对路径,不能像windows下使用相对路径

4.mysql

1.在docker hub 上查看要下载的mysql镜像名称

dockerHub官网地址

docker pull mysql:8.0.26
docker pull mysql:5.7

2.在本地某个位置创建以下内容

​ 建议将以下内容放在一起,方便以后管理和查看

mkdir -p /dockerdata/mysql/log
mkdir -p /dockerdata/mysql/data
mkdir -p /dockerdata/mysql/conf

3.启动命令

docker run -p 3306:3306 --name mysql --restart=always \
-v /dockerdata/mysql/log:/var/log/mysql \
-v /dockerdata/mysql/data:/var/lib/mysql \
-v /dockerdata/mysql/conf:/etc/mysql \
-v /dockerdata/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.26

4.参数释义

配置端口映射:
-p 3306:3306 --name mysql
将容器的3306端口映射到主机的3306端口
配置mysql数据卷挂载
1.-v /mydata/mysql/log:/var/log/mysql(日志文件挂载)
将容器中的日志文件夹挂载到主机对应的/var/log/mysql文件夹中
2.-v /mydata/mysql/data:/var/lib/mysql(数据文件挂载)
将容器中的数据文件夹挂载到主机对应的/var/lib/mysql文件夹中
3.-v /mydata/mysql/conf:/etc/mysql(配置文件挂载)
将容器的配置文件夹挂载到主机对应的/etc/mysql文件夹中
注(这里所提的主机指的是当前的linux主机)
配置用户
-e MYSQL_ROOT_PASSWORD=root
设置初始化root用户的密码
指定镜像资源
-d mysql:5.7
-d:以后台方式运行实例
mysql:5.7:指定用这个镜像来创建运行实例

5.启动失败

查看日志

docker logs mysql
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2022-11-27T10:31:20.868638Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files

6.更改密码,设置utf-8编码

#0.自动重启容器
sudo docker update mysql --restart=always

#1.进入mysql容器操作台命令:
docker exec -it mysql bash

#2.登录mysql命令:
mysql -u root -p

#3.修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

#4.刷新权限
命令:flush privileges;  
把root用户的密码改成 mysql_native_password 模式,即可远程连接

问题:重启容器后,登录mysql,发现密码不对

意思就是密码错误!!!但是怎么可能密码错误呢???我都用 navicat 连上了呀!!!
上边这句话里就存在题眼了:::navicat 和 localhost 肯定不是一个 host !!!
问题就是你只改了其他host连接的root 密码,localhost的root密码没有改!!!
但是为什么重启mysql容器的时候,会用 'root'@'localhost' 和 新密码 来个登陆???mysql还是不够了解啊。

docker mysql 修改密码的姿势docker mysql 修改密码

# 修改普通用户,只改一个就好
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');

# 修改root用户,改两个
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

/dockerdata/mysql/conf文件夹下创建配置文件
命令:vim my.cnf
命令:i

粘贴内容:
	[client]
	default-character-set=utf8
	[mysql]
	default-character-set=utf8
	[mysqld]
	init_connect=' SET collation_connection = utf8_unicode_ci '
	init_connect=' SET NAMES utf8 '
	character-set-server=utf8
	collation-server=utf8_unicode_ci 
	skip-character-set-client-handshake 
	skip-name-resolve
	
按键:ESC
命令::wq

5.Docker安装Nacos(详细教程)

1nacos安装

(https://blog.csdn.net/zhuocailing3390/article/details/123058374)

2拉取镜像

docker pull nacos/nacos-server:v2.1.2

3拷贝容器目录

先不进行任何配置直接启动一个nacos容器,然后将容器中的data、conf、log、bin拷贝到/dockerdata/nacos目录下。
直接启动:

docker run --name nacos-server -d nacos/nacos-server:v2.1.2

拷贝目录:

docker cp nacos-server:/home/nacos/conf /dockerdata/nacos/
docker cp nacos-server:/home/nacos/logs /dockerdata/nacos/
docker cp nacos-server:/home/nacos/bin /dockerdata/nacos/
docker cp nacos-server:/home/nacos/data /dockerdata/nacos/

删除容器:

docker stop nacos-server
docker rm nacos-server

目的是:为了进行挂载启动,以后修改配置文件、查看日志时更加方便。

3.1.mysql新建nacos的外部数据库,并执行脚本 sql脚本地址如下:—准备工作

用navicat新建数据库,命名为nacos_config,再运行下面此sql文件

数据脚本位置:/dockerdata/nacos/conf/mysql-schema.sql 根据脚本执行。有12张表,就表示OK了

请添加图片描述

4配置application.properties----暂时不需要了,启动命令配置了

在application.properties文件中,我们直接将原有采用环境变量方式的配置根据实际情况进行修改。

修改:nacos/conf/application.properties

# 端口
server.port=8848
spring.datasource.platform=mysql
# 数据库数量,如果mysql配置了主从就设置为 2
db.num=1
# mysql连接
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# 如果db.num=1,则将db.url.1屏蔽;反之则配置db.url.1
#db.url.1=
# mysql用户名
db.user=root
# mysql密码
db.password=123456

5配置docker-startup.sh

在startup.sh中主要根据当前服务器的配置修改JVM大小,比如:修改为1G或者更大或者更小。

修改:

vim /root/docker/cloud/nacos/bin/docker-startup.sh

内容如下:

JAVA_OPT=“${JAVA_OPT} -Xms512m -Xmx512m -Xmn512m”

请添加图片描述

6 挂载启动容器

docker  run --name nacos -d \
--privileged=true \
--restart=always \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.1.52 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=UTC" \
-v /dockerdata/nacos/logs:/home/nacos/logs \
-v /dockerdata/nacos/data:/home/nacos/data \
-v /dockerdata/nacos/conf:/home/nacos/conf \
-v /dockerdata/nacos/bin:/home/nacos/bin \
nacos/nacos-server:v2.1.2
  • MODE=standalone 单机版
  • –restart=always 开机启动
  • -p 8848:8848 映射端口
  • -d 创建一个守护式容器在后台运行

请添加图片描述

7检查其正常功能

  1. 访问地址:http://192.168.1.52:8848/nacos 成功访问nacos则表示搭建成功。
    默认账户:nacos
    默认密码:nacos,为了安全在第一次进入到nacos以后最好修改一次密码。

  2. 随便创建个配置,可以看到nacos已经可以将配置持久化到我配置的外部数据源mysql了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eOuZkATR-1679490420940)(docker启动命令汇总.assets/QQ截图20230311153451.jpg)]

6.安装RabbitMQ

docker pull rabbitmq:management

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

7.kafka

Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper

  • Docker安装zookeeper

下载镜像:

docker pull zookeeper:3.4.14

创建容器

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
  • Docker安装kafka

下载镜像:

docker pull wurstmeister/kafka:2.12-2.3.1

创建容器

docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.1.52 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.1.52:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.52:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafka:2.12-2.3.1
er:3.4.14

创建容器

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
  • Docker安装kafka

下载镜像:

docker pull wurstmeister/kafka:2.12-2.3.1

创建容器

docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.1.52 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.1.52:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.52:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafka:2.12-2.3.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值