Docker 使用(三)

3.使用

一、配置镜像源地址

创建镜像源配置文件:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
  ]
}
EOF

更改镜像源配置文件后,需要重新加载配置文件。

sudo systemctl daemon-reload

然后重启 Docker 服务。

sudo systemctl restart docker

二、服务使用

Docker 服务管理是使用 Docker 的基础操作。下面介绍常用的 Docker 服务命令。

  1. 启动 Docker 服务
systemctl start docker
  1. 停止 Docker 服务
systemctl stop docker
  1. 重启 Docker 服务
systemctl restart docker
  1. 设置开机启动 Docker 服务
systemctl enable docker
  1. 查看 Docker 服务状态
systemctl status docker

重启命令通常用于应用配置变更后重新加载服务

三、镜像使用

Docker 镜像是创建容器的模板,包含应用代码、依赖和配置。核心操作包括拉取、标记、推送、查看、导入导出和删除

1. 官方镜像仓库

  • Docker Hub:Docker 官方公共仓库,提供大量官方和社区镜像。

  • 登录命令:

    docker login

2. 拉取镜像

  • 从仓库下载镜像:

    docker pull 镜像名[:标签]
  • 示例:

    docker pull nginx          # 拉取最新版本
    docker pull nginx:1.23     # 拉取指定版本

3. 镜像标签

  • 用于管理版本:

    docker tag nginx:latest my-nginx:v1

4. 推送镜像

  • 登录 Docker Hub 后,打标签并推送到仓库:

    docker tag my-image 用户名/my-image:1.0
    docker push 用户名/my-image:1.0

5. 查看镜像

  • 查看本地镜像列表:

    docker images
  • 查看镜像详情:

    docker inspect nginx
  • 查看镜像历史:显示镜像每一层的创建命令和大小

    docker history nginx
  • 查看容器日志:

    docker logs nginx

6. 查找镜像

  • 搜索公共镜像:

    docker search mysql

7. 镜像导出与导入

内网电脑无法访问网络下载镜像时使用

  • 导出:

    docker save -o nginx.tar nginx:latest
  • 导入:

    docker load -i nginx.tar

8. 删除镜像

  • 删除镜像:

    docker rmi 镜像名或ID
  • 清理未使用镜像:

    docker image prune -a
  • 查看磁盘使用:

    docker system df

四、容器使用

1. 创建并启动容器

docker run [选项] 镜像 [命令]

常用参数:

参数 作用 备注
-d 后台运行
-p 主机端口:容器端口 端口映射
--name 指定容器名称
-it 交互式终端
-v 主机目录:容器目录 挂载目录
--rm 容器停止后自动删除
-e 变量名=变量值​ 或 --env 设置环境变量
--network 指定容器的网络模式
--restart 容器的重启策略
-u 用户名 指定用户运行

示例:

docker run -d -p 80:80 --name nginx-container nginx

注意:如果每次运行容器使用 docker run 命令,则每次都都会创建一个新的容器实例,即使使用相同的镜像和参数也会生成不同的容器。

2. 管理容器

  • 启动已停止容器
docker start 容器ID或名称
  • 停止容器
docker stop 容器ID或名称
  • 删除容器
docker rm 容器ID或名称      # 容器已停止
docker rm -f 容器ID或名称   # 强制删除运行中容器

3. 查看容器

  • 正在运行:
docker ps
  • 所有容器:包括已经停止的容器
docker ps -a
  • 详细信息:
docker inspect 容器ID或名称
  • 日志输出:
docker logs 容器ID或名称
docker logs -f 容器ID或名称  # 实时查看
  • 资源使用:
docker stats

4. 进入容器

docker exec -it 容器ID或名称 /bin/bash

5. 容器导出与导入

用于将容器及其当前状态保存为文件,便于迁移或备份

  • 导出容器为 tar:
docker export -o nginx-container.tar nginx-container
  • 导入为镜像:
docker import nginx-container.tar my-nginx:v1

6.删除容器

docker rm 容器ID或名称

五、私有镜像仓库

除了使用 Docker Hub 等公共仓库,还可以使用 Registry 搭建私有镜像仓库,存储企业内部镜像。

1.搭建私有仓库

  1. 拉取 Registry 镜像
docker pull registry:2
  1. 启动仓库服务
docker run -d \
  -p 5000:5000 \
  --name my-registry \
  -v /data/registry:/var/lib/registry \
  registry:2

-v /data/registry:/var/lib/registry:挂载数据目录持久化存储镜像。

  1. 验证服务
docker ps

访问:

http://localhost:5000/v2/_catalog

正常返回:

{"repositories":[]}

2.使用私有仓库

  1. 为镜像打标签
docker tag my-image localhost:5000/my-image
  1. 推送镜像
docker push localhost:5000/my-image
  1. 拉取镜像
docker pull localhost:5000/my-image
  1. 查看仓库镜像
curl http://localhost:5000/v2/_catalog
# 返回数据
{"repositories":["my-image"]}

查看特定镜像标签:

curl http://localhost:5000/v2/my-image/tags/list

3.远程访问配置

默认只能本机访问,如需远程推送和拉取:

  1. 在服务器上部署 Registry。
  2. 修改客户端 Docker 配置(/etc/docker/daemon.json):
{
  "insecure-registries": ["服务器IP:5000"]
}
  1. 重启 Docker:
systemctl restart docker
  1. 推送镜像:
docker tag my-image 服务器IP:5000/my-image:v1
docker push 服务器IP:5000/my-image:v1

4.生产环境建议

为提高安全性,建议:

  • 使用 HTTPS(TLS) 加密通信
  • 使用 htpasswd 开启用户认证
  • 使用 Nginx 作为反向代理
  • 使用 Docker Compose 管理服务

示例启动:

docker compose up -d

5.架构示意

Docker Client
      │
      ▼
   Nginx(HTTPS)
      │
      ▼
 Registry
      │
      ▼
 持久化存储

这样即可搭建一个支持镜像上传、下载和集中管理的私有 Docker 镜像仓库。