如何在docker上面安装常用的容器环境
本文主要记录了如何在 docker 上面安装最长的容器环境,包括 redis、mongodb、es 以及 mysql
安装 redis
1. 从 docker hub 上 (阿里云加速器) 拉取 redis 镜像到本地标签为 6.0.8
docker pull redis:6.0.8
2. 基础命令操作
2.1 启动容器并访问
# 启动 redis 容器
docker run -d -p 6379:6379 redis:6.0.8
# 进入 redis 容器
docker exec -it c14ecf2a6246 /bin/bash
# 使用客户端命令访问容器
redis-cli
2.2 停止容器并删除
# 查看容器 ID
docker ps
# 停止容器
docker stop c14ecf2a6246
# 删除容器
docker rm c14ecf2a6246
3. 指定宿主机配置文件和容器卷启动容器
3.1 创建宿主机的 redis 容器配置文件和容器卷存储文件夹
# 配置文件放在这里
mkdir -p /opt/module/docker/redis/conf
# 数据卷放在这里
mkdir -p /opt/module/docker/redis/datas
3.2 上传默认 redis 配置文件到/opt/module/docker/redis/conf
下面
默认 redis 配置文件下载地址:下载
3.3 修改 redis 配置文件
3.4 启动容器
docker run -p 6379:6379 --name redis6 --privileged=true -v /opt/module/docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /opt/module/docker/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
- Docker 挂载主机目录 Docker 访问出现 cannot open directory : Permission denied
- 解决办法:在挂载目录后多加一个 -privileged=true 参数即可
安装 mongodb
拉取镜像
docker pull mongo:latest
创建宿主机容器卷映射
- 创建映射配置文件夹
mkdir -p /opt/module/docker/mongodb/conf
在上方文件下面vim mongo.conf
输入一下内容
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
storage:
dbPath: /data/db
net:
port: 27037
bindIp: 0.0.0.0
#security:
#authorization: enabled
注意:这里的 path 和 dbPath 都是指的容器下面的路径
- 创建 mongodb 的数据存储位置
mkdir -p /opt/module/docker/mongodb/data/log
启动容器
- 无密码创建容器
docker run -itd --name mongo -p 27017:27017 -v /opt/module/docker/mongdb/data:/data/db -v /opt/module/docker/mongdb/conf/mongo.conf:/data/configdb/mongo.conf -v /opt/module/docker/mongdb/data/log:/data/log mongo
- 设置密码,注意需要在配置文件打开
docker run -d \
--name mongodb \
-p 27017:27017 \
-v /opt/module/docker/mongdb/data:/data/db \
-v /opt/module/docker/mongdb/conf/mongo.conf:/data/configdb/mongo.conf \
-v /opt/module/docker/mongdb/data/log:/data/log \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=admin \
--privileged=true \
--restart always \
mongo
测试
- 下载
studio 3t
连接测试
docker 安装 elasticSearch
1 拉取 ES 镜像
docker pull elasticsearch:7.16.1
2 创建要挂载的文件与配置信息
mkdir -p /opt/module/docker/elasticsearch/conf
mkdir -p /opt/module/docker/elasticsearch/data
mkdir -p /opt/module/docker/elasticsearch/plugins
3 启动容器
- 不配置容器卷启动
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-d elasticsearch:7.16.1
-
测试结果
-
配置容器卷启动
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
# 配置启动参数,防止 ES 占用内存过大,大概 1GB
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /opt/module/docker/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/module/docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/module/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.16.1
4 测试
- 测试结果
docker 安装 arm 版本 mysql
1. 拉取镜像
由于这里需要安装的 mysql5.7 版本,但是机器是 arm 架构的,docker 下面的官方 mysql 只有 8.0 以上版本才适配了 arm 架构。
因此,这里安装其与 mysql5.7 对应的 mariaDB10.2。
mariaDB 和 mysql 版本对比关系参考: https://www.cnblogs.com/yuwentao/p/15598047.html
docker pull mariadb:10.2
2. 简单版
- 1)使用 mysql 镜像
docker run -p 3306:3306 --name mariadb --env MARIADB_ROOT_PASSWORD=000000 -d mariadb:10.2
-
-
2)进入容器实例
docker exec -it mariadb /bin/bash
- 3)测试建库建表
mysql -u root -p
# 创建测试数据库
create database testDB;
# 切换数据库
use testDB;
# 创建数据表
create table test(id int, name varchar(20));
# 插入表数据
insert into test value(1,"shuisheng");
# 查询表信息
select * from test;
-
-
4)测试工具连接
-
5)小结问题
- docker 上默认字符集编码存在隐患,导致插入中文异常;
- 通过
show variables like 'character%'
查看编码
- 通过
- 容器实例和数据绑定,导致容器实例删除,数据也就消失了;
- docker 上默认字符集编码存在隐患,导致插入中文异常;
3. 实战版
- 1)新建
my.cnf
配置文件 - 在
/opt/module/docker/mysql
下面创建conf
、data
、log
三个容器映射文件夹
mkdir -p /opt/module/docker/mysql/conf
mkdir -p /opt/module/docker/mysql/data
mkdir -p /opt/module/docker/mysql/log`
- 在
conf
目录下面创建my.conf
配置文件,并将以下内容配置在内
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
- 2)使用容器卷方式创建 mysql 实例
docker run -p 3306:3306 --privileged=true -v /opt/module/docker/mysql/log:/var/log/mysql -v /opt/module/docker/mysql/data:/var/lib/mysql -v /opt/module/docker/mysql/conf:/etc/mysql/conf.d --name mariadb -e MARIADB_ROOT_PASSWORD=000000 -d mariadb:10.2
-
-
3)测试编码
docker exec -it mariadb /bin/bash
mysql -u root -p
show variables like 'character%';
- 4)测试数据
- 先在连接 mysql 容器,并建库建表;
- 然后删除实例,重新连接测试数据是否存在;