一、待解决问题
1.1 问题描述
近期使用一些github开源软件的功能时,需要用到docker,将安装过程与使用过程记录如下。
1.2 解决方法
(1)安装docker
(2)测试docker
(3)实例部署:MTranServer
二、方法详述
2.1 必要说明
2.1.1 docker的一些常见命令
更多常见命令看文末
。
# 查看docker服务运行状态
sudo systemctl status docker
# 重启docker服务
sudo systemctl restart docker
# 查看当前运行的容器
sudo docker ps
sudo docker ps -a
# 查看容器的资源占用情况
sudo docker stats
# 启动、关闭、重启特定容器
sudo docker start <your_container>
sudo docker stop <your_container>
sudo docker restart <your_container>
2.1.2 官方docker hub镜像库锁区解决
查看(7)配置国内docker镜像库(可选)
2.2 应用步骤
2.2.1 安装docker
首先在docker官网和csdn上找到相应的安装教程:
Install Docker Engine on Ubuntu
Ubuntu 22.04下Docker安装(最全指引)
结合两者,按照以下步骤开始安装:
(1)删除旧版本
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
(2)安装相关依赖
# Add Docker's GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
sudo apt update
sudo apt-get update
(3)安装docker包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
(4)docker命令补全(可选)
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
source /etc/bash_completion.d/docker.sh
(5)如何删除docker(备用)
# Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages:
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# Images, containers, volumes, or custom configuration files on your host aren't automatically removed. To delete all images, containers, and volumes:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# Remove source list and keyrings
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc
(6)安装docker desktop
用于可视化管理docker容器,和预装的docker engine不兼容,不好用
先去官方链接下载ubuntu amd64的deb安装包
在下载目录开始安装:
sudo dpkg -i docker-desktop-amd64.deb
报错:
dpkg: 依赖关系问题使得 docker-desktop 的配置工作不能继续:
docker-desktop 依赖于 qemu-system-x86 (>= 5.2.0);然而:
未安装软件包 qemu-system-x86。
docker-desktop 依赖于 pass;然而:
未安装软件包 pass。
docker-desktop 依赖于 uidmap;然而:
未安装软件包 uidmap。
自动修复/下载没有的依赖包:
sudo apt --fix-broken install
再次docker-desktop安装,提示一堆,没有报错,不知道是否成功安装,先记录一下:
(正在读取数据库 ... 系统当前共安装有 233010 个文件和目录。)
准备解压 docker-desktop-amd64.deb ...
正在解压 docker-desktop (4.41.2-191736) 并覆盖 (4.41.2-191736) ...
正在设置 docker-desktop (4.41.2-191736) ...
Enabling use of privileged ports by Docker Desktop
kubernetes.docker.internal already in /etc/hosts
Reloading systemd daemon for logged in users
Done reloading systemd daemon for logged in users
Skipping the installation of the AppArmor profile as this version of AppArmor does not seem to support the profile bundled with Docker Desktop.
正在处理用于 mailcap (3.70+nmu1ubuntu1) 的触发器 ...
正在处理用于 gnome-menus (3.36.0-1ubuntu3) 的触发器 ...
正在处理用于 desktop-file-utils (0.26-1ubuntu3) 的触发器 ...
ubuntu桌面左下角可以点击显示应用程序
,并搜索docker desktop
,将其添加到收藏栏。
打开后,没有界面如下:
无法查看到正在运行的docker容器,不好用,删除!!!
sudo dpkg -r docker-desktop
sudo dpkg -P docker-desktop
rm -rf ~/.docker
(7)配置国内docker镜像库(可选)
知乎链接:Docker/DockerHub 国内镜像源/加速列表
腾讯云链接:Docker/DockerHub 国内镜像源/加速列表(5月9日更新-长期维护)
此次采用的国内镜像:docker.xuanyuan.me
不想配置的话,还可以在这个页面上搜索相关的镜像直接下载。
[1] 配置Docker镜像加速
以下是具体配置命令,需在Linux终端中执行:
# 创建Docker配置目录
sudo mkdir -p /etc/docker
# 编辑Docker配置文件,添加镜像加速地址
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
# 修改文件权限
sudo chmod 777 /etc/docker/daemon.json
# 重启Docker服务以使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
[2] 配置效果验证
# 测试下载镜像速度
sudo docker pull redis
(8)可视化容器管理工具Portainer(可选)
这一步必须在(7)配置国内docker镜像库后方可进行
Portainer CE 是一款免费的开源产品,适合个人用户、小型团队和非商业用途。它提供了一个用户友好的 Web 界面,用于管理 Docker 容器、镜像、网络和卷,适合大多数 Docker 管理需求。它提供了一套全面的工具和功能,无需任何许可费用。
安装参考链接:https://cn.linux-console.net/?p=34561
sudo docker volume create portainer_data
sudo docker run -d -p 8000:8000 -p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
安装结果:
Unable to find image 'portainer/portainer-ce:latest' locally
latest: Pulling from portainer/portainer-ce
c02951246260: Pull complete
b7c5ecc05946: Pull complete
04de093ad5ed: Pull complete
a9ff7abff372: Pull complete
e09df2601140: Pull complete
54675ba571ac: Pull complete
886c883b7538: Pull complete
93b4ed907f92: Pull complete
f126cb2940fd: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:ebead33595e425f88b1d02a74e4cc65a6d295e96c3643bb176dca7cb64bc36b0
Status: Downloaded newer image for portainer/portainer-ce:latest
0d5b8d39077ea427bf3a73292bd057533dca66575dc5cae01b15b04065cfd516
查看portainer
启动情况:
sudo docker ps
结果,正在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d5b8d39077e portainer/portainer-ce:latest "/portainer" About a minute ago Up About a minute 0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp, 0.0.0.0:9443->9443/tcp, [::]:9443->9443/tcp, 9000/tcp portainer
通过浏览器网址https://localhost:9443
进入,提示风险,接受并进入:
首次登录时,可能会遇到这样的原因:
当您第一次安装Portainer时,如果您没有在5分钟内登录并完成初始设置,容器中的Portainer服务将停止。这是一种安全措施,用于防止恶意用户接管新的Portainer安装并自行配置它。为了避免发生这种情况,我们建议在第一次启动Portainer容器后的5分钟内完成初始设置。
关闭portainer
容器,并重新启动,在5min内登录https://localhost:9443
:
sudo docker stop portainer
sudo docker start portainer
设置用户名和密码(这个密码要设置12位就很不人性化),然后登录,看到如下界面,可以很方便地管理容器的运行:
2.2.2 测试docker
#查看Docker版本
sudo docker version
结果:
Client: Docker Engine - Community
Version: 28.1.1
API version: 1.49
Go version: go1.23.8
Git commit: 4eba377
Built: Fri Apr 18 09:52:10 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.1.1
API version: 1.49 (minimum version 1.24)
Go version: go1.23.8
Git commit: 01f442b
Built: Fri Apr 18 09:52:10 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.27
GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
#查看Docker运行状态
sudo systemctl status docker
结果:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2025-05-25 10:57:20 CST; 2min 22s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 12774 (dockerd)
Tasks: 20
Memory: 23.1M
CPU: 358ms
CGroup: /system.slice/docker.service
└─12774 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
运行一个测试实例
sudo docker run hello-world
结果:
应该是因为docker锁区了,无法执行这一步,主要原因应该是无法从docker的官方镜像库(docker hub
)拉取hello-world
镜像到本地。若执行了(7)配置国内docker镜像库
应该可行。
2.2.3 实例部署:MTranServer
如果已经下载部署了镜像,并下载了对应的翻译模型,直接在 mtranserver
目录内打开命令行,然后直接跳转到下文的 (5) 启动服务
。
github链接:MTransServer
(1)准备
mkdir mtranserver
cd mtranserver
touch compose.yml
mkdir models
(2)编辑yml文件
用编辑器打开 compose.yml 文件,写入以下内容
修改下面的
your_token
为你自己设置的一个密码,使用英文大小写和数字。自己内网可以不设置,如果是云服务器
强烈建议设置一个密码,保护服务以免被扫到、攻击、滥用
。如果需要更改端口,修改
ports
的值,比如修改为9999:8989
表示将服务端口映射到本机 9999 端口。
services:
mtranserver:
image: xxnuo/mtranserver:latest
container_name: mtranserver
restart: unless-stopped
ports:
- "8989:8989"
volumes:
- ./models:/app/models
environment:
- CORE_API_TOKEN=your_token
- CORE_NUM_WORKERS=1
(3)下载应用镜像
从国内镜像下载,然后加载镜像
docker load -i mtranserver.image.tar
1287fbecdfcc: Loading layer 77.84MB/77.84MB
af44017e7a4f: Loading layer 1.536kB/1.536kB
12a56f4f9f05: Loading layer 46.59MB/46.59MB
5f70bf18a086: Loading layer 1.024kB/1.024kB
6df063de812a: Loading layer 2.048kB/2.048kB
Loaded image: xxnuo/mtranserver:latest
(4)下载翻译模型
中国大陆模型镜像下载地址
下载了中译英
和英译中
模型。
下载模型后,解压每个语言的压缩包到 models 文件夹内。
保证文件结构是这样:
compose.yml
models/
├── enzh
│ ├── lex.50.50.enzh.s2t.bin
│ ├── model.enzh.intgemm.alphas.bin
│ └── vocab.enzh.spm
(5)启动服务
sudo docker compose up
[+] Running 2/2
✔ Network mtranserver_default Created 0.1s
✔ Container mtranserver Created 0.0s
Attaching to mtranserver
mtranserver | (2025-05-25 13:30:32) [INFO ] Starting Translation Service
mtranserver | (2025-05-25 13:30:32) [INFO ] Service port: 8989
mtranserver | (2025-05-25 13:30:32) [INFO ] Worker threads: 1
mtranserver | Successfully loaded model for language pair: zhen
mtranserver | Successfully loaded model for language pair: enzh
mtranserver | (2025-05-25 13:30:33) [INFO ] Models loaded.
mtranserver | (2025-05-25 13:30:33) [INFO ] Max parallel translations: 16
然后按 Ctrl+C
停止服务运行,然后正式启动服务器
sudo docker compose up -d
[+] Running 1/1
✔ Container mtranserver Started
用curl
在命令行中尝试调用MtransServer
,其中your_token
为compose.yml
文件中设置的密钥。
curl -X POST "http://localhost:8989/translate" \
-H "Content-Type: application/json" \
-H "Authorization: your_token" \
-d '{
"from": "en",
"to": "zh",
"text": "Hello, world!"
}'
结果:
{"result":"你好,世界!"}
python中调用测试代码:
import requests
# 设置 API URL 和令牌
url = "http://localhost:8989/translate"
headers = {
"Content-Type": "application/json",
"Authorization": "your_token" # 替换为你的令牌
}
data = {
"from": "en",
"to": "zh",
"text": "hello,WOrld ! "
}
# 发送 POST 请求
response = requests.post(url, json=data, headers=headers)
# 检查响应
if response.status_code == 200:
result = response.json()
print("翻译结果:", result.get("result"))
else:
print("翻译失败,状态码:", response.status_code)
print("错误信息:", response.text)
三、疑问
- docker的一些常用命令?
参考链接:https://www.runoob.com/docker/docker-container-usage.html
命令 | 功能 | 示例 |
---|---|---|
docker run | 启动一个新的容器并运行命令 | docker run -d ubuntu |
docker ps | 列出当前正在运行的容器 | docker ps |
docker ps -a | 列出所有容器(包括已停止的容器) | docker ps -a |
docker build | 使用 Dockerfile 构建镜像 | docker build -t my-image . |
docker images | 列出本地存储的所有镜像 | docker images |
docker pull | 从 Docker 仓库拉取镜像 | docker pull ubuntu |
docker push | 将镜像推送到 Docker 仓库 | docker push my-image |
docker exec | 在运行的容器中执行命令 | docker exec -it container_name bash |
docker stop | 停止一个或多个容器 | docker stop container_name |
docker start | 启动已停止的容器 | docker start container_name |
docker restart | 重启一个容器 | docker restart container_name |
docker rm | 删除一个或多个容器 | docker rm container_name |
docker rmi | 删除一个或多个镜像 | docker rmi my-image |
docker logs | 查看容器的日志 | docker logs container_name |
docker inspect | 获取容器或镜像的详细信息 | docker inspect container_name |
docker exec -it | 进入容器的交互式终端 | docker exec -it container_name /bin/bash |
docker network ls | 列出所有 Docker 网络 | docker network ls |
docker volume ls | 列出所有 Docker 卷 | docker volume ls |
docker-compose up | 启动多容器应用(从 docker-compose.yml 文件) | docker-compose up |
docker-compose down | 停止并删除由 docker-compose 启动的容器、网络等 | docker-compose down |
docker info | 显示 Docker 系统的详细信息 | docker info |
docker version | 显示 Docker 客户端和守护进程的版本信息 | docker version |
docker stats | 显示容器的实时资源使用情况 | docker stats |
docker login | 登录 Docker 仓库 | docker login |
docker logout | 登出 Docker 仓库 | docker logout |
-d
:后台运行容器,例如docker run -d ubuntu
。-it
:以交互式终端运行容器,例如docker exec -it container_name bash
。-t
:为镜像指定标签,例如docker build -t my-image .
。
- MTransServer应用的什么翻译模型?
四、总结
- docker将应用封装成镜像,搭建好环境后使得不同机器能够快速部署对应服务。
- MTransServer能够离线翻译挺好用的,翻译的效果也还过的去,可以采用python进行大批量地进行翻译工作。