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 的值就是账号信息,解码后