【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)

06-01 1583阅读

文章目录

  • 一、待解决问题
    • 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,将其添加到收藏栏。

                【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)

                打开后,没有界面如下:

                【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)

                无法查看到正在运行的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进入,提示风险,接受并进入:

                【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)

                首次登录时,可能会遇到这样的原因:

                当您第一次安装Portainer时,如果您没有在5分钟内登录并完成初始设置,容器中的Portainer服务将停止。这是一种安全措施,用于防止恶意用户接管新的Portainer安装并自行配置它。为了避免发生这种情况,我们建议在第一次启动Portainer容器后的5分钟内完成初始设置。

                关闭portainer容器,并重新启动,在5min内登录https://localhost:9443:

                sudo docker stop portainer
                sudo docker start portainer
                

                设置用户名和密码(这个密码要设置12位就很不人性化),然后登录,看到如下界面,可以很方便地管理容器的运行:

                【OS安装与使用】part7-ubuntu22.04LTS 的 docker 安装与使用(实例:MTransServer服务部署)

                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)
                  

                  三、疑问

                  1. 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 .。
                    1. MTransServer应用的什么翻译模型?

                    四、总结

                    • docker将应用封装成镜像,搭建好环境后使得不同机器能够快速部署对应服务。
                    • MTransServer能够离线翻译挺好用的,翻译的效果也还过的去,可以采用python进行大批量地进行翻译工作。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码