添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
docker info | sed '/Username:/!d;s/.* //'

如果不是想用的退出再docker login

docker tag java:my localhost:5000/java:my
docker push localhost:5000/java:my即可

3 记一次docker的实际使用

docker images 可以查看系统中已经存在的image
docker ps -a 看所有的container状态

3.1 从一个新的image开启container

开启一个container

docker run -it -v /home1/pbliu/all_data/nnUNet/rawDatasets/FLARE21/ValidationImage:/home/nnUNet_raw_data_base/ --user=root --ipc=host --gpus '"device=0,1"' --name=nnunetFLARE_test nbutter/nnunet:latest /bin/bash
# openface
# -rm 貌似你在停止container的时候,就默认把那个container删掉了
docker run -it --rm algebr/openface:latest
-v /iflytek/pbliu/2nd_TechValid:/home/openface-build/2nd_TechValid -v /iflytek/pbliu/2nd_TechValid/processed:/home/openface-build/processed -v /home/pbliu/Project1_DepressionEstimation_Pingcheng:/home/openface-build/code
docker run -it -v /home/pbliu/Project1_DepressionEstimation_Pingcheng:/home/openface-build/code -v /iflytek/pbliu/3nd_TechValid/openface_workspace_AD_hzd_20230621__ChaLouBuQue_tmp:/home/openface-build/3nd_TechValid/openface_workspace_AD_hzd_20230621__ChaLouBuQue_tmp -v /iflytek/pbliu/3nd_TechValid/processed_tmp:/home/openface-build/processed  --user=root --ipc=host  openfacev1.2:latest # 没有/bin/bash了

ps:有时候进去之后不是root用户,可以加上--user root

要安装东西,
apt update
apt install vim

pip install moduleName -i https://pypi.douban.com/simple

如果你只是想运行一下,那就用--rm的模式:

docker container run --gpus "device=1" --name teamname --rm -v $PWD/inputs/:/workspace/inputs/ -v $PWD/teamname_outputs/:/workspace/outputs/ teamname:latest /bin/bash -c "sh predict.sh"

3.2 container和外界的一些交互

本地文件和container文件的传输,传输方向自己调换位置就可以了;文件夹也不用-r  2333

docker cp /home1/pbliu/Personal/nnUNet_FLARE21  ba9d58ac0651:/home/

注:使用nnunet的镜像要pip uninstall nnunet(默认安装了镜像中了),或者你直接去修改他使用的代码也可以。我习惯在自己的代码上修改,所以用自己的code

推出container时,可以ctrl+D,也可以输入exit,即可退出。

3.3 container的stop和start

docker stop container 或者在container内部的命令行运行$ exit 是直接停止了container
docker start container即可再次启动
# 退出container后想再次进入,启动container,然后:
docker attach container

3.3 container经过修改后commit到一个新的image

当我们在一个image的基础上进行相应修改后,希望将修改保存,有两个路子,一个就是直接在系统内保存为一个新的image。

docker commit -a 'ek' -m '1314' 9adeb5943045  nnunet:latest
-a:修改人
-m:备注

3.4 container经过修改后保存为一个tar.gz离线文件

引用: Docker - 实现本地镜像的导出、导入(export、import、save、load)

接3.3,另一个路子就是保存到一个离线的tar.gz文件了。又可以分为两种:

3.4.1 直接从container保存为tar

docker export f299f501774c > hangger_server.tar
# 对应导入
docker import - new_hangger_server < hangger_server.tar

3.4.2 从image保存为tar

docker save 0fdf2b4c26d3 > hangge_server.tar # 建议直接使用名字:tag打包,不然解压出来是none
docker save -o images.tar postgres:9.6 mongo:3.4 # 打包多个包
# 对应导入
docker load < hangge_server.tar

注:貌似这两种保存方式和导入方式要匹配,不能乱搞,启动时会报错。

3.5 记录

md遇到一个极其傻逼的问题,我对shell不是很熟悉,常规的cd 命令啥的都不好用在shell脚本里,直到我看到这个网站才解决了我的问题。 https://bbs.huaweicloud.com/blogs/209108

不好用的命令后加 exec /bin/bash
e.g.:
cd /home exec /bin/bash
python runs.py exec /bin/bash

好像是shell环境变量的关系。。。那个换行符^M(我在新建路径的时候发现的)

3.6 疑问

docker run和docker container run的区别?

docker load 和docker image load区别?

4 docker外部调用docker内部的命令

docker run --rm  -v Host_path:docker_path 镜像id /home/openface-build/school.sh

a. run是跟image的,exec是跟container的
b. 我这里选的run处理image,又加了--rm,就是说退出后直接把创建的container删掉了,防止多次调用例表中会出现一堆的container(没写-it,貌似docker就直接后台运行了,然后运行完会推出)
b. 如果中途你想结束,docker ps -a,docker stop那个container id就可以了

将tocker加到 用户组 sudo groupadd docker //将 docker 加到 用户组 sudo gpasswd -a rocky docker //将rockyyoghurt添加到 docker sudo service docker restart //重启 docker 服务 docker images 查看 本地镜像名称 docker search ubuntu 通过仓库查找 ubuntu 的镜像 docker pull ubuntu 从仓库下载镜像(全名) docker push ubuntu 保存镜像到 docker docker inspect 查看 镜像全称 docker rmi 删除镜像 docker ps -l 查看 当前正在运行的容器 docker run ubuntu echo ‘hello world’ 启动容器 docker run learn/tutorial apt-get install -y ping 容器中安装ping命令 docker inspect 容器名 查看 容器的详细信息 为了解决这个问题,我们可以创建一个名为" docker "的 用户组 ,然后将需要执行 Docker 命令的用户添加到这个 用户组 中。因为添加到" docker " 用户组 的用户可以直接执行 Docker 命令,这意味着他们可以获得几乎所有的系统权限。这条命令的作用就是让"majn"这个用户可以直接执行 Docker 命令,而不需要每次都输入"sudo"。这条命令的意思就是:以超级用户权限,将用户名为"majn"的用户添加到" docker "这个 用户组 中。这条命令的作用是将用户名为"majn"的用户添加到" docker "这个 用户组 中。 每行以6个“:”分隔为7个部分,从左到右依次为用户的①名称②登录口令情况③用户ID④所属组ID⑤用户的全称等其它详细信息⑥用户的home目录⑦用户的默认登录shell。第四字段:用户列表,每个用户之间用逗号(,)号分割;如果字段为空表示 用户组 为GID的用户名;是 docker 组的成员。如果字段为空表示 用户组 为GID的用户名。这将输出 docker 组的信息,包括组名和组成员。第一字段: 用户组 名称;第二字段: 用户组 密码; 命令用于从Name Service Switch库中获取条目。在这里仅作为组密码字段的占位符,并不表示实际的密码。组的详细信息,包括其下的所有用户。组)的所有用户,可以 使用 。要 查看 属于某个组(例如。则是该组下的用户列表。表示组密码的占位符。另外,也可以直接 查看 docker images [OPTIONS] [REPOSITORY[:TAG]] OPTIONS说明: -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层); --digests :显示镜像的摘要信息; -f :显示满足条件的镜像; --format :指定返回值的模板文件; --no-trunc :显示完整的镜像信息; -q :只显示镜像ID。 (2) docker build 命令用于 使用 Docker f 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。 docker login 之后,会在 /root/. docker /config.json 中保存base64编码后的用户名和密码信息。 执行 sudo cat /root/. docker /config.json 打印文件内容,如下: "auths": { "registry.*****.com": { "auth": "bWFya2l4OjEyMzQ1NmFiYw==" 文件中 auth 的值就是账号信息,解码后