知识点#
repo 、image name 和tag#
- repository 是指仓库 或者镜像仓库,即一个空间;
- 公有仓库 Docker hub;
- 私有仓库 Harbor 阿里云镜像仓库;
- image name 是指 repo下某一类应用的具体名称;
- tag 用于标识镜像的版本,每个tag 对应一个镜像ID
docker 镜像是由多层layer 叠加而成,可以被多个镜像共享
docker 常用命令#
image#
1
2
3
4
5
6
7
8
9
10
11
12
13
| docker pull xxx
docker image ls
docker images
docker build -t myapp:1.0 .
docker tag myapp:1.0 myrepo/myapp:latest
docker rmi image-name
docker inspect image-name
|
container#
1
2
3
4
5
6
7
| docker run \
--rm \ # 容器退出的时候直接销毁
-it \
-v xxx:xxx \ # 挂载目录
--entrypoint /bin/bash \ # 如果容器有自启动命令,这样设置可以跳过;
--name xxx \ # 指定容器名
image-name
|
- 挂载目录之后,本地修改文件, 容器内文件也同步修改;
- 如果image tag 不是 latest , 需要加上tag;
docker compose#
compose 允许用户通过一个单独的 docker-compose.yml 模版文件 来定义一组相关联的应用容器作为一个项目。
- 服务(service): 一个应用的容器,或者若干运行相同镜像的容器实例;
- 项目(project): 完整的业务单元;
1
2
3
4
5
| docker compose up
docker compose down
docker compose build
|
compose.yaml#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| version: "3.9" # YAML文件版本(Docker Compose v2 之后可省略)
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- frontend
app:
build: ./app
depends_on:
- db
environment:
- DEBUG=true
networks:
- frontend
- backend
volumes:
db-data:
networks:
frontend:
backend:
|
services#
- 用于定义应用中的每一个容器服务;
- 每个服务对应一个容器;
entrypoint
- 指定容器启动时执行的主程序;
command
- 为entrypoint 提供参数,或作为主程序直接替换
profiles#
profiles 给服务加一个“标签”或者“分组”,让你在执行 docker compose up 时,选择启用的那一组。
1
2
3
4
5
6
7
8
9
10
11
12
13
| services:
web:
image: nginx
db:
image: mysql
redis:
image: redis
vllm-server:
image: vllm:latest
profiles: ["vllm"]
monitor:
image: grafana
profiles: ["monitor"]
|
- 默认只启动没有profile的服务
- 启动vllm-server
1
| docker compose --profile vllm up
|
- 连监控一起开
1
| docker compose --profile vllm --profile monitor up
|
docker 打包#
issue#
- 权限问题
1
| permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/images/create?fromImage=docker.io%2Fvllm%2Fvllm-openai&tag=0.8.5.post1": dial unix /var/run/docker.sock: connect: permission denied
|
1
2
3
| sudo usermod -aG docker $USER
# 需要重新登陆
|