33-docker的简单使用1

6 阅读4分钟

docker 版本查询

  • docker --version

Docker 的中央仓库

  • docker 的中央仓库,就是存放镜像的网站

官网

国内镜像

搭建私服

    1. 修改注册文件
    • 修改/etc/docker/daemon.json,如果文件不存在,则需要手动床创建
{
  "registry-mirrors": ["https://docker-cn.com"],
  "insecure-registries": ["ip:port"] //替换相应的IP和端口即可
}
    1. 重启 docker 服务
systemctl daemon-reload
systemctl restart docker

Docker 镜像

  • docker pull
    • docker pull docker.io/libarary/nginx:latest
docker pull docker.io/libarary/nginx:latest
- docker.io: registry: (官方)仓库地址/注册表     -> 官方仓库可以省略
- libarary: namespace: 命名空间(作者名)          -> 官方的命名空间可以省略
- nginx: tag: 标签,latest 表示最新版本

例子:
docker pull docker.n8n.io/n8nio/n8n

// docker pull 另一个命令
docker pull --platform=xxxx nginx
- 表示特定拉取cpu架构的镜像
- 默认情况: docker pull 会自动选择最适合当前宿主机的cpu架构镜像
  • docker images 查看本地镜像

    • 可以列出所有下载过的 docker 镜像
  • docker rmi 删除镜像

    • docker rmi 镜像id/镜像名字 强制删除镜像
    • docker rmi 镜像id 镜像id 镜像id 强制删除多个镜像
    • do加cker rmi -f $(docker images -aq) 强制删除所有镜像
    • 加-f : 强制删除
  • docker run 运行容器

- `docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名`
- `-d`: 后台运行(常用不会阻塞当前窗口)
- `--name`: 指定容器名 -> `docker run -d --name mynginx nginx`
  - 名字在整个宿主机上必须是唯一的,不能重复
  - 容器的名字和容器的ID是等价的
- `-p`: 指定端口映射 (宿主机端口:容器端口) -> 容器端口可以省略,默认是 80
    - 把宿主机的端口映射到容器的端口,在外部用户访问宿主机的端口,就会访问到容器的端口
- `镜像名`: 指定镜像名
- `-v`: 挂载卷 (宿主机路径:容器内目录) -> 容器内目录可以省略,默认是 /data
    - 把宿主机的目录映射到容器的目录,在外部用户访问宿主机的目录,就会访问到容器的目录
    - 作用: **容器内的数据持久化,容器删除后数据不会丢失**
- `docker run 镜像`: 镜像不存在会自动下载,并启动

// => docker run 的其它命令
docker run -d \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
mongo
数据库就会预设账号名称和密码了

// => 容器停止后的重启策略(只要容器停止了就会立即重启)
- 包含容器内部错误崩溃 或 宿主机停电等原因导致容器停止
docker run -d --restart always --name nginx

// => `unless-stopped` : 手动停止的容器就不重启了
docker run -d --restart unless-stopped nginx
  • docker ps 查看正在运行的容器

    • docker ps -a 查看所有容器(包含正在运行的和已停止的容器)
  • docker stop 容器id/容器名 停止容器(已存在的容器)

  • docker start 容器id/容器名 启动容器(已存在的容器)

  • docker restart 容器id/容器名 重启容器

  • docker rm 容器id/容器名 删除容器(删除正在运行的容器要加 -f 参数)

  • docker search 搜索镜像

挂载卷的使用

C:\Users\Administrator>docker volume create nginx_html
nginx_html

C:\Users\Administrator>docker run -d -p 80:80 -v nginx_html:/user/share/nginx/html nginx
babd42ded8a1fa6a3f3a3caf673478ca30c29b741c2d2195383059cbb234e02b

C:\Users\Administrator>docker volume inspect nginx_html
[
    {
        "CreatedAt": "2025-12-21T04:32:49Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx_html/_data", // 真实目录
        "Name": "nginx_html",
        "Options": null,
        "Scope": "local"
    }
]

// => 进入目录
sudo ios的加
cd /var/lib/docker/volumes/nginx_html/_data

//=> 查看须有的挂载卷
docker volume ls

// => 删除挂载卷
docker volume rm nginx_html

docker volume prune -a// 清理无用(没有任何容器在使用)的挂载卷

制作镜像

  • 创建Dockerfile文件
  • 编写 Dockerfile文件
FROM python:3.13-slim // 选择一个基础镜像

WORKDIR /app          // 设置工作目录为/app(后面的命令都是在这个目录下执行的)

COPY . .              // 将当前目录下的所有文件复制到镜像的/app目录下 第一个. 表示当前目录 第二个. 表示镜像的/app目录

RUN pip install -r requirements.txt // 安装依赖

EXPOSE 8000           // 暴露端口(不是强制的只是做一个声明,做一个提示而已,不写没影响,实际工作还是以 -p的参数为准)
CMD ["python3","main.py"] // 设置容器启动时执行的命令
  • 构建镜像docker build -t 镜像名:版本号 .并推送到docker仓库
    • 先进入当前目录
    • 执行 docker build -t jxb/docker_test . jxb 用户名(必须带上自己的用户名) docker_test 起一个名字 .表示在当前文件夹
    • 上面就创建好镜像, 然后基于镜像创建容器
    • docker run -d -p 8000:8000 --name docker_test
    • 把镜像推送到 dockerhub 上
      • 先登录 docker login,会有一个英文验证码,和一个网站
      • 打开网站 -> 输入验证码,然后登录 -> 命令行显示 Login Success 就是成功登录了
      • docker push 镜像名:版本号 -> docker push jxb/docker_test 推送