docker 安装参考: Nvidia Clara-Train-SDK配置过程_ydncw的博客-CSDN博客

Centos安装

一些命令

1 关于docker用户组

1.1 如需要查看“docker”分组下的所有用户,可以使用命令如下:

grep 'docker' /etc/group

1.2 创建用户组(一般安装docker已经创建,无需再管):

sudo groupadd docker

1.3 将某用户添加到用户组:

sudo usermod -aG docker ${USER}

1.4 重启docker服务:

sudo systemctl restart dockerd

账户重新登陆即可直接使用docker相关命令


2 关于docker的常用命令

2.1 删除image和container

docker stop 停止正在运行的container。否则无法删除container

docker rm 删除container,否则无法删除image

docker rmi 删除image 完工

2.2 修改image的名字

docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

2.2 上传到自己的仓库

查看当前docker登陆的用户名:

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就可以了

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐