20250110doker学习记录
1.本机创建tts环境。用conda.
0.1安装。我都用的默认,你也可以。我安装过一次,如果修复,后面加 -u
bash Anaconda3-2024.10-1-Linux-x86_64.sh
等待一会。
(base) kt@kt4028:~/Downloads$ conda -V
conda 24.9.2
学习资源
Conda 常用命令大全(非常详细)零基础入门到精通,收藏这一篇就够了_conda命令-CSDN博客
1.1设置镜像源,防止 出错。
anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
1.1.1查看当前源:
kt@kt4028:~/anaconda3$ conda config --show channels
channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- https://repo.anaconda.com/pkgs/main- https://repo.anaconda.com/pkgs/r
kt@kt4028:~/anaconda3$
1.1.2删除所有自定义源
kt@kt4028:~/anaconda3$ conda config --remove-key channels
kt@kt4028:~/anaconda3$ conda config --show channels
channels:- https://repo.anaconda.com/pkgs/main- https://repo.anaconda.com/pkgs/r
kt@kt4028:~/anaconda3$
1.1.3添加镜像
#添加镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2#终端显示包从哪个channel下载,以及下载地址是什么
conda config --set show_channel_urls yes
kt@kt4028:~$ conda config --show channels
channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- defaults- https://repo.anaconda.com/pkgs/main- https://repo.anaconda.com/pkgs/r
kt@kt4028:~$
或通过手动方式
(base) kt@kt4028:~/Downloads$ cat ~/.condarc
channels:- defaults
show_channel_urls: true
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
(base) kt@kt4028:~/Downloads$
1.1.4 创建环境
(base) kt@kt4028:~/Downloads$ conda create -n tts-env python=3.12 -y
1.1.5激活
(base) kt@kt4028:~/Downloads$ conda activate tts-env
(tts-env) kt@kt4028:~/Downloads$
1.1.6防止自动进入base环境
(base) kt@kt4028:~$ conda config --set auto_activate_base false
(base) kt@kt4028:~$
1.1.7查看默认位置之下:如上面的tts-env
/home/kt/anaconda3/envs
2.建立 本地文件夹
kt@kt4028:~$ pwd
/home/kt
kt@kt4028:~$ mkdir -p myproject/tts
kt@kt4028:~$
这条命令会执行以下操作:
1. 检查 myproject 文件夹是否存在,如果不存在,则创建它。
2. 在 myproject 文件夹内创建 tts 文件夹。使用 mkdir -p 的好处是,即使某些中间目录已经存在,命令也不会报错,只会创建那些不存在的目录。这样可以确保命令的健壮性,避免因目录已存在而导致的错误。
3.拉取git项目
3.1安装git
win
git的安装与配置教程-超详细版_git安装及配置教程-CSDN博客
ubuntu
https://blog.csdn.net/wqzbxh/article/details/134903221?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522b98311b40979a9a3385d39c3eb0e4127%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=b98311b40979a9a3385d39c3eb0e4127&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-134903221-null-null.142^v101^pc_search_result_base1&utm_term=ubuntu%E5%AE%89%E8%A3%85git&spm=1018.2226.3001.4187https://blog.csdn.net/wqzbxh/article/details/134903221?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522b98311b40979a9a3385d39c3eb0e4127%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=b98311b40979a9a3385d39c3eb0e4127&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-134903221-null-null.142%5Ev101%5Epc_search_result_base1&utm_term=ubuntu%E5%AE%89%E8%A3%85git&spm=1018.2226.3001.4187
GitHub新手用法详解【适合新手入门-建议收藏!!!】-CSDN博客
3.2目标:
https://github.com/2noise/ChatTTS.git
操作:
kt@kt4028:~$ cd myproject
kt@kt4028:~/myproject$ ls
tts
kt@kt4028:~/myproject$ cd tts
kt@kt4028:~/myproject/tts$ git clone https://github.com/2noise/ChatTTS.git
Cloning into 'ChatTTS'...
remote: Enumerating objects: 2676, done.
remote: Counting objects: 100% (745/745), done.
remote: Compressing objects: 100% (304/304), done.
remote: Total 2676 (delta 522), reused 441 (delta 441), pack-reused 1931 (from 3)
Receiving objects: 100% (2676/2676), 8.02 MiB | 361.00 KiB/s, done.
Resolving deltas: 100% (1602/1602), done.
kt@kt4028:~/myproject/tts$
4.pycharm完成环境等部署与测试
为了简单,不使用原来的内容只是让其跑起来。
无法上图。描述一下:
新建项目,选择/home/kt/myproject/tts/ChatTTS
使用环境:tts-env
确定,选是。
上一个测试代码:向数据库中写入数据。具体原因后边会用
参考
docker-compose 一个实例-CSDN博客
代码
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure# 定义MongoDB连接信息
write_host = 'mongodb://admin:password@10.73.30.241:27017/?authSource=admin'
read_host = 'mongodb://admin:password@10.73.30.241:27017/?authSource=admin'
database_name = 'aa' # 替换为你的数据库名称
collection_name = 'aa' # 替换为你的集合名称# 连接到27017端口并插入100条数据
try:write_client = MongoClient(write_host)write_db = write_client[database_name]write_collection = write_db[collection_name]# 插入100条测试数据for i in range(100):test_data = {"name": f"test_{i}", "value": i}write_collection.insert_one(test_data)print(f"100 documents inserted into {write_host}")
except ConnectionFailure as e:print(f"Failed to connect to {write_host}: {e}")
finally:write_client.close()# 从27017端口读取数据
try:read_client = MongoClient(read_host)read_db = read_client[database_name]read_collection = read_db[collection_name]# 读取集合中的所有文档documents = read_collection.find()# 打印文档print(f"Data from {read_host}:")for doc in documents:print(doc)print("\n" + "-"*80 + "\n")except ConnectionFailure as e:print(f"Failed to connect to {read_host}: {e}")
finally:read_client.close()
测试合格。主要原因是为了同步卷使用的。
4.docfile文件的建立。应该与现有的系统对应:ubuntu
4.1 Dockerfile内容参考
FROM ubuntu:20.04# 设置工作目录
WORKDIR /app# 安装必要的软件包
RUN apt-get update && \apt-get install -y \wget \&& apt-get clean \&& rm -rf /var/lib/apt/lists/*# 下载并安装Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /miniconda.sh && \/bin/bash /miniconda.sh -b -p /opt/conda && \rm /miniconda.sh && \/opt/conda/bin/conda clean --all -y# 设置环境变量
ENV PATH=/opt/conda/bin:$PATH# 初始化conda
RUN /opt/conda/bin/conda init bash# 其他必要的设置(根据项目实际需求添加)# 注意:不再设置默认命令CMD,因为后期会手动运行脚本
4.2 start.sh不用了
#!/bin/bash# 激活虚拟环境
source /app/tts-env/bin/activate# 运行Python脚本
python /app/ChatTTS/ceshi.py
4.3 生成images
kt@kt4028:~$ vi Dockerfile
kt@kt4028:~$ vi start.sh----------------------网络的因素,要使用宿主机上的网docker build --network="host" -t tts-i
4.4 测试挂载情况,因为要测试网络所以用到本地。
docker run -it --network='host' --name my-tts-container -v /home/kt/myproject/tts/ChatTTS:/app/ChatTTS -v /home/kt/anaconda3/envs/tts-env:/opt/conda/envs/tts-env my-tts-image /bin/bash
4.5进入后有个错误
运行
ceshi.py
时,pymongo
依赖的cryptography
库遇到了与 OpenSSL 3.0 相关的问题。具体来说,OpenSSL 3.0 的 legacy provider 未能成功加载,这通常是因为 OpenSSL 3.0 默认不启用 legacy provider,而某些库(如cryptography
)在某些情况下可能需要它。export CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
5.将容器打包成一个新镜像
kt@kt4028:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ae93b7f7af4 my-tts-image "/bin/bash" 6 minutes ago Up 3 seconds my-tts-container
c9652fe162bd mongo-express "/sbin/tini -- /dock…" 23 hours ago Up 23 hours 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp my-mongo-express
d45df328cd77 mongo:latest "docker-entrypoint.s…" 23 hours ago Up 23 hours 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp my-mongo
kt@kt4028:~$ docker commit my-tts-container tts-i:1.0
sha256:fcd3aa9d1c0a84999885be2f1d3ff0642073873c81a9fd095f4505521d36247c
kt@kt4028:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tts-i 1.0 fcd3aa9d1c0a 14 seconds ago 608MB
5.2再验证
docker run -it --network='host' --name tts-i_1 -v /home/kt/myproject/tts/ChatTTS:/app/ChatTTS -v /home/kt/anaconda3/envs/tts-env:/opt/conda/envs/tts-env tts-i /bin/bash
6.重新生成
FROM ubuntu:20.04# 设置工作目录
WORKDIR /app# 安装必要的软件包
RUN apt-get update && \apt-get install -y \wget \&& apt-get clean \&& rm -rf /var/lib/apt/lists/*# 下载并安装Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /miniconda.sh && \/bin/bash /miniconda.sh -b -p /opt/conda && \rm /miniconda.sh && \/opt/conda/bin/conda clean --all -y# 设置环境变量
ENV PATH=/opt/conda/bin:$PATH# 初始化conda
RUN /opt/conda/bin/conda init bash# 自动激活tts-env环境
RUN echo 'source /opt/conda/etc/profile.d/conda.sh && conda activate tts-env' >> ~/.bashrc# 修复 mongo错误
ENV CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1# 其他必要的设置(根据项目实际需求添加)# 注意:不再设置默认命令CMD,因为后期会手动运行脚本
测试成功
kt@kt4028:~$ docker build --network="host" -t tts-ii /home/kt
[+] Building 2.5s (10/10) FINISHED docker:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 904B 0.0s=> [internal] load metadata for docker.io/library/ubuntu:20.04 2.4s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/6] FROM docker.io/library/ubuntu:20.04@sha256:8e5c4f0285ecbb4ead07 0.0s=> CACHED [2/6] WORKDIR /app 0.0s=> CACHED [3/6] RUN apt-get update && apt-get install -y wget 0.0s=> CACHED [4/6] RUN wget https://repo.anaconda.com/miniconda/Miniconda3- 0.0s=> CACHED [5/6] RUN /opt/conda/bin/conda init bash 0.0s=> [6/6] RUN echo 'source /opt/conda/etc/profile.d/conda.sh && conda act 0.1s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:386459b96e87b0bf1f94b5aa130afacd1af989e98291b 0.0s=> => naming to docker.io/library/tts-ii 0.0s
kt@kt4028:~$ docker run -it --network='host' --name my-tts-ii -v /home/kt/myproject/tts/ChatTTS:/app/ChatTTS -v /home/kt/anaconda3/envs/tts-env:/opt/conda/envs/tts-env tts-ii /bin/bash(tts-env) root@kt4028:/app# cd ChatTTS
(tts-env) root@kt4028:/app/ChatTTS# python ceshi.py
100 documents inserted into mongodb://admin:password@10.73.30.241:27017/?authSource=admin
Data from mongodb://admin:password@10.73.30.241:27017/?authSource=admin:
{'_id': ObjectId('6780d3fc0b669fd899e6ca2e'), 'name': 'test_0', 'value': 0}
{'_id': ObjectId('6780d3fc0b669fd899e6ca2f'), 'name': 'test_1', 'value': 1}
{'_id': ObjectId('6780d3fc0b669fd899e6ca30'), 'name': 'test_2', 'value': 2}
{'_id': ObjectId('6780d3fc0b669fd899e6ca31'), 'name': 'test_3', 'value': 3}
{'_id': ObjectId('6780d3fc0b669fd899e6ca32'), 'name': 'test_4', 'value': 4}
{'_id': ObjectId('6780d3fc0b669fd899e6ca33'), 'name': 'test_5', 'value': 5}
今天先这样,后天。加在同一网络下,内部读取,不在走网络