docker学习记录
1 2 3 4 5 6 7 8 9 10 11 12 13
| 镜像 镜像库 容器
-v 不一定要把代码项目路径挂载上,像不需要代码修改的场景、代码打包成镜像等不需要挂载 开发时需要,将代码同步到开发环境 持久化数据时需要 挂载配置文件 docker run python3 xxx.py镜像内没有代码不行,而且这种在docker run时直接执行命令有-v时也不行,这种一定代表代码里有对应代码。通过-v这种方式可以进入容器后再执行-v里的代码 -v ..\test\:\workspace\ 代表把前者里的所有内容挂载进去 露姐案例: docker run -it --rm --name 3D_detect --shm-size=32g --gpus all -v /home/lium/dynamic_target_visualisation/.vscode-server:/root/.vscode-server -v /home/lium/dynamic_target_visualisation/:/root/dynamic_target_visualisation/ changan-map.tencentcloudcr.com/train/3donenet:v20251119
|
镜像
下载
1 2 3 4 5 6 7 8 9 10 11
| 下载 windows linux 命令: docker pull docker.io/library/xxx:latest 注意是官方库可以省略的部分 dockerhub: hub.docker.com dockhub的镜像站:docker.fxxk.dedyn.io 给docker配置镜像站:daemon.json docker pull --platform=xxxx 一般linux上下载docker镜像会自动选择适合宿主机处理器架构的镜像 可以直接不下载直接使用docker run,创建运行容器时自动下载镜像
|
查看已下载镜像
docker images
删除镜像
docker rmi id/名字
容器
创建容器和运行
1 2 3
| docker run -d -p 80:80 镜像id或者名字 可以设置容器名字
docker create和run类似 但只创建
|
1 2 3 4
| docker run --rm -v /home/xxx/.vscode-server:/root/.vscode-server \ -v $CODE_PATH:/workspace \ --name $container_name \ -it xxxx:$Tag /bin/bash
|
1 2 3
| docker run时直接执行命令
nohup docker run --net=host -d -v /data01/zxx/config:/data/config --rm changan-map.tencentcloudcr.com/train/stdata_preprocess:v1.0.3 /bin/bash -c "python3 run_output.py --tasks $datname --run-type 2 --config /data/config/output.yaml" > ./output$i.log 2>&1
|
1 2 3 4 5 6 7 8 9
| 执行容器后,使vscode能直接连接容器
docker run --net=host \ -v /home/$(whoami)/.vscode-server:/root/.vscode-server \ -v /data01/zxx/config:/data/config \ --name test \ -it \ changan-map.tencentcloudcr.com/train/stdata_preprocess:v1.0.3 \ /bin/bash
|
查看运行中的容器
1 2 3
| docker ps 显示正在运营容器
可以显示:容器id 所属镜像 容器名字等 -a(显示包括非运行的容器)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| docker ps CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker ps -a --format "{{.Names}}" | grep -q "^$container_name$" {{.Names}}是一个 Go 模板占位符,它告诉 Docker 命令只输出容器的名称
-q参数表示“安静模式”。grep不会在屏幕上输出任何匹配到的内容,它只关心是否找到了匹配项。如果找到,grep会以退出码 0 结束;如果没找到,则以退出码 1结束。
^$container_name$是一个正则表达式模式:
^表示“行的开始”。
$container_name是一个 Shell 变量,它应该包含了您想查找的容器名称。
$表示“行的结束”
|
查看容器的信息
docker inspect 容器 查看容器的信息
1
| docker inspect <container_id_or_name> | grep -A 10 "NetworkMode"
|
删除容器
1
| docker rm -f id 删除正在运行的容器需要f
|
挂载卷
绑定挂载卷 -v
1 2
| docker run -d -p 80:80 -v 宿主机目录:容器目录 镜像id或者名字 绑定挂载 宿主目录写死 会覆盖容器目录内容
|
1 2 3 4 5 6 7
| 不一定要把代码项目路径挂载上,像不需要代码修改的场景、代码打包成镜像等不需要挂载 开发时需要,将代码同步到开发环境 持久化数据时需要 挂载配置文件
案例: docker run -it --rm --name 3D_detect --shm-size=32g --gpus all -v /home/lium/dynamic_target_visualisation/.vscode-server:/root/.vscode-server -v /home/lium/dynamic_target_visualisation/:/root/dynamic_target_visualisation/ changan-map.tencentcloudcr.com/train/3donenet:v20251119
|
命名卷挂载
1 2 3 4 5 6 7 8
| docker volume create xxx docker run -d -p 80:80 -v 挂载卷名字:容器目录 镜像id或者名字 docker volume inspect 挂载卷名字 显示挂载卷的真实位置 docker volume rm xxx docker volume prune -a 删除所有没有容器使用的卷
|
查看已有的挂载卷
设置容器变量 -e
1 2 3 4 5 6 7 8
| -e参数 docker run -e xxx=xxx -d -p... -v... 镜像 创建mongdb容器 mongo 创建mongodb网页端容器 --name参数 docker run -e xxx=xxx -d -p... -v... --name 容器名 镜像 容器名要唯一
|
-it参数
-it参数 可以让交互页面进入docker交互页面
docker run -it -rm alpine 轻量级linux系统 停止运行后删除,调试很有用
进入容器的交互界面
docker exec -it 容器 /bin/sh
查看容器内linux系统信息
cat /etc/os-release 查看容器内linux系统信息,容器内的系统简洁有的工具不自带
–restart参数
第一个命名在docker停止后会重启,第二个手动停止不会重启 生产环境
docker run -d –restart always nginx
docker run -d –restart unless-stopped nginx
启动和暂停容器
docker start/stop 容器 会保留之前启动的参数
容器日志
docker logs 容器 -f 动态显示日志
在容器内部执行linux命令
docker exec 容器 ps -ef
容器网络 容器子网
1 2 3 4 5 6 7 8 9 10 11
| docker network create 子网名 桥接模式 --network 子网名 host模式 直接使用宿主机网络和端口 --network host none模式 没有网络 docker network list 显示所有docker网络 删除网路 docker network rm xxx
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| docker network create network1
docker run -d \ --name my_mongodb\ -e MONGO_INITDB_ROOT_USERNAME=name\ -e MONGO_INITDB_ROOT_PASSWORD=pass\ -v /my/datadir:/data/db\ --network network1\ mongo
docker run -d \ --name my_mongodb_express\ -p 8081:8081\ -e ME_CONFIG_MONGODB_SERVER=my_mongodb\ -e ME_CONFIG_MONGODB_ADMINUSERNAME=name\ -e ME_CONFIG_MONGODB_ADMINUSERPASSWORD=pass\ --network network1\ mongo-express
|
构建镜像
dockerfile
1 2 3 4 5 6 7
| dockerfile 描述镜像是如何创建的 from workdir copy run cmd [] 一个dockerfile里只能有一个cmd entrypoint 比cmd优先级更高,不容易被覆盖
|
1 2 3 4 5 6 7 8 9 10 11 12
| ARG BASE_IMAGE FROM $BASE_IMAGE WORKDIR /workspace #设置环境变量 ENV CAFS_SDK_USE_PROVIDER_PROXY=true ENV CAFS_SDK_PROVIDER_PROXY="{\"xxx":[\"xxx",\"xxx\"]}" RUN rm -rf * COPY src /workspace/ RUN ./install.sh && rm -rf /var/lib/apt/lists/* EXPOSE 3030
|
1 2 3 4 5
| 通过ARG指令允许在构建时动态指定BASE_IMAGE 设置CAFS_SDK_USE_PROVIDER_PROXY为true,启用代理 设置CAFS_SDK_PROVIDER_PROXY,配置 RUN执行命令 暴露3030端口供外部访问
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| ARG BASE_IMAGE FROM $BASE_IMAGE
# 设置环境变量,防止包安装时交互式提示 设置 Debian/Ubuntu 系统的环境变量 ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /workspace
COPY install.sh requirements.txt .
RUN ./install.sh
RUN rm -rf install.sh requirements.txt
|
1 2 3
| COPY src_tmp . COPY . .是将当前目录下所有内容,复制到workspace,文件夹的话是包含文件夹名的 COPY src . 复制src里的内容到.
|
docker build命令
1 2 3 4 5
| docker build -t 镜像名字 版本可不指定 . 然后就可以使用自定义的镜像创建运行了 发布镜像到dockerhub
|
1 2 3 4 5
| docker build -f $DOCKERFILE --build-arg BASE_IMAGE=$BASE_IMAGE -t $TARGET_IMAGE .
. 它是 docker build命令的最后一个参数,指定了构建上下文的位置。 它告诉 Docker 引擎:从哪里获取构建所需的所有文件(即“构建上下文”)。 Dockerfile 中 COPY、ADD等指令的相对路径,都是相对于这个目录的。
|
1 2 3 4 5 6
| [liuj@VM-16-2-tencentos static_dynamic_annotation]$ docker run -it changan-map.tencentcloudcr.com/train/static_dynamic_annotation:v2.2 /bin/bash
/bin/bash: /bin/bash: cannot execute binary file 原因:您主机的系统架构(例如x86_64/amd64)与Docker镜像的架构(例如arm64)不一致。您尝试在一个架构上运行为另一个架构编译的/bin/bash二进制文件,导致无法执行
uname -m
|
1 2 3
| 检查镜像架构(将[您的镜像名]替换为实际名称,如ubuntu:latest):
docker image inspect [您的镜像名] | grep -i architecture
|
docker compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 快捷创建多个容器,方便管理的容器编排技术,使用yml文件管理多个容器。
yml文件定义各个容器如何创建和如何协同工作的
docker compose文件默认所有容器自动加入同一个子网 yml文件文件里可以定义容器启动顺序dependson
标准的名字是docker-compose.yaml,如果是其它名字需要加-f docker compose up -d(同dockercompse文件目录下) 启动yml文件里定义的容器
docker compose up -d -f test.yaml(其它名字) 启动yml文件里定义的容器 docker compose down(同dockercompse文件目录下) 停止并删除容器
docker compose stop (同dockercompse文件目录下) 停止容器
docker compose start (同dockercompse文件目录下) 启动用dockercompose文件创建但已停止的容器
|