如何在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容器,并建库建表;
- 然后删除实例,重新连接测试数据是否存在;