docker版本分为企业版EE和社区版CE,企业版提供额外服务切收费,社区版分为stable和edge两种,每个版本更新stable,每个季度更新edge
(docker.io和docker以及docker-engine都是以前的老版本,下载都叫做docker-ce和docker-ee)
安装之前先卸载:apt-get remove docker.io或者apt-get remove docker.ce,然后:apt-get update
或者卸:
sudo apt-get purge docker-engine
sudo apt-get autoremove --purge docker-engine
rm -rf /var/lib/docker
首先下载对用版本https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/(可以命令为docker.deb)
安装前应该安装libltdl7和libsystemd-journal0(我使用的apititude命令)
命令:sudo aptitude install libsystemd-journal0和sudo aptitude install libltdl7(可以使用命令sudo apititude update更新下源)
1.安装docker
sudo apt-get update(更新apt-get)
sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common(安装更新工具)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -(添加GPG key)
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \(lsb_release -cs) \stable"(添加docker仓库)
sudo apt-get update(更新apt包)
sudo apt-get install docker-ce
sudo docker run hello-world(测试是否成功)
sudo groupadd docker(创建docker组)
sudo usermod -aG docker $USER(让当前用户加入组)
然后要先注销账户,或者重启。修改docker组的权限:
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "/home/$USER/.docker" -R
2.安装nvidia-docker
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -(添加nvidia-docker仓库)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update(更新apt包)
sudo apt-get install -y nvidia-docker2(安装不成功尝试nvidia-docker)
sudo pkill -SIGHUP dockerd
3.准备发布版本的时候,就需要打包我们整个工程的Docker镜像。
首先我们去Docker Hub注册帐号,相当于云盘一样,注册好了就创建一个仓库,然后在本地构建Docker镜像后上传到仓库。
docker ps -l(显示当前docker容器ID)
docker commit 容器ID 用户名/仓库名(构建docker镜像)
docker images(查看以保存的镜像)
docker push 用户名/仓库名(上传docker镜像)
3.有了镜像之后就可以以这个镜像为基础创建一个容器并运行,运行命令为 sudo docker run -it [镜像名/ID]
docker run -it --network host --privileged=true ubuntu:14.04(重点:运行镜像, privileged 参数功能,设置为true的时候,让docker的root拥有真正root的权限,可以调用宿主机硬件等; --network host实现与外界通信,实现下载和其他功能)
从主机复制到容器sudo docker cp host_path containerID:container_path
从容器复制到主机sudo docker cp containerID:container_path host_path
sudo docker cp /home2/RuanJian/cudnn-9.0-linux-x64-v7.1-2.tgz 707cc342e5b4:/root/(把cuda和cudnn文件复制进容器的root下)
sudo docker cp /home2/RuanJian/Anaconda3-4.2.0-Linux-x86_64.sh 4ee1d5a29ca0:/conda-install/(在需要复制文件的父目录下打开命令行,且id为容器而不是镜像id)
修改名称 docker tag 容器id 新名字(然后就可以把旧的镜像以镜像名方式删除)
sudo docker exec -ti -u root ID /bin/bash(进入容器并获取权限)
解决pull下来的镜像无法链接网络的问题增加: --network host
备注(命令)
docker ps -a(查看所有容器,不加a查看运行的容器)
docker images(查看所有镜像)
docker restart ID(根据id重启容器)
docker stop $(docker ps -a-q) (停止所有容器)
docker rm ID(通过id删除容器)
docker rm $(docker ps -aq) (删除所有容器)
docker rmi ID[或者镜像名] (通过镜像名或者id删除镜像)
因为docker默认安装在/etc目录下的,会导致存储不足,如果docker是1.12或以上的版本,可以修改(或新建)daemon.json文件。修改后会立即生效,不需重启docker服务。
vim /etc/docker/daemon.json
{
"graph": "/new-path/docker"
}
报错:libcuda.so.1: cannot open shared object file: No such file or directory