介绍
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