【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)
文章目录
- 一、待解决问题
- 1.1 问题描述
- 1.2 解决方法
- 二、方法详述
- 2.1 必要说明
- 2.1.1 docker的一些常见命令
- 2.1.2 官方docker hub镜像库锁区解决
- 2.2 应用步骤
- 2.2.1 安装docker
- (1)删除旧版本
- (2)安装相关依赖
- (3)安装docker包
- (4)docker命令补全(可选)
- (5)如何删除docker(备用)
- (6)~~安装docker desktop~~
- (7)配置国内docker镜像库(可选)
- (8)可视化容器管理工具Portainer(可选)
- 2.2.2 测试docker
- 2.2.3 实例部署:MTranServer
- (1)准备
- (2)编辑yml文件
- (3)下载应用镜像
- (4)下载翻译模型
- (5)启动服务
- 三、疑问
- 四、总结
一、待解决问题
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 sudo docker stop sudo docker restart
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 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进行大批量地进行翻译工作。
- docker的一些常用命令?
-