容器启动
docker pull registry.example.net:5000/env:1.0
docker tag registry.example.net:5000/env:1.0 env:1.0
# env1.0 (basic env Ubuntu18.04)
nvidia-docker run --name env -itd -p 88:8888 -p 2222:22 -v /data0/JY:/data0/JY env:1.0 /bin/zsh
# env2.0 (with conda and vnc)
docker pull registry.example.net:5000/env:2.0
docker tag registry.example.net:5000/env:2.0 env:2.0
nvidia-docker run --name env2.0 -itd -p 99:9999 -p 88:8888 -p 2222:22 -p 6901:5901 -v /data0:/data0 env:2.0 /bin/zsh
# -p 99:9999 备用IP端口
# -p 88:88 jupyter notebook端口
# -p 2222:22 ssh远程连接端口
# -p 6901:5901 vnc远程桌面端口
# env3.0(add nvtop,without vnc)
nvidia-docker run --name env3.1 -itd \
-p 88:8888 -p 2222:22 \
-v /data0:/data0 -v /data1:/data1 -v /data2:/data2 \
--privileged=true env:3.1 /bin/zsh
nvidia-docker exec -it env3.1 /bin/zsh
## 补充 启动时加入--ipc=host,解决
nvidia-docker run --name env3.4 -itd \
-p 88:8888 -p 2222:22 --ipc=host \
-v /data0:/data0 -v /data1:/data1 -v /data2:/data2 \
--privileged=true env:3.4 /bin/zsh
版本迭代
docker commit
docker tag env:3.0 registry.example.net:5000/env:[Version]
docker push registry.example.net:5000/env:[Version] # 上传镜像到本地
设置自动启动
# 启动时加--restart=always
nvidia-docker run --name env3.2 -itd --restart=always \
-p 88:8888 -p 2222:22 -p 6901:5901 \
-v /data0:/data0 -v /data1:/data1 -v /data2:/data2 \
--privileged=true env:3.2 /bin/zsh
Flag Description
no 不自动重启容器. (默认value)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
# 如果已经启动的项目,则使用update更新:
docker update --restart=always env3.1
用户管理
useradd -d /data0/username -m -s /bin/zsh username # docker中建立新用户,文件夹未存在
# -d: 指定用户登入时的主目录
# -m: 自动建立用户的登入目录
# -s: 用户登入后使用的shell,默认值为/bin/bash
useradd -d /data0/username -s /bin/zsh username # 文件夹已存在时
chown -R username:username /data0/username/* # 指定目录的所用者
chmod 760 /data0/username # 赋予读写权限
passwd user # 添加密码
修改配置
方法一:不推荐
# 容器的配置文件路径
sudo service docker stop # 这一步是必需的
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json # 可能需要管理员 su
# 可以通过docker ps或者docker inspect containername查看。(CONTAINER ID就可以看出来对应的hash_of_the_container)
# 修改.json文件
vim *.json # 按下F4
sudo systemctl restart docker
"Binds": ["/data0:/data0"],
"PortBindings": {
"5901/tcp": [
{
"HostIp": "",
"HostPort": "6901"
}
]
},
方法二:重新启动新的(推荐)
step1: docker commit 容器名|容器id 新镜像名
step2: 重新run一个新容器
基本安装
apt-get install vim wget git
sudo apt-get install zsh
apt-get install iproute2 iproute2-doc inetutils-ping net-tools
chsh -s /bin/zsh
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
Anaconda安装
#修改镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/main
conda config --add channels https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/free
conda config --add channels https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/mro
conda config --add channels https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/msys2
conda config --add channels https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/pro
conda config --add channels https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/r
jupyter notebook配置
将docker的8888
端口映射到88
,连接为hostIP:88
# 配置:https://blog.csdn.net/u010420283/article/details/82871367
c.NotebookApp.ip='10.15.198.102'
c.NotebookApp.password = u'sha1:8d2d020418c3:d4b6327fae1d40d2eb0e5a41a54311327f8dbe07'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
jupyter notebook --ip=0.0.0.0 # 运行jupyter-notebook
# 界面: hostIP:88
# 安装nodejs,jupyterlab需要
sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get install nodejs
sudo apt install libssl1.0-dev nodejs-dev node-gyp npm
SSH连接
将docker的22
端口映射到2222
,连接为hostIP:2222
# mkdir /var/run/sshd
echo 'root:amax' | chpasswd
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
echo "export VISIBLE=now" >> /etc/profile
service ssh restart
# vscode连接
Host docker102
HostName 10.15.198.102
Port 22
User root
Password amax
文件传输
scp -P 34543 -r <local_file> <user@host:/dir>
VNC配置
将docker的5901
端口映射到6901
,连接为hostIP:5901
apt install xfce4 xfce4-goodies xrdp xbase-clients
apt install vnc4server
vim ~/.vnc/xstartup
# 修改为如下:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
chmod +x ~/.vnc/xstartup
vncserver