《 Docker实例三Docker安装MongoDB实例 》
前言
在前面一篇文章种,完成了 《 Docker安装MySQL实例 》,本篇将继续镜像安装教程,并完成Docker安装MongoDB实例。
Docker实例三Docker安装MongoDB实例
第一种:使用 docker pull 镜像名 拉取镜像
1、查询星级数大于30的MySQL镜像(注:星级数越高,越受欢迎的,默认在 Docker Hub 查询的),
输入命令 “ docker search -s 30 mongo ” ,查询内容如下:
[root@localhost ~]# docker search -s 30 mongo
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mongo MongoDB document databases provide high avai… 5365 [OK]
mongo-express Web-based MongoDB admin interface, written w… 330 [OK]
tutum/mongodb MongoDB Docker image – listens in port 27017… 224 [OK]
mvertes/alpine-mongo light MongoDB container 88 [OK]
bitnami/mongodb Bitnami MongoDB Docker Image 73 [OK]
mongoclient/mongoclient Official docker image for Mongoclient, featu… 58 [OK]
2、拉取第一个镜像,也是官方版的镜像,输入命令 “ docker pull mongo ”,默认拉取的为最新版本 latest ,内容如下:
[root@localhost ~]# docker pull mongo
Using default tag: latest
latest: Pulling from library/mongo
18d680d61657: Pull complete
0addb6fece63: Pull complete
78e58219b215: Pull complete
eb6959a66df2: Pull complete
1bb66a4db707: Pull complete
b18fa018e44b: Pull complete
5d0142bcb0df: Pull complete
db65733de31a: Pull complete
867fe12df2c5: Pull complete
29aa76034f8f: Pull complete
28e61706e03f: Pull complete
98ec6a7c0d50: Pull complete
c752faaa2e63: Pull complete
Digest: sha256:1fd611bd639a1bdffa5ddc3303c98dbebd63fdd7f95aaddf9819275220942fae
Status: Downloaded newer image for mongo:latest
3、拉取完成后,输入命令 “ docker images mongo”,可以在本地镜像列表里查到REPOSITORY为mongo的镜像,内容如下:
[root@localhost ~]# docker images mongo
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest ea6441073322 3 weeks ago 382MB
第二种:通过 Dockerfile 构建Docker镜像
1、新建Mongodb的Dockerfile文件存放目录,输入命令 “ mkdir -p /opt/dockerfile/mongo” ,并进入到目录下。
[root@localhost ~]# mkdir -p /opt/dockerfile/mongo
[root@localhost ~]# cd /opt/dockerfile/mongo/
[root@localhost mongo]#
2、创建dockerfile文件,输入命令 “ vi mongodockerfile ” ,并键入如下内容:
Ubuntu 版本:
# base 基础镜像
FROM ubuntu:xenial
# 首先添加用户和组,以确保一致地分配他们的id
RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
jq \
numactl \
&& rm -rf /var/lib/apt/lists/*
# grab gosu for easy step-down from root (https://github.com/tianon/gosu/releases)
ENV GOSU_VERSION 1.10
# grab "js-yaml" for parsing mongod's YAML config files (https://github.com/nodeca/js-yaml/releases)
ENV JSYAML_VERSION 3.10.0
RUN set -ex; \
\
apt-get update; \
apt-get install -y --no-install-recommends \
wget \
; \
rm -rf /var/lib/apt/lists/*; \
\
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
command -v gpgconf && gpgconf --kill all || :; \
rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc; \
chmod +x /usr/local/bin/gosu; \
gosu nobody true; \
\
wget -O /js-yaml.js "https://github.com/nodeca/js-yaml/raw/${JSYAML_VERSION}/dist/js-yaml.js"; \
# TODO 这里有一些下载验证
\
apt-get purge -y --auto-remove wget
RUN mkdir /docker-entrypoint-initdb.d
ENV GPG_KEYS \
# pub rsa4096 2018-04-18 [SC] [expires: 2023-04-17]
# E162 F504 A20C DF15 827F 718D 4B7C 549A 058F 8B6B
# uid [ unknown] MongoDB 4.2 Release Signing Key <packaging@mongodb.com>
E162F504A20CDF15827F718D4B7C549A058F8B6B
# https://docs.mongodb.com/manual/tutorial/verify-mongodb-packages/#download-then-import-the-key-file
RUN set -ex; \
export GNUPGHOME="$(mktemp -d)"; \
for key in $GPG_KEYS; do \
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done; \
gpg --batch --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg; \
command -v gpgconf && gpgconf --kill all || :; \
rm -r "$GNUPGHOME"; \
apt-key list
# 允许构建时覆盖 (例如:使用MongoDB企业版来构建镜像)
# Options for MONGO_PACKAGE: mongodb-org OR mongodb-enterprise
# Options for MONGO_REPO: repo.mongodb.org OR repo.mongodb.com
# 例如:docker build --build-arg MONGO_PACKAGE=mongodb-enterprise --build-arg MONGO_REPO=repo.mongodb.com .
ARG MONGO_PACKAGE=mongodb-org-unstable
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 4.1
ENV MONGO_VERSION 4.1.5
RUN echo "deb http://$MONGO_REPO/apt/ubuntu xenial/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR multiverse" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN set -x \
&& apt-get update \
&& apt-get install -y \
${MONGO_PACKAGE}=$MONGO_VERSION \
${MONGO_PACKAGE}-server=$MONGO_VERSION \
${MONGO_PACKAGE}-shell=$MONGO_VERSION \
${MONGO_PACKAGE}-mongos=$MONGO_VERSION \
${MONGO_PACKAGE}-tools=$MONGO_VERSION \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mongodb \
&& mv /etc/mongod.conf /etc/mongod.conf.orig
RUN mkdir -p /data/db /data/configdb \
&& chown -R mongodb:mongodb /data/db /data/configdb
VOLUME /data/db /data/configdb
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
# 暴露 mongo 服务器端口
EXPOSE 27017
CMD ["mongod"]
WindowsServer 版本:
FROM microsoft/windowsservercore:1803
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
ENV MONGO_VERSION 4.1.9
ENV MONGO_DOWNLOAD_URL https://downloads.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.1.9-signed.msi
ENV MONGO_DOWNLOAD_SHA256 af71f53e1a1a92756b9c6c36c15cd6ec6be3cd292ef3636c8cd75d0216d0079f
RUN Write-Host ('Downloading {0} ...' -f $env:MONGO_DOWNLOAD_URL); \
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; \
(New-Object System.Net.WebClient).DownloadFile($env:MONGO_DOWNLOAD_URL, 'mongo.msi'); \
\
Write-Host ('Verifying sha256 ({0}) ...' -f $env:MONGO_DOWNLOAD_SHA256); \
if ((Get-FileHash mongo.msi -Algorithm sha256).Hash -ne $env:MONGO_DOWNLOAD_SHA256) { \
Write-Host 'FAILED!'; \
exit 1; \
}; \
\
Write-Host 'Installing ...'; \
# https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/#install-mongodb-community-edition
Start-Process msiexec -Wait \
-ArgumentList @( \
'/i', \
'mongo.msi', \
'/quiet', \
'/qn', \
'INSTALLLOCATION=C:\mongodb', \
'ADDLOCAL=all' \
); \
$env:PATH = 'C:\mongodb\bin;' + $env:PATH; \
[Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine); \
\
Write-Host 'Verifying install ...'; \
Write-Host ' mongo --version'; mongo --version; \
Write-Host ' mongod --version'; mongod --version; \
\
Write-Host 'Removing ...'; \
Remove-Item C:\mongodb\bin\*.pdb -Force; \
Remove-Item C:\windows\installer\*.msi -Force; \
Remove-Item mongo.msi -Force; \
\
Write-Host 'Complete.';
VOLUME C:\\data\\db C:\\data\\configdb
# TODO docker-entrypoint.ps1 ? (for "docker run <image> --flag --flag --flag")
EXPOSE 27017
CMD ["mongod", "--bind_ip_all"]
3、通过 Dockerfile 的 docker build 构建一个 mongodb 镜像,这儿可以自定义镜像名,输入命令 “ docker build -f /opt/dockerfile/mongo/mongodockerfile -t huazai/db/mongo:v1.0 . ” 进行构建,部分构建内容如下:
[root@localhost mongo]# docker build -f /opt/dockerfile/mongo/mongodockerfile -t huazai/db/mongo:v1.0 .
Sending build context to Docker daemon 16.38kB
Step 1/22 : FROM ubuntu:xenial
xenial: Pulling from library/ubuntu
18d680d61657: Pull complete
0addb6fece63: Pull complete
78e58219b215: Pull complete
eb6959a66df2: Pull complete
Digest: sha256:76702ec53c5e7771ba3f2c4f6152c3796c142af2b3cb1a02fce66c697db24f12
Status: Downloaded newer image for ubuntu:xenial
---> 4a689991aa24
# 此处省去 N 行
---> Running in e96c256bd975
Removing intermediate container e96c256bd975
---> 9225772cec3a
Step 22/22 : CMD ["mongod"]
---> Running in 476ef3e814ea
Removing intermediate container 476ef3e814ea
---> 00eb8361cc1c
Successfully built 00eb8361cc1c
Successfully tagged huazai/db/mongo:v1.0
构建成功后,输入命令 “ docker images huazai/db/mongo ” ,可以在本地的镜像列表种查找到方才构建 mongo 镜像,内容如下:
[root@localhost mongo]# docker images huazai/db/mongo
REPOSITORY TAG IMAGE ID CREATED SIZE
huazai/db/mongo v1.0 00eb8361cc1c About a minute ago 390MB
测试 Mongo 镜像
1、创建 Mongo 相关目录,后面用于数据转递与共享的容器数据卷,
输入命令 “ mkdir -p /opt/mongo/data ” ,内容如下:
[root@localhost mongo]# mkdir -p /opt/mongo/data
[root@localhost mongo]# cd /opt/mongo/
[root@localhost mongo]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 6 02:09 data
[root@localhost mongo]#
目录说明:
data | 启动mongo容器服务时,data目录将映射为mongo容器配置的 /data/db 的目录,以达到数据转递共享与数据存储的目的; |
2、启动镜像,创建一个容器实例,输入命令 “ docker run -it -d -p 27017:27017 -v /opt/mongo/data:/data/db --privileged=true --name mongo01 镜像ID ” ,启动后会产生一个 ID ,内容如下:
[root@localhost data]# docker run -it -d -p 27017:27017 -v /opt/mongo/data:/data/db --privileged=true --name mongo01 00eb8361cc1c
d0301ae9af2fd703164824eb1bffe8ca6cddb6cba08c5214e059c0a3ef187cbe
[root@localhost data]#
3、连接 mongo 服务并操作,这儿只为测试通过 Dockerfile 构建的 mongo 服务是否可用,如果需要具体的关于 mongodb NoSQL方面的操作,请参考博主其它有关的详细描述,直接输入命令 “ docker exec -it mongo01 /bin/bash ” ,再连接到 mongo 服务,输入命令 “ mongo ”,连接上后,就可以对 mongo 服务进行操作了,内容如下:
[root@localhost data]# docker exec -it mongo01 /bin/bash
root@d0301ae9af2f:/# mongo
MongoDB shell version v4.1.5
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("e81895e9-c12a-4c53-86db-579b12cc5110") }
MongoDB server version: 4.1.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten]
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten] ** NOTE: This is a development version (4.1.5) of MongoDB.
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten] ** Not recommended for production.
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten]
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2018-12-06T07:21:54.307+0000 I CONTROL [initandlisten]
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten]
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten]
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-12-06T07:21:54.308+0000 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
4、最后再验证方才配置的数据的转递共享是否成功,进入到方才创建的目录 “ data ” ,如果出现如下内容,说明成功的:
[root@localhost mongo]# cd data/
[root@localhost data]# ll
total 244
-rw-------. 1 polkitd input 16384 Dec 6 02:22 collection-0-9124788741644741248.wt
-rw-------. 1 polkitd input 16384 Dec 6 02:22 collection-2-9124788741644741248.wt
-rw-------. 1 polkitd input 16384 Dec 6 02:26 collection-4-9124788741644741248.wt
drwx------. 2 polkitd input 71 Dec 6 02:36 diagnostic.data
-rw-------. 1 polkitd input 16384 Dec 6 02:22 index-1-9124788741644741248.wt
-rw-------. 1 polkitd input 16384 Dec 6 02:22 index-3-9124788741644741248.wt
-rw-------. 1 polkitd input 16384 Dec 6 02:26 index-5-9124788741644741248.wt
-rw-------. 1 polkitd input 16384 Dec 6 02:26 index-6-9124788741644741248.wt
drwx------. 2 polkitd input 110 Dec 6 02:21 journal
-rw-------. 1 polkitd input 16384 Dec 6 02:22 _mdb_catalog.wt
-rw-------. 1 polkitd input 2 Dec 6 02:21 mongod.lock
-rw-------. 1 polkitd input 32768 Dec 6 02:26 sizeStorer.wt
-rw-------. 1 polkitd input 114 Dec 6 02:21 storage.bson
-rw-------. 1 polkitd input 45 Dec 6 02:21 WiredTiger
-rw-------. 1 polkitd input 4096 Dec 6 02:21 WiredTigerLAS.wt
-rw-------. 1 polkitd input 21 Dec 6 02:21 WiredTiger.lock
-rw-------. 1 polkitd input 1065 Dec 6 02:26 WiredTiger.turtle
-rw-------. 1 polkitd input 61440 Dec 6 02:26 WiredTiger.wt
[root@localhost data]#
好了,关于 Docker系列(二十三)——Docker实例五Docker安装MongoDB实例 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | who.seek.me@java98k.vip |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/84764328 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |