Docker 安装及基础操作

Docker 安装及基础操作

Docker 安装及基础操作


一、Docker 安装

Docker 是基于 Linux 的容器化技术。

① Windows 下安装 Docker

  1. win+s 搜索 windows功能, 勾选下面两个选项,根据提示重启电脑。
  1. 根据自己电脑CPU型号下载对应的安装包。

以管理员身份运行cmd 并执行以下命令

wsl --set-default-version 2 wsl --update --web-download 
在这里插入图片描述

下载完成后双击安装即可,默认安装在C盘。如果你想指定安装到其他位置,需要以指令的形式安装, --installation-dir=安装的路径

start /w """Docker Desktop Installer.exe"install --installation-dir=D:\Develop\Docker 

② Linux 下安装 Docker

官方地址: https://get.docker.com/

【请科学上网】本文以 Ubuntu-24.04.3-STL 为例

启动 docker

sudo systemctl start docker

安装 docker

sudosh install-docker.sh 

下载脚本

curl-fsSL https://get.docker.com -o install-docker.sh 

③ Mac 下安装 Docker

  • 请参考其他博客。

二、基本指令介绍

Docker官方镜像仓库: https://hub.docker.com

(0)配置Docker 的镜像站

重启docker

sudo systemctl restart docker

修改以下内容, 添加国内镜像源

{"registry-mirrors":["https://docker.m.daocloud.io", "https://mirror.ccs.tencentyun.com", "https://docker.1panel.live", "https://hub.rat.dev", "https://docker.mirrors.ustc.edu.cn/", "https://hub-mirror.c.163.com/"]}

编辑 daemon.json 文件

sudovim /etc/docker/daemon.json 

(1)拉取镜像

    • dicker.io: 表示registry仓库地址
    • library : 命名空间,即每个作者的名字
    • nginx:latest: 表示 镜像名:镜像版本号,latest 表示最新版本

sudo docker pull 镜像名[:镜像版本] (不指定版本号,默认拉取最新版本)

# 获取最新的 nginx 镜像sudodocker pull nginx # 从官方仓库的官方命名空间里下载最新版本的nginx docker镜像sudodocker pull docker.io/library/nginx:latest # 拉取特定 cpu 架构下的nginx镜像sudodocker pull --plaform=xxx nginx 

(2)查看所有 docker 镜像

sudodocker images 

(3)删除下载的镜像

sudo docker rmi 镜像ID/镜像名

sudodocker rmi nginx 

(4)创建并运行一个容器

  • sudo docker create 镜像名, 创建一个容器,不运行。
    • -d:detached mode 分离模式,表示让容器在后台运行,不会阻塞当前的窗口
    • –name: 给容器起一个名字 test_nginx
    • -p:端口映射,宿主机端口:容器内端口。 将主机的80端口映射到容器的80端口
    • -v:volume 挂载卷, 宿主机目录:容器内目录。将宿主机目录/blog/html与容器内目录/usr/share/nginx/html相互关联。此挂载方式属于绑定挂载,使用绑定挂载时,宿主机目录会暂时覆盖容器内目录。相互关联的目录相当于一个全局资源,任意一方对其修改都会使之改变。比如在容器内部新增一个test.txt 文件,在宿主机上就能看到新增的文件。当删除容器时,容器内部所有文件(包括关联的这个目录)都会被删除,但是宿主机上的这个关联的目录会被保存下来。

sudo docker run 镜像名

sudodocker run -d--name test_nginx -p80:80 -v /blog/html:/usr/share/nginx/html nginx 
① -v 挂载卷
  • 用于持久化数据,避免容器删除后数据丢失。

删除所有没有任何容器在使用的卷

sudodocker volume prune -a

删除指定命名卷

sudodocker volume rm nginx_html 

查看所有的命名卷

sudodocker volume list 

命名卷在宿主机的真实位置, sudo docker volume inspect + 命名卷名字

sudodocker volume inspect nginx_html 

命名卷在第一次使用的时候,docker会把容器的文件夹内容同步到命名卷文件夹里面,进行一个初始化,而绑定挂载却没有这个功能。

命名卷挂载创建一个名为 nginx_html 的存储空间(命名卷)

sudodocker volume create nginx_html 

-v 卷的名字:容器内目录

sudodocker run -d-p80:80 -v nginx_html:/usr/share/nginx/html nginx 

绑定挂载-v 宿主机目录:容器内目录

sudodocker run -d-p80:80 -v /blog/html:/usr/share/nginx/html nginx 
② -e 往容器里面传递环境变量

在windows 上访问

mongosh "mongodb://用户名:密码@服务器IP地址:27017"

如:在云服务器上启动一个mongo 数据库,并设置数据库的用户名和密码两个参数

sudodocker run -d\--name my_mongo \-p27017:27017 \-eMONGO_INITDB_ROOT_USERNAME=mongoadmin \-eMONGO_INITDB_ROOT_PASSWORD=secret \ mongo 

(5)查看 docker 容器的进程状态

  • ps: process status, 进程状态,只能查看到正在运行的容器

-a: 表示all, 查看所有的容器状态

sudodockerps-a

(6)启动/停止一个容器

  • sudo docker start 容器ID/容器名
  • 查看容器创建时的参数

inspect: 检查,审阅的意思

sudodocker inspect 容器ID/容器名 

sudo docker stop 容器ID/容器名

sudodocker start nginx sudodocker stop nginx 

(7) 删除容器

    • rm : remove 删除
    • -f : force 强制删除

sudo docker rm 容器ID/容器名

# 删除名为 test_nginx 的容器sudodockerrm-f test_nginx 

(8)进入容器内部,用于临时调试一个容器

    • -it: 让控制台进入容器内部进行交互
    • –rm : 当容器停止(退出)的时候,自动删除。
    • 退出的指令: exit

alpine : 轻量级的linux 系统

sudodocker run -it--rm alpine 

(9)配置容器在停止时的重启策略

  • –restart always: 只要容器停止了,就立即重启。包含容器因为内部错误崩溃或宿主机断电等场景。

–restart unless-stopped: 跟always 类似,但是手动停止的容器,不会自动重启。

sudodocker run -d--restart always nginx sudodocker run -d--restart unless-stopped nginx 

(10)查看容器的日志

  • sudo docker logs 容器ID/容器名 -f

-f : follow, 追踪输出。

sudodocker logs test_nginx -f

(11)在容器内部执行Linux指令

进入容器内部,获得一个交互式的命令行环境sudo docker exec -it xxxxx(容器ID) /bin/sh

# 创建一个容器sudodocker run -d-p80:80 nginx # 进入容器内部sudodockerexec-it nginx的ID /bin/sh cd /usr/share/nginx/html # 容器内部是一个极简的操作系统,很多命令会缺失,有些命令要自己下载# 首先查看容器内的linux发行版本cat /etc/os-release # 此时发现是debian的,包管理是apt,如果是centos, 则使用yum# 更新索引apt update aptinstallvim# 修改文件等操作 ...

sudo docker exec xxxxx(容器ID) linux指令

# 进入容器内部查看有哪些进程sudodockerexec 容器ID ps-ef

三、Dockerfile

  • 详细记录了镜像是如何制作的

四、Docker 网络

① 默认是bridge, 桥接模式
  • 在浏览器输入: 服务器IP地址:9000 即可访问, 网页登录的账号密码是,admin:pass
  • PS. 如果你配置好之后无法访问,请查看防火墙是否打开,云安全组是否打开,端口号映射是否正确。我第一次使用的是Centos 9, 不知道为什么一直打不开,切换到Ubuntu-24.04-STL 版本后,测试可正常使用。

mongodb 的网页客户端

sudodocker run -d\--name my_mongo_express \-p9000:8081 \-eME_CONFIG_MONGODB_SERVER=my_mongodb \-eME_CONFIG_MONGODB_ADMINUSERNAME=admin \-eME_CONFIG_MONGODB_ADMINPASSWORD=123456\--network network1 \ mongo-express 

创建一个容器,且宿主机无法访问。并将这个容器添加到 network1, --network network1

sudodocker run -d\--name my_mongodb \--hostname mongo \-eMONGO_INITDB_ROOT_USERNAME=admin \-eMONGO_INITDB_ROOT_PASSWORD=123456\--network network1 \ mongo 

创建一个子网 network1

sudodocker network create network1 
② host 主机模式

docker 容器共享宿主机的网络,容器直接使用宿主机的IP地址,无需端口映射。即容器内的服务直接运行在宿主机的端口上。

sudodocker run -d--networkhost nginx 
③ none 不连网模式
④查看网络,删除网络

删除创建的子网,无法删除默认的三种网络模式:bridge, host, none

sudodocker network rm 网络ID/网络名 

查看所有网络,包括创建的子网

sudodocker network list 

五、compose.yaml

docker 会严格寻找本目录下的,compose.yaml 文件,如果没有则报错。可以使用-f (–file)参数指定compose文件。

sudodocker compose -f /file/compose.yaml 

启动容器

sudodocker compose start 

仅停止容器

sudodocker compose stop 

停止并删除容器

sudodocker compose down 

运行并创建文件中定义的容器,同一个文件中的容器,默认属于同一个子网。如果已经执行过下面指令,再次执行不会产生效果。

sudodocker compose up -d

轻量级容器编排技术

version: '3.8'# Compose 文件版本,建议使用 3.8 以兼容最新 Docker 特性# 定义网络(对应 --network network1) networks: network1: driver: bridge # 默认桥接网络,与 Docker 命令的网络类型一致# 定义服务 services: # MongoDB 服务(对应 my_mongodb 容器) my_mongodb: image: mongo # 使用的镜像 container_name: my_mongodb # 容器名称 hostname: mongo # 容器主机名 restart: unless-stopped # 可选:容器退出时除非手动停止,否则自动重启 environment: # 初始化 root 用户和密码(与 Docker 命令的环境变量一致) MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: 123456 networks: - network1 # 加入 network1 网络# Mongo-Express 服务(对应 my_mongo_express 容器) my_mongo_express: image: mongo-express # 使用的镜像 container_name: my_mongo_express # 容器名称 restart: unless-stopped # 可选:自动重启 ports: - "9000:8081"# 端口映射(主机:容器) environment: # 配置 MongoDB 连接信息 ME_CONFIG_MONGODB_SERVER: my_mongodb # 连接的 MongoDB 服务名(容器名) ME_CONFIG_MONGODB_ADMINUSERNAME: admin # MongoDB 管理员用户名 ME_CONFIG_MONGODB_ADMINPASSWORD: 123456# MongoDB 管理员密码# 可选:关闭基本认证(默认 Mongo-Express 会有 admin/user 认证,如需关闭可添加)# ME_CONFIG_BASICAUTH_USERNAME: ""# ME_CONFIG_BASICAUTH_PASSWORD: "" networks: - network1 # 加入 network1 网络 depends_on: - my_mongodb # 依赖 MongoDB 服务,确保先启动 MongoDB

六、你可能遇到的问题

  1. 问题描述?电脑已经连接上网络,QQ和微信也可以正常发送消息,但是浏览器显示网络无连接。
  2. 原因?如果你是第一次使用WSL,在科学上网的前提下,你的电脑会把自动代理设置打开。表现为:当你不开科学上网工具时,浏览器无法正常访问互联网。

解决办法?打开设置 --> 网络和Internet --> 代理 --> 手动设置代理(使用代理服务器)–>关闭并保存。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

END

Read more

可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

小巧的MCPHost MCPHost 可以在命令行下使用,使大型语言模型(LLM)能够通过模型上下文协议(MCP)与外部工具进行交互。目前支持Claude 3.5 Sonnet和Ollama等。本次实践使用自己架设的Deepseek v3模型,跑通了Time MCP服务。  官网:GitHub - mark3labs/mcphost: A CLI host application that enables Large Language Models (LLMs) to interact with external tools through the Model Context Protocol (MCP). 下载安装 使用非常方便,直接下载解压即可使用。官网提供Windows、Linux和MacOS三个系统的压缩包: https://github.com/

By Ne0inhk
实战篇:Python开发monogod数据库mcp server看完你就会了

实战篇:Python开发monogod数据库mcp server看完你就会了

原创不易,请关注公众号:【爬虫与大模型开发】,大模型的应用开发之路,整理了大模型在现在的企业级应用的实操及大家需要注意的一些AI开发的知识点!持续输出爬虫与大模型的相关文章。 前言 目前mcp协议是给deepseek大模型插上工具链的翅膀,让大模型不仅拥有超高的推理和文本生成能力,还能具备执行大脑意识的工具能力! 如何开发一个mcp? mcp是一种协议,指的是模型上下文协议 (Model Context Protocol)。 官方结成的mcp https://github.com/modelcontextprotocol/python-sdk mcp库 pip install mcp from mcp.server.fastmcp import FastMCP 我们先来做一个简单的案例 from mcp.server.fastmcp import FastMCP import requests mcp = FastMCP("spider") @mcp.tool() def crawl(

By Ne0inhk
【大模型实战篇】基于Claude MCP协议的智能体落地示例

【大模型实战篇】基于Claude MCP协议的智能体落地示例

1. 背景         之前我们在《MCP(Model Context Protocol) 大模型智能体第一个开源标准协议》一文中,介绍了MCP的概念,虽然了解了其概念、架构、解决的问题,但还缺少具体的示例,来帮助进一步理解整套MCP框架如何落地。         今天我们基于claude的官方例子--获取天气预报【1】,来理解MCP落地的整条链路。 2. MCP示例         该案例是构建一个简单的MCP天气预报服务器,并将其连接到主机,即Claude for Desktop。从基本设置开始,然后逐步发展到更复杂的使用场景。         大模型虽然能力非常强,但其弊端就是内容是过时的,这里的过时不是说内容很旧,只是表达内容具有非实时性。比如没有获取天气预报和严重天气警报的能力。因此我们将使用MCP来解决这一问题。         构建一个服务器,该服务器提供两个工具:获取警报(get-alerts)和获取预报(get-forecast)。然后,将该服务器连接到MCP主机(在本例中为Claude for Desktop)。         首先我们配置下环

By Ne0inhk
AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建

AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建

AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建 作者:高瑞冬 本文目录 * AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建 * 一、MCP协议简介 * 二、创建MCP工具集 * 1. 获取MCP服务地址 * 2. 在FastGPT中创建MCP工具集 * 三、测试MCP工具 * 四、AI模型调用MCP工具 * 1. 调用单个工具 * 2. 调用整个工具集 * 五、私有化部署支持 * 1. 环境准备 * 2. 修改docker-compose.yml文件 * 3. 修改FastGPT配置 * 4. 重启服务 * 六、使用MCP-Proxy集成多个MCP服务 * 1. MCP-Proxy简介 * 2. 安装MCP-Proxy * 3. 配置MCP-Proxy * 4. 将MCP-Proxy与FastGPT集成 * 5. 高级配置

By Ne0inhk