记录常用的docker命令(持续更新...)

本文概述了在工作中常用的Docker技术,包括容器操作、删除与启动、解决容器终止问题的方法、进入运行容器、镜像管理、GPU配置、docker-compose的常用命令及网络模式。
摘要由CSDN通过智能技术生成

docker技术很多,但工作中用到的就那么几个, 整理下经常用到的.

1 容器操作
在这里插入图片描述

2 删除容器

docker rmi -f 容器名

3 启动容器
在这里插入图片描述

4 容器终止问题

docker run -d 容器1

上述命令后, 使用docker ps 查看很可能发现容器1停止了, 因为容器使用后台运行, 就必须有一个前台进行,若没有就会自动停止,解决办法: 添加一段持续运行的命令,如下:

docker run -d 容器1 /bin/sh -c "while true;do echo longwork;sleep 1;done"

5 进入正在运行的容器

docker exec -it 容器名 /bin/bash

6 提交/保存镜像
这是制作镜像, 封装服务并交付的环节. 工作中,项目开发完后, 交付给下一级部门和客户就是通过这种方式.

# 提交容器到镜像
docker commit 容器名 目标镜像名:tag
例如 docker commit trt-pytorch2.1 my_trt_image:20240221

# 保存镜像到本地
docker save -o 本地文件名.tar 目标镜像名:tag

# 加载本地tar文件到镜像
docker load < 本地文件名.tar

7 容器资源消耗
容器内跑程序, 容器外监控整个容器的内存/CPU使用情况, 从而达到性能测试的目的

docker stats 容器名 --format "{{json .}}" > normal.txt

8 容器内不能识别gpu
如torch不能使用gpu, 容器内nvidia-smi查看不到显卡,原因之一是启动容器的方式不对

 /etc/docker/daemon.json中默认设置的不是nvidia,所以直接启动docker-compose,容器内是找不到nvidia-smi的
 {
     "default-runtime": "nvidia",  # 要加上这句才行
     "runtimes": {
         "nvidia": {
             "path": "nvidia-container-runtime",
             "runtimeArgs": []
         }
     },
     "registry-mirrors": ["https://registry.docker-cn.com"]
 }

9 docker-compose 启动容器
进入docker-compose.yaml所在目录,执行:

# 后台启动
docker-compose up -d
# 停止容器
docker-compose stop
# 启动容器
docker-compose start
# 重启容器
docker-compose restart
# 停止容器, 然后删除该容器, 是清理容器的命令.
docker-compose down

docker-compose.yaml常用命令如下, 这几条配置可应付我使用的所有容器, 目测也能满足绝大多数人需求.

version: "3"

services:
	# 服务名,可以不与container_name同名, 在Nginx中使用服务名做调度,
	# 如果只想起个容器,服务名没啥用
    lyb-cent7-cuda11_torch19:
        image: lyb-cent7-cuda11-torch19:0324
        container_name: "lyb-cent7-cuda11_torch19"
        
        # 获取宿主机root权限,要映射端口也需要true
        privileged: true
        
        # 设置共享内存大小为16g,防止分布式训练dataloader时出错
        shm_size: "16gb"
		
		# 路径映射, 主机目录:容器内目录
        volumes:
            - /home/data/liyabin_project:/home
        ports:
            - "10086:22"        # 容器内22端口映射到外部10086,22端口通常用于在外部调用容器内Python环境
            - "10087:10087"     # 用途待定,比如可以tensorboard --logdir=路径 --port 10087  
        """
        # 从外部传入变量
        environment:
             #- NVIDIAER_CAPABILITIES=compute,utility 
             - NVIDIA_VISIBLE_DEVICES=all
             - GPU_IDS=1
             - YOLO_THRESHOLD=0.6
             - SERVER_PORT=3800

        # 容器重新启动,比如当容器被其他人kill了,会自动重启
        restart: always
        
        # entrypoint是容器启动时默认运行的命令,command 是用于在运行时替换默认命令的命令,
        # 因此,如果使用了command, 就没必要再使用entrypoint了,因为会被覆盖.
        # entrypoint: /usr/sbin/init
        
        # command后面的命令 与 tty:true都能使启动的容器不停止, tty是伪终端吧啦吧啦..,
        # 他们区别是啥? I don't know! 如果不想探究, 那么从下面随便选一个就好!
        command: ["/bin/bash", "-c", "sleep infinity"]
        #tty: true
        
        network_mode:
            "bridge"    # 默认桥接模式,容器之间不须要互相通讯.
            #"host"    # 当前模式下ports端口映射失效, 容器环境不隔离,将使用主机的端口和ip.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值