docker常见命令及使用vscode在容器中开发

docker使用记录

简介

每个容器都是由镜像创建的应用程序的一个实例,并且一个主机系统可以运行多个容器,每个容器都是隔离的。

windows docker下载和使用

Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。

因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。

  • 启用windows虚拟化功能:
  1. 设置搜索启用或关闭windows功能

image-20230729155249311

  1. 启用Hyper-V

image-20230729155406900

  1. 查看虚拟化功能是否开启(右下角虚拟化)

image-20230729155631924

  • 下载并使用wsl2
  1. 微软商店下载ubuntu22.04 LTS

  1. 设置wsl2为默认版本

    wsl --set-default-version 2
    
  2. 查看版本

    wsl -l -v
    

    image-20230729160828394

docker hub

Docker Hub是docker社区,可以上传自己构建的镜像,自由选择公开还是私有,上面也有大量其他开发者公开的镜像,例如python、ubuntu、cuda+pyTorch等镜像。

相关命令

查看镜像列表

docker images

例如:

在这里插入图片描述

一个完整的镜像包含:用户名/仓库名:版本号,例如上面的yk1127/rmdb:v1

使用时如果不指定版本号,默认为latest,如果本地没有,会到远程仓库中拉取,因此使用时确保带上版本号TAG

拉取镜像

docker pull 镜像名[:TAG]

查看单个镜像相关信息

docker image inspect 镜像[:TAG]

查看镜像的可用选项和参数信息

docker run --rm 原镜像[:TAG]/镜像ID --help

镜像改名

docker tag 原镜像[:TAG] 目标镜像[:TAG]

删除镜像

docker image rm 镜像

查看单个容器的内部信息

docker inspect 容器名/容器ID

查看创建容器

  • 查看当前运行容器

    docker ps
    
  • 查看所有容器(包括停止的)

    docker ps -a
    
  • 查看最新创建的容器,只列出最后创建的

    docker ps -l
    
  • 列出最后创建的x个容器

    docker ps -n=x
    

创建并运行容器

较简单使用:

docker run -it [--name 容器名] 镜像名

较复杂使用:

docker run --gpus all --rm -it -w /code -v D:\mypyTorch\code:/code -v D:\mypyTorch\input:/input -v D:\mypyTorch\output:/output yk1127/hepar_divide:v1 python run.py

docker run常见参数:

  • –gpus all:使用本机上的全部GPU资源

  • -i:表示"interactive"(交互式),它使得容器的标准输入保持打开状态。这允许用户与容器的终端进行交互,即可以从终端向容器发送输入。

  • -t:表示"tty"(终端),它为容器分配一个伪终端,使得容器内部的应用程序可以与终端交互。

  • –name:指定容器名

  • /bin/bash:指定linux shell为bash

  • –rm:容器停止时自动删除

  • -w:设置容器启动的工作目录

  • CMD命令(跟在镜像名后):启动容器时执行的命令

    例如上述的python run.py,启动时执行这条命令

    如果要执行多条指令:

    docker run -it 镜像[:TAG] sh -c "cd test && ls && python run.py"
    

    如果报错sh flag无法识别,那么需要指定entrypoint:

    docker run -it --entrypoint "" 镜像[:TAG] sh -c "cd test && ls && python run.py"
    

    CMD的命令会被加到ENTRYPOINT后面跟着执行

  • 挂载相关参数:

  1. -v(或者-volume)

用法为Host_dir:Container_dir:[options],将本机目录挂载到容器,只能创建bin mount(绑定挂载),本机目录必须是绝对路径,如果路径不存在则会自动创建。其中options为可选参数,rw为读写,ro为只读,默认为读写。

  1. –mount,挂载一个主机目录作为数据卷

默认情况下用来挂载volume,但也可以用来创建bind mount和tmpfs。如果不指定type选项,则默认为挂载volume。

volume是一种更为灵活的数据管理方式,示例:

docker run --name $CONTAINER_NAME -it \
			--mount type=bind,source=$PWD/$CONTAINER_NAME/app,destination=/app \
			--mount source=${CONTAINER_NAME}-data,destination=/data,readonly \
			avocado-cloud:latest /bin/bash

​ 注释:

挂载volume命令格式:[type=volume,]source=my-volume,destination=/path/in/container[,...]
创建bind mount命令格式:type=bind,source=/path/on/host,destination=/path/in/container[,...]

如果创建bind mount并指定source则必须是绝对路径,且路径必须已经存在,不存在会报错
示例中readonly表示只读,默认为读写。

  1. 挂载主机目录 的配置信息在 “Mounts” 下面,使用docker inspect命令
"Mounts": [
    {
        "Type": "bind",
        "Source": "/src/webapp",
        "Destination": "/usr/share/nginx/html",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
]
  1. 有关挂载可以参考:

    Docker数据卷挂载命令volume(-v)与mount的总结 https://blog.csdn.net/sch0120/article/details/106292036

    Docker容器数据卷 https://www.cnblogs.com/wtzbk/p/14911229.html

启动已创建容器(处于停止状态的)

docker start

进入已启动容器

docker exec -it 容器ID

停止容器

docker stop

删除容器

docker rm 容器ID

或者

docker rm 容器名

扩展:

rm -f是一个命令行选项,用于强制删除文件或目录,即使文件或目录被保护或只读也可以删除。该选项将忽略文件或目录的权限设置和警告提示,直接删除它们。

具体来说,rm -f中的-f代表"force"(强制),它会强制执行删除操作,无论文件或目录是否被保护、只读或其他任何原因导致删除操作会被阻止。

使用rm -f命令时需要特别小心,因为它不会提供任何警告或确认提示,而是直接删除目标文件或目录。因此,在使用rm -f时要确保你要删除的文件或目录是你希望删除的,并且你理解删除操作的后果。

请注意,rm -f只能删除文件或空目录。如果要删除非空目录,需要使用rm -rf命令,其中-r选项表示递归删除目录及其内容。在使用rm -rf时要特别小心,确保你要删除的目录及其内容是你希望删除的。

退出容器

exit或者ctrl+D	//此种方法退出会停止容器运行状态
ctrl+P+Q		 //此种方法退出不会停止容器运行状态

构建自己的镜像

方法一
  • 下载基础镜像并且创建容器
  • 在容器内部使用命令安装所需要的软件包和库
  • 以不停止容器运行的方式退出容器,即ctrl+P+Q
  • docker ps -a获取当前容器ID
  • 使用docker commit命令获取修改过的镜像并且重命名
docker commit 容器ID 镜像名[:TAG] 
方法二

这种方法需要自己编写Dockerfile,有关语法可以参考:https://www.runoob.com/docker/docker-dockerfile.html

构建镜像要先创建一个空目录(即所谓上下文目录),将Dockerfile置于其中,并将COPY命令相关的本机目录置于其中,因为构建时只能在该上下文目录中搜索所需文件。

docker build -t 镜像名[:TAG] .

上传镜像

  • 上传镜像前先在Docker Hub中登录账号,并且新建仓库

image-20230528194507625

  • 保证docker登录了账号
docker login
  • 镜像命名带上仓库名,例如yk1127 / hepar_divide

image-20230528194733847

然后上传:

docker push 镜像名[:TAG]

vscode连接进入docker开发

docker官方插件,但是不好用:

image-20230729153424949

推荐Dev Containers + Remote-SSH:

image-20230729153513922

image-20230729153627134

其中,Remote-SSH是远程连接工具,安装以上两个插件后,可以在侧边栏看到:image-20230729153845299 这个图标,点进去

image-20230729153912063 ,切换到开发容器一栏,会显示本机的容器,image-20230729154038296,可以直接在docker容器内部

开发。左下角出现说明已经在容器内部:image-20230729154442437

debug

问题1

C:\Windows\system32>docker ps -a

error during connect: This error may indicate that the docker daemon is not running.: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json?all=1": open //./pipe/docker_engine: The system cannot find the file specified.

解决方案

该错误提示表明Docker守护进程未在运行,你可以按照以下步骤解决此问题:

请确保你已经正确地安装了Docker并且已经启动了Docker守护进程。如果你是在Windows上使用Docker Desktop,请确保Docker Desktop已成功启动。你可以在任务栏中找到Docker图标并确认它正在运行。

问题2

C:\Windows\system32>docker run -it --name=test deepmi/fastsurfer /bin/bash
ERROR: Flag /bin/bash unrecognized.

解决方案

该错误表明在运行docker run命令时,Docker无法识别/bin/bash标志。这可能是因为你正在运行的镜像不支持以交互方式启动终端。要解决此问题,你可以尝试以下方法:

使用默认的启动命令:不指定/bin/bash标志,让Docker使用镜像的默认启动命令。在终端中运行以下命令:

docker run -it --name=test deepmi/fastsurfer

这将以默认的启动命令启动deepmi/fastsurfer镜像,并将你连接到容器的终端。

图标并确认它正在运行。

问题2

C:\Windows\system32>docker run -it --name=test deepmi/fastsurfer /bin/bash
ERROR: Flag /bin/bash unrecognized.

解决方案

该错误表明在运行docker run命令时,Docker无法识别/bin/bash标志。这可能是因为你正在运行的镜像不支持以交互方式启动终端。要解决此问题,你可以尝试以下方法:

使用默认的启动命令:不指定/bin/bash标志,让Docker使用镜像的默认启动命令。在终端中运行以下命令:

docker run -it --name=test deepmi/fastsurfer

这将以默认的启动命令启动deepmi/fastsurfer镜像,并将你连接到容器的终端。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在LinuxDocker有一些常见命令。其一些常见命令包括: - docker run:用于在容器运行一个命令或者启动一个容器。例如,可以使用命令 docker run -it ubuntu bash 在一个Ubuntu容器启动一个交互式的bash终端。 - docker ps:用于列出当前正在运行的容器。该命令可以显示容器的ID、名称、状态等信息。 - docker images:用于列出本地存在的镜像。该命令可以显示镜像的ID、标签、大小等信息。 - docker build:用于根据Dockerfile构建一个镜像。Dockerfile是一个包含了构建镜像所需指令的文本文件。 - docker pull:用于从Docker Hub或者其他镜像仓库拉取一个镜像到本地。 - docker push:用于将一个本地的镜像推送到Docker Hub或者其他镜像仓库。 - docker stop:用于停止一个正在运行的容器。 - docker start:用于启动一个已经停止的容器。 这些只是一些常见命令Docker还有很多其他的命令可以用于管理容器、镜像和其他资源。具体的命令使用方法可以参考官方文档或者使用docker命令的--help选项来获取帮助信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker学习文档,全面介绍Docker技术](https://download.csdn.net/download/Goligory/88280848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux学习 -- Docker的常用命令](https://blog.csdn.net/qq_50929489/article/details/127210435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦中生花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值