介绍
Docker是一个虚拟环境容器(Container),可以将开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中
Why docker ? → 为了解决环境配置的问题
Docker helps developers build, share, run, and verify applications anywhere — without tedious environment configuration or management.
$ docker info 显示docker系统信息
安装详见官网下载
启动Docker : sudo systemctl enable/start docker
镜像:容器的模板(类比为软件安装包,而容器是安装出来的软件)
- 查看下载的所有镜像:
docker images 
负责管理镜像推拉能力的服务即docker registry
- 
从仓库下载镜像:
docker pull docker.io/library/nginx:latest- docker.io仓库地址;library命名空间;latest即tag版本号
 
 - 删除镜像: 
docker rmi [imageID/Repository] 
Docker VS. 虚拟机
- 虚拟机自带完整操作系统
 - 容器只包含OS的核心依赖库和配置文件等必备组件
- 容器本质是一个自带独立运行环境的特殊进程
 
 
docker run
创建并运行容器:docker run [Repository/ID] (若没有指定名字,则会随机分配)
参数-d 即容器后台执行
Note
运行docker ps 查看正在运行的容器
- 可用
$ docker ps -a查看所有容器(包括运行和停止的) 
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS     NAMES
d48f4b5fdc03   nginx     "/docker-entrypoint.…"   9 seconds ago   Up 9 seconds   80/tcp    intelligent_ishizaka
也可以pull省略,直接run,若没有则会先拉取再run
参数-p 80:80 前面为宿主机端口,后面为容器内端口,使其进行映射
示例
$ docker run -p 80:80 -d nginx
1da53412d1a5bf6d868b76ce3d44fae16a29acec8dc8acf00592ac7b45d338cd
$ docker stop 1da53412d1a5  (进行退出)
此时就可以在本地即宿主机上访问localhost:80
-V 宿主机目录:容器内目录两者目录进行绑定,修改将互相影响 『绑定挂载』- 保证删除容器,数据并不会丢失,还在宿主机中
 
-v 卷的名字:容器内目录先创建一个存储空间(命名卷) 『命名卷挂载』
示例
$ docker volume create nginx_html
nginx_html
$ docker run -p 80:80 -v nginx_html:/user/share/nginx/html nginx
挂载卷在宿主机哪?可利用一下命令查看:
$ docker volume inspect nginx_html
[
    {
        "CreatedAt": "2025-06-29T13:47:54Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx_html/_data",
        "Name": "nginx_html",
        "Options": null,
        "Scope": "local"
    }
]
$ docker volume list 列出所有创建的挂载卷
$ docker volume prune -a 删除没有任何容器使用的卷
-e:向Docker传递环境变量
--name my_nginx 给容器自定义名字(必须是唯一的),名字和ID等价
-it 让自己的控制台进入容器,进行交互  e.g. $ docker run -it --rm alpine
--rm退出exit容器后并同时将容器从宿主机上删除 (可临时调试某容器)`$ docker exec -it ID /bin/sh进入正在容器内部,获得交互环境,可运行Linux命令
Alpine Linux 是一个面向安全,轻量级的Linux
-- restart xxx 配置容器在停止时的重启策略 always/unless-stopped
注意
$ docker run xxx 每次都会创建一个新容器
Q: 若要仅仅是启动/停止某容器? →  $ docker start/stop ID/Name
查看容器的信息:$ docker inspect ID
Dockerfile
Dockerfile 是一个文本文件,包含了构建Docker镜像的所有指令
示例
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
    return {"Hello": "World"}
if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8100)        
访问 http://local:8100/, 将展示: {"Hello": "World"}
```dockerfile
指定基础镜像
约 901 个字 49 行代码 预计阅读时间 4 分钟
    FROM python:3.13-slim
    WORKDIR /app
    # 复制文件到容器/app目录下
    COPY . /app
    # 安装依赖
    RUN pip install -r requirements.txt
    # 设置端口
    EXPOSE 8100
    # 设置容器启动时执行的命令
    CMD ["python", "app.py"]
    ```
=== "requirements.txt"
    ```txt
    fastapi
    uvicorn     
    ```
$ docker build -t docker_test .  点代表在当前目录下构建
-t后表示docker镜像的名字 (PS: docker需要进行开启状态)
启动:$ docker run -d -p 8100:8100 docker_test  
Docker网络:
$ docker network list
NETWORK ID     NAME      DRIVER    SCOPE
e43929feae99   bridge    bridge    local
efd12bd5e7f7   host      host      local
a9783dcc9bf1   none      null      local
上述三个为默认网络,无法删除
Docker Compose 定义和运行多容器,使用yml文件管理多个容器,说明部署文件有哪些,顺序是如何及CPU/Memory等信息
- 
执行命令
docker-compose up解析yml文件,将容器按顺序部署 - 
优点:轻量级,适合个人使用
 - 若对于企业级服务器集群,需要大规模容器管理 → Kubernetes