docker 版本查询
docker --version
Docker 的中央仓库
- docker 的中央仓库,就是存放镜像的网站
官网
- 镜像最全,但是国内访问很慢
- hub.docker.com/
国内镜像
- 网易蜂巢: c.163.com/hub
- daoCloud(推荐): hub.daocloud.io/
搭建私服
-
- 修改注册文件
- 修改
/etc/docker/daemon.json,如果文件不存在,则需要手动床创建
{
"registry-mirrors": ["https://docker-cn.com"],
"insecure-registries": ["ip:port"] //替换相应的IP和端口即可
}
-
- 重启 docker 服务
systemctl daemon-reload
systemctl restart docker
Docker 镜像
docker pulldocker 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推送
- 先登录