前言:
用dockerfile创建mongodb4.0.8镜像。
一、准备工作:
1、下载mongodb4.0.8文件包到/root/mongodb4.0.8目录里
[root@dingzhi ~]# mkdir mongodb4.0.8/
[root@dingzhi ~]# cd mongodb4.0.8/
[root@dingzhi mongodb4.0.8]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.8.tgz
#注意文件大小为100M左右,查看大小是否符合,是否下载错误
(如果下载不到的话,在mongodb官网(https://www.mongodb.com/download-center/community)下载最新版本)
2、 编辑好自定义的mongodb.conf文件
[root@dingzhi mongodb4.0.8]# vi mongodb.conf #编辑内容如下
dbpath=/usr/local/mongodb/data/db #数据文件存放目录
logpath=/usr/local/mongodb/logs/mongodb.log #日志存放目录
port=27017 #端口
#fork=true #fork=true以守护程序的方式启用,即在后台运行。这里注释后就是前台方式启用
logappend=true
maxConns=5000
storageEngine = mmapv1
二、创建redis4.0.8的dockerfile文件
[root@dingzhi mongodb4.0.8]# vi dockerfile #编辑内容如下
FROM centos:latest
MAINTAINER https://blog.csdn.net/lituxiu
ENV TIME_ZOME Asia/Shanghai
ARG WJ="mongodb-linux-x86_64-rhel70-4.0.8"
#https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.8.tgz
ADD $WJ.tgz /usr/local/
RUN mkdir -p /usr/local/mongodb \
&& cp -r /usr/local/$WJ/* /usr/local/mongodb/ \
&& echo "export MONGODB_HOME=/usr/local/mongodb " >>/etc/profile \
&& echo "export PATH=$PATH:$MONGODB_HOME/bin" >>/etc/profile \
&& source /etc/profile \
&& cd /usr/local/mongodb \
&& mkdir -p data/db \
&& chmod -R 777 data/db \
&& mkdir logs \
&& touch mongodb.log \
&& echo "${TIME_ZOME}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime \
&& rm -rf /usr/local/$WJ/
#WORKDIR /usr/local/mongodb/bin #这里要靠近下面的ENTRYPOINT,否则报错找不到./mogod命令
RUN mkdir /usr/local/mongodb/etc
COPY mongodb.conf /usr/local/mongodb/etc/
EXPOSE 27017
#启动
WORKDIR /usr/local/mongodb/bin/
ENTRYPOINT ./mongod -f ../etc/mongodb.conf
三、创建mongodb4.0.8镜像
[root@dingzhi mongodb4.0.8]# docker build -t mongodb4.0.8:latest ./
..... #一大堆创建的信息
---> Running in 831739f81ba2
---> a3d747f35f6b
Removing intermediate container 831739f81ba2
Successfully built a3d747f35f6b
[root@dingzhi mongodb4.0.8]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongodb4.0.8 latest a3d747f35f6b 38 minutes ago 782 MB
redis4.0.10 latest bbcb83519ab6 10 hours ago 314 MB
tomcat8.5.40 latest f06aacf399c4 15 hours ago 622 MB
jdk8.0.211 latest c598103b2c55 2 days ago 608 MB
nginx1.15.7 latest 4b05c87dcbec 2 days ago 302 MB
php7.2.16 latest 3428fd528787 2 days ago 627 MB
docker.io/mysql 5.7 98455b9624a9 3 weeks ago 372 MB
docker.io/centos latest 9f38484d220f 5 weeks ago 202 MB
#以上查看到mongodb4.0.8的镜像id前4位为a3d7
四、测试验证环境
创建宿主主机本地挂载的目录
[root@dingzhi ~]# mkdir -p /data/mongodb/{etc,db}
[root@dingzhi ~]# ls /data/mongodb/
db etc
[root@dingzhi ~]# cp /root/mongodb4.0.8/mongodb.conf /data/mongodb/etc/
后台启动容器并挂载容器数据和配置的目录到本地
[root@dingzhi ~]# docker run --restart=always -p 27017:27017 -v /data/mongodb/etc/:/usr/local/mongodb/etc -v /data/mongodb/db/:/usr/local/mongodb/data/db/ --name mongodb -d a3d7
22c261fd80f66222d706f066edb96076d4e39ea8ae50095848d340ffd9fde947
进入容器,设置密码并创建数据
[root@dingzhi ~]# docker exec -it mongodb /bin/bash
[root@22c261fd80f6 bin]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.9 2.5 1501348 97284 ? Ssl 16:38 0:00 ./mongod -f ../etc/mongodb.conf
root 24 0.3 0.0 11820 1880 ? Ss 16:39 0:00 /bin/bash
root 37 0.0 0.0 51740 1732 ? R+ 16:39 0:00 ps aux
[root@22c261fd80f6 bin]# ./mongo
...
>
#按顺序输入下列四行
use admin
db.createUser({user:'admin',pwd:'admin',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
use uni_pb
db.createUser({user:'root',pwd:'kd1@213dF!da',roles:[{role:'dbOwner',db:'uni_pb'}]})
#再在uni_pb库里创建数据
db #看下当前库是否在uni_pb库里
use uni_pb
db.c1.save({name:"xiaoming",age:18,sex:"boy"})
db.c1.find()
exit
退出并删除当前容器,重新别别一个容器,挂载在相同的宿主主机目录,验证库的用户和密码、库是否还存在
#停止并删除当前的容器
[root@dingzhi ~]# docker kill $(docker ps -q)
3a5edfda1ddc
[root@dingzhi ~]# docker rm -f $(docker ps -qa)
3a5edfda1ddc
[root@dingzhi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#重开新的容器,并挂载的宿主的目录,是否继承了此前的数据
[root@dingzhi ~]# docker run --restart=always -p 27017:27017 -v /data/mongodb/etc/:/usr/local/mongodb/etc -v /data/mongodb/db/:/usr/local/mongodb/data/db/ --name test -d a3d7
344d297f28898c70148e11241a828f51c948feba7278be2cb0e6e38fd2ece975
[root@dingzhi ~]# docker exec -it test /bin/bash #进入新开的名叫test的mongodb容器
[root@344d297f2889 bin]# ./mongo #启动mongodb数据库
> db
test
> use uni_pb
switched to db uni_pb
> db.auth('root','kd1@213dF!da')
1 #这里返回1是代表库的用户和密码正确
> show tables
c1
> db.c1.find()
{ "_id" : ObjectId("5cb98c51ab790be43df50ee7"), "name" : "xiaoming", "age" : 18, "sex" : "boy" }
#以上查询到的mongodb数据依然在新开的容器里也可以继承着
用dockerfile创建mongodb4.0.8镜像并挂载宿主目录环境整体过程,配置完毕了!