说 明:此文章为docker常用容器启动命令(直接运行命令也可以安装)
系统环境:centos7.9
容器列表:redis/mongo/nginx/mysql/nacos/rabbitMQ/kafka持续更新中…
文章目录
0.安装Docker
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable
test
和 nightly
三个更新频道。
官方网站上有各种环境下的 安装指南,这里主要介绍 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
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
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镜像名称
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检查其正常功能
-
访问地址:http://192.168.1.52:8848/nacos 成功访问nacos则表示搭建成功。
默认账户:nacos
默认密码:nacos,为了安全在第一次进入到nacos以后最好修改一次密码。 -
随便创建个配置,可以看到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