Docker的使用

Docker的使用

安装Docker

  • 下载安装包进行安装

  • 安装完毕启动Docker

  • Windows系统需要开启Hyper-V功能

    • 在启用或者关闭Windows功能中启动Hyper-V功能
    • Hyper-V 是微软提供的一种虚拟化技术,允许用户在一台物理计算机上创建和运行多个虚拟机(Virtual Machines, VMs)。每个虚拟机都可以运行独立的操作系统和应用程序,就像在独立的物理计算机上一样。
  • 使用docker version命令查看docker安装是否成功和docker服务是否启动

  • 下载完安装包后自动安装在C盘中,更改安装路径

    • 首先创建两个空的文件夹,分别存放Docker程序和Docker-Data(镜像等)

    • 管理员身份打开cmd并进入到Docker安装包的路径中

    • 进不去d盘使用cd /d d:切换盘符

    • 在安装包路径中执行:注意更改目录路径

      • start /w “” “Docker Desktop Installer.exe” install -accept-license --installation-dir=“D:\\JAVATool\\Docker\\Docker-install” --wsl-default-data-root=“D:\\JAVATool\\Docker\\Docker-data” --windows-containers-default-data-root=“D:\\JAVATool\\Docker-install”
        
  • 安装完毕后家庭版需要开启Hyper功能,创建一个Hyper.cmd文件,文件内输入

    • pushd "%~dp0"
      dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
      for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
      del hyper-v.txt
      Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
      
    • 安装完毕后重启

  • 在Docker的图形界面中配置镜像

    • 在setting中的Docker Engine中添加镜像源

    • {
        "builder": {
          "gc": {
            "defaultKeepStorage": "20GB",
            "enabled": true
          }
        },
        "experimental": false,
        "registry-mirrors": [
          "https://docker.m.daocloud.io",
          "https://docker.imgdb.de",
          "https://docker-0.unsee.tech",
          "https://docker.hlmirror.com",
          "https://cjie.eu.org"
        ]
      }
      
  • 使用docker run hello-world测试是否安装完毕

访问Docker内容器

  • 默认情况下,直接通过本机的 IP 地址加上配置的端口号是无法访问 Docker 容器内的 Redis 的,因为 Docker 容器的网络是隔离的。要让外部(包括本机)能够访问容器内的 Redis,需要明确地将容器的端口映射到宿主机的端口。

  • CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                    NAMES
    ff2a5917e10b   redis:latest   "docker-entrypoint.s…"   16 seconds ago   Up 15 seconds   0.0.0.0:6380->6379/tcp   nifty_germain
    17f18bbac025   redis:latest   "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   6379/tcp                 crazy_germain
    7fe575357d08   redis:latest   "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes   6379/tcp                 festive_austin
    0d1195937b68   redis:latest   "docker-entrypoint.s…"   14 hours ago     Up 14 hours     6379/tcp                 charming_diffie
    
    • 在 Docker 中,每个容器都有自己的网络命名空间,因此容器内部的端口是独立的。即使多个容器使用相同的 容器端口(如 Redis 默认的 6379),它们也可以通过不同的 主机端口 映射到外部。
    • 容器 nifty_germain
      • 容器端口6379/tcp(Redis 默认端口)。
      • 主机端口0.0.0.0:6380->6379/tcp,表示主机的 6380 端口映射到容器的 6379 端口。
      • 这意味着可以通过主机的 6380 端口访问这个 Redis 容器。
    • 其他容器
      • 容器端口6379/tcp(Redis 默认端口)。
      • 主机端口:未映射(仅显示 6379/tcp),表示这些容器的 6379 端口没有映射到主机的任何端口。
      • 这些容器只能通过 Docker 网络内部访问,无法直接从主机访问。
  • 默认情况下的网络隔离

    • Docker 容器运行在独立的网络命名空间中,容器内的服务(如 Redis)默认只能通过容器内部的 IP 地址和端口访问。
    • 如果你没有显式地将容器的端口映射到宿主机,外部网络(包括本机)无法直接访问容器内的 Redis。
  • 让外部访问容器内的 Redis

    • 为了让外部(包括本机)能够访问容器内的 Redis,需要通过 端口映射 将容器内的 Redis 端口(默认是 6379)映射到宿主机的某个端口。

    • 在启动 Redis 容器时,使用 -p 参数将容器端口映射到宿主机端口。例如:

      • docker run --name my-redis -d -p 6379:6379 redis
        
        • -p 6379:6379:将宿主机的 6379 端口映射到容器的 6379 端口。
        • 这样,外部可以通过宿主机的 IP 地址和 6379 端口访问 Redis。
  • 绑定 Redis 到所有网络接口

    • 默认情况下,Redis 只绑定到 127.0.0.1,这意味着它只能从本地访问。为了让 Redis 监听所有网络接口,需要修改 Redis 配置文件或启动时指定参数。

      • 在启动 Redis 容器时,添加 --bind 0.0.0.0 参数:

      • docker run --name my-redis -d -p 6379:6379 redis redis-server --bind 0.0.0.0
        
      • 在命令中显式地写上 redis-server 是为了覆盖默认的启动命令,并传递额外的参数(如 --bind 0.0.0.0)。

  • 防火墙和安全组

    • 如果宿主机有防火墙或运行在云服务器上,确保放行 Redis 端口(如 6379)。
    • 对于云服务器(如 AWS、阿里云等),还需要在安全组中配置允许访问 Redis 端口的规则。

Docker中常用命令

  • 从 Docker Hub 或其他镜像仓库拉取镜像。

    • docker pull <image_name>:<tag>
      
      • <image_name>: 镜像名称。
      • <tag>: 镜像标签(版本),默认为 latest
  • 列出本地所有的 Docker 镜像。

    • docker images
      
  • 删除本地的一个或多个镜像。

    • docker rmi <image_name>:<tag>
      
  • 创建并启动一个容器。

    • docker run [options] <image_name>:<tag>
      
    • 常用选项:

      • -d: 后台运行容器(detached 模式)。
      • -p: 端口映射,格式为 主机端口:容器端口
      • -v: 挂载卷,格式为 主机目录:容器目录
      • --name: 为容器指定一个名称。
  • 列出正在运行的容器。

    • docker ps
      
      # -a: 列出所有容器(包括已停止的)。
      docker ps -a
      
  • 进入容器

    • 使用 docker exec 进入容器

    • docker exec -it my-redis redis-cli
      
      • docker exec:在运行的容器中执行命令。
      • -it:以交互模式运行命令。
      • my-redis:容器名称。
      • redis-cli:Redis 命令行工具。
  • 启动、停止或重启容器。

    • docker start/stop/restart

    • docker start <container_id_or_name>
      docker stop <container_id_or_name>
      docker restart <container_id_or_name>
      
  • 删除一个或多个容器。

    • docker rm

    • docker rm <container_id_or_name>
      

Docker 镜像相关命令总结表格

命令 功能描述 示例
docker pull 从仓库拉取镜像 docker pull ubuntu:20.04
docker images 列出本地所有镜像 docker images
docker rmi 删除本地镜像 docker rmi ubuntu:20.04
docker build 根据 Dockerfile 构建镜像 docker build -t myapp:1.0 .
docker image inspect 查看镜像的详细信息 docker image inspect ubuntu:20.04
docker tag 为镜像打标签 docker tag ubuntu:20.04 myubuntu:1.0
docker save 将镜像保存为 tar 文件 docker save -o ubuntu_20.04.tar ubuntu:20.04
docker load 从 tar 文件加载镜像 docker load -i ubuntu_20.04.tar
docker image prune 删除未使用的镜像 docker image prune -a

Docker 容器相关命令总结表格

命令 功能描述 示例
docker run 创建并启动容器 docker run -d -p 8080:80 --name mycontainer nginx:latest
docker ps 列出容器 docker ps -a
docker start 启动容器 docker start mycontainer
docker stop 停止容器 docker stop mycontainer
docker restart 重启容器 docker restart mycontainer
docker rm 删除容器 docker rm mycontainer
docker exec 在容器中执行命令 docker exec -it mycontainer /bin/bash
docker logs 查看容器日志 docker logs -f mycontainer
docker inspect 查看容器详细信息 docker inspect mycontainer
docker cp 在容器和主机之间复制文件 docker cp mycontainer:/app/logs ./logs
docker stats 查看容器资源使用情况 docker stats mycontainer
docker attach 连接到正在运行的容器 docker attach mycontainer
docker commit 将容器保存为新的镜像 docker commit mycontainer myapp:1.1
posted @ 2025-03-26 18:33  QAQ001  阅读(35)  评论(0)    收藏  举报