使用容器 Docker 创建开发环境

栏目: 数据库 · 发布时间: 4年前

内容简介: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

参考


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

从零开始做运营

从零开始做运营

张亮 / 中信出版社 / 2015-11-1 / 49.00元

运营是什么?怎样做运营?产品和运营是什么关系?我是否适合从事互联网运营?为什么我做的运营活动收效甚微? 在互联网大热的今天,互联网运营成为一个越来越重要的岗位,事关网站、产品的发展与存亡。很多年轻人带着对互联网的热情投身到这个行业,却发现自己对这个行业所知甚少,对互联网运营更加陌生,甚至有一些有志于从事互联网运营的人,因为对运营缺乏了解而难以确定自己的职业发展方向。本书的出发点就在于此,它将......一起来看看 《从零开始做运营》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器