Docker系列(二十三)——Docker实例五Docker安装MongoDB实例

                                   《 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
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值