docker network连接自定义镜像和mongo镜像
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. 相关文件下载提供
链接: 文件连接 提取码: a8f6
## 生成镜像
docker build -t py_11.1 .
镜像开始生成
镜像成功生成
1.3 拉取mongo镜像
这里已经拉取过了。。。
由于要创建自定义镜像和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自定义网络
- 自动DNS解析容器名称到IP地址,例如我们连接mongo服务器时,可以通过
容器名:端口
的形式,拼接url - 方便管理,在同一网络下的主机可以相互连通
2.2自定义网络(案例)
创建一个自定义网络,subnet
参数指定网络的范围以及网络前缀,--bridge
指定网络的类型,--gateway
指定当前网络的网关地址
首先查看原有的网络
docker network ls
创建自定义网络
docker network create lcgnet
查看网络详情
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