内容简介:Docker 容器学习笔记系列:Docker 容器学习笔记系列:个人在开发时能方便快捷的搭建对应的测试环境,比如搭建一个 Redis 数据库、MongoDB 数据库、Elasticsearch 服务。这样就不用拿公共的基础设施做测试了,避免损坏数据、破坏了线上环境。
Docker 容器学习笔记系列:
Docker 容器学习笔记系列:
个人在开发时能方便快捷的搭建对应的测试环境,比如搭建一个 Redis 数据库、 MongoDB 数据库、Elasticsearch 服务。这样就不用拿公共的基础设施做测试了,避免损坏数据、破坏了线上环境。
本文就介绍如何利用容器 Docker 来快速搭建开发测试环境。
MySQL
简单创建
docker run -d \ --name mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
参数说明:
-
-d
:以后台方式运行 -
--name
:将运行的容器命名为mysql
-
-p
:端口映射,host_ip:container_ip
,将主机的 3306 端口映射为 容器内部的 3306 端口,数据库连接时,是连接的你的host_ip
,这二者的顺序不要搞混 -
-e
:设置环境变量,指定root
账号的密码为123456
上面这种方式运行后,我们将容器中的 mysql 数据和配置文件拷贝到宿主机上。(获取原始配置文件)。
因为没有将宿主机和容器相关目录挂载,这样会导致容器如果被删除,数据会丢失。
# 创建好目录,不然会报错 mkdir -p /dada/docker_local/mysql # 将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改 docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /data/docker_local/mysql/config # 将容器中的 mysql 存储目录复制到宿主机中 docker cp mysql:/var/lib/mysql/ /data/docker_local/mysql/data
这里放一份默认的配置文件 mysqld.cnf
:
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
完成上面的操作之后,将已经运行的容器删除:
docker rm mysql
正式创建
接下来正式运行 MySQL 容器:
docker run -d \ --name mysql \ -p 3306:3306 \ -v /data/docker_local/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \ -v /data/docker_local/mysql/data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
-
-v
将宿主机中的文件挂载到将容器中,容器中产生的数据会持久化下来,语法:-v [host-src:]container-dest[:<options>]
其实,如果你一开始就有了默认的配置文件,那么,就可以跳过之前的步骤,直接运行正式的创建 MySQL 容器的命令。
MongoDB
创建容器
# 创建持久化目录 mkdir -p /data/docker_local/mongo/configdb mkdir -p /data/docker_local/mongo/data/db docker run -d \ --name mongo \ -v /data/docker_local/mongo/configdb:/data/configdb \ -v /data/docker_local/mongo/data/db:/data/db \ -p 27017:27017 \ mongo:4 \ --auth
启动参数含义在 MySQL 启动时已经见过了,除了 auth
:
-
--auth
:开启权限验证模式。默认情况下,mongo 数据库没有添加认证约束,为了增强数据库的安全性,我们需要对数据库添加授权认证
添加管理员账号
-
进入容器
docker exec -it mongo mongo admin
进入容器 mongo
,运行命令 mongo admin
,实现了:
- 进入 mongo 命令行
- 切换为 admin 数据库
创建一个拥有最高权限的 root 账号:
db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "root", db: "admin" } ] });
role 角色参数:
Read readWrite dbAdmin userAdmin clusterAdmin readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase root
创建访问指定数据库的用户
管理员已经创建成功后,我们需要重新连接 mongo 数据库,用管理员进行登录,并为目标数据库创建目标用户
# 进入容器,并切换到 admin 数据库 docker exec -it mongo mongo admin # 授权 admin db.auth("admin", "123456"); # 创建访问指定数据库的用户 use beta; db.createUser({ user: 'test', pwd:'test', roles: [ {role:"readWrite",db:"beta"}]}); db.auth("test","test"); # 尝试插入一条数据 use beta db.test.insertOne({name:"michael",age:"28"}) # 搜索 test collection 全部记录 db.test.find()
test 用户可以对(也只能对) beta 库进行操作
补充:
-
查看容器运行日志:
docker logs mysql
docker-compose
docker-compse
俗称 Docker 三剑客,这里试试用它来同时启动 MySQL、MongoDB 吧:
version: "2" services: mongodb: image: mongo:4 container_name: mongodb # 容器名 ports: - "27017:27017" volumes: - "/data/docker_local/mongo/configdb:/data/configdb" - "/data/docker_local/mongo/data/db:/data/db" command: --auth # 开启授权验证 mysql: image: mysql:5.7 container_name: mysqldb # 容器名 ports: - "3306:3306" command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #设置utf8字符集 restart: always environment: MYSQL_ROOT_PASSWORD: 123456 #root管理员用户密码 MYSQL_USER: test #创建test用户 MYSQL_PASSWORD: test #设置test用户的密码 volumes: - "/data/docker_local/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf" - "/data/docker_local/mysql/data/mysql:/var/lib/mysql"
进入到上面编写的docker-compose.yml文件的目录,运行命令:
# 启动所有服务 docker-compose up -d # 单启动 mysql docker-compose up -d mysql # 暂停 mysql docker-compose stop mysql # 删除所有容器和镜像 docker-compose down
参考
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Spring容器创建源码解析
- 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
- 快速轻松地创建Kafka的Docker容器
- 「docker实战篇」python的docker-创建appium容器以及设置appium容器连接安卓模拟器(31)
- 如何在kali Linux上创建一个用于隐藏文件的加密容器?
- Docker微服务-镜像构建交付和使用Rancher进行容器创建管理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Dream Machine
M. Mitchell Waldrop / Penguin Books / 2002-8 / USD 16.00
While most people may not be familiar with the name J. C. R. Licklider, he was the guiding spirit behind the greatest revolution of the modern era. At a time when most computers were big, ponderous ma......一起来看看 《The Dream Machine》 这本书的介绍吧!