docker篇---docker network连接自定义镜像和mongo镜像

docker network连接自定义镜像和mongo镜像

  • 1. 创建自定义镜像
    • 1.1 Dockerfile文件
    • 1.2. 相关文件下载提供
    • 1.3 拉取mongo镜像
  • 2. docker network
    • 2.1自定义网络
    • 2.2自定义网络(案例)
  • 3. 测试pymongo

1. 创建自定义镜像

1.1 Dockerfile文件

FROM pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime

MAINTAINER yyq

ENV DEBIAN_FRONTEND=noninteractive
#更新pip,并且换源
RUN pip install pip -U # 升级pip到最新版本
RUN pip install scrapy -i https://pypi.mirrors.ustc.edu.cn/simple/

#为了运行apt-get update
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
COPY sources.list /etc/apt/sources.list
RUN chmod a+x /etc/apt/sources.list

#更新apt
RUN apt-get update
#安装依赖
RUN apt-get install gcc -y && apt-get install make -y \
		&& apt-get install vim -y && apt-get install openssl -y \
		&& apt-get install libssl-dev -y && apt-get install python3-pip -y

RUN apt-get install vim ffmpeg libsm6 libxext6 cron openssh-server -y
RUN pip install aio-pika==7.1.0 asyncio==3.4.3 APScheduler==3.7.0 matplotlib==3.3.4 opencv-python==4.5.2.52 Pillow==8.2.0 pika==1.2.0 pymongo==3.11.4 requests==2.25.1

# /usr/share/zoneinfo/Asia/Shanghai 可能会没有权限,需要拷贝到当前Dockerfile同级目录
COPY Shanghai /etc/localtime
RUN echo 'Asia/Shanghai'>/etc/timezone

RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/'  /etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
RUN echo "root:123456" | chpasswd

RUN echo  "alias ll='ls -l'" >> ~/.bash_profile
RUN /bin/bash -c 'source  ~/.bash_profile;'

CMD [""]

1.2. 相关文件下载提供

链接: 文件连接 提取码: lcch
docker篇---docker network连接自定义镜像和mongo镜像_第1张图片## 生成镜像

docker build -t py_11.1 .

镜像开始生成

镜像成功生成
在这里插入图片描述

1.3 拉取mongo镜像

docker篇---docker network连接自定义镜像和mongo镜像_第2张图片
这里已经拉取过了。。。

由于要创建自定义镜像和mongo镜像 分别生成的容器之间相互关联,我用的是docker network

2. docker network

通过docker network指令,可以方便的管理docker服务器上的网络

docker network inspect			 # 根据网络的ID展示网络的详细信息
docker network ls				 # 展示所有的网络,以列表形式
docker network create			 # 创建一个自定义网络
docker network connect			 # 连接一个容器到指定网络上
docker network disconnect 		 # 让一个容器从指定网络上断开
docker network prune			 # 删除所有未使用的网络
docker network rm 				 # 根据网络的ID,删除一个或多个网络

2.1自定义网络

  1. 自动DNS解析容器名称到IP地址,例如我们连接mongo服务器时,可以通过容器名:端口的形式,拼接url
  2. 方便管理,在同一网络下的主机可以相互连通

2.2自定义网络(案例)

创建一个自定义网络,subnet参数指定网络的范围以及网络前缀,--bridge指定网络的类型,--gateway指定当前网络的网关地址

首先查看原有的网络

docker network ls

docker篇---docker network连接自定义镜像和mongo镜像_第3张图片
创建自定义网络

docker network create lcgnet

docker篇---docker network连接自定义镜像和mongo镜像_第4张图片
查看网络详情

docker network inspect lcgnet


启动一个mongo服务器,通过–network在启动时连接至自定义网络-

docker run -itd --name mongo -p 27019:27017 --network lcgnet --network-alias lcgsky1 mongo:3.4 --auth

参数说明:

-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
–auth:需要密码才能访问容器服务。

注意要加上 --network lcgnet
在这里插入图片描述
然后执行

docker exec -it mongo mongo admin

db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

db.auth('admin', '123456')

我们启动完成后,发现mongo已经连接至自定义网络

启动自定义镜像生成的容器

docker run -it --name py_11.1_bridge --network lcgnet -v /home/slifeai/project_object/test/workspace/:/workspace --runtime=nvidia py_11.1:latest /bin/bash

注意要加上 --network lcgnet


再一次启动完成后,发现mongo和自定义容器都已经连接至自定义网络

3. 测试pymongo

import pymongo


# 连接mongo
client = pymongo.MongoClient('192.168.0.240', 27019)
print(client)
# 连接集合
base_name = client['admin']
# 认证
base_name.authenticate("admin", "123456", mechanism="SCRAM-SHA-1")
# 连接表
table_name_ = "trashBin_2022-04-24"
table_name = base_name[table_name_]
print(table_name.find_one())


连接成功,并且查询成功

注:mongo版本: 在3.9版本及以前是正常运行的,而在4.0版本会出错,使用的时候注意版本

pip install pymongo==3.11.4

在这里插入图片描述

你可能感兴趣的:(docker,pymongo,mongodb)