Docker ce for ubuntu16.04 环境配置:
$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ 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 -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
卸载docker-ce:
$ sudo apt-get purge docker-ce
$ sudo rm -rf /var/lib/docker
Nvidia Docker2 for ubuntu16.04 环境配置:
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
$ sudo apt-get purge -y nvidia-docker
# Add the package repositories
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
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
# Install nvidia-docker2 and reload the Docker daemon configuration
$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd
# Test nvidia-smi with the latest official CUDA image
$ sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
卸载Nvidia Docker2:
$ sudo apt-get purge nvidia-docker2
$ rm -rf /var/lib/nvidia-docker/
docker指令集:
#docker 信息
$ docker help #docker指令帮助
$ docker --version #docker 版本
$ docker info #docker 信息
#docker 资源使用率
$ docker top CONTAINER #查看容器的进程
$ docker stats CONTAINER #查看容器的CPU,内存,IO 等使用信息
#docker 查看镜像,容器信息
$ docker image ls #查看docker 镜像
$ docker container ls --all #查看docker容器
$ docker ps #查看运行中的docker容器
$ docker inspect CONTAINER|IMAGE #查看docker容器,镜像详细信息
#docker 运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
$ docker run hello-world #测试docker helloworld
$ docker run --rm -it -d --net=host *** #运行容器,rm退出的时候删除容器,i交互,t终端,net=host表示和主机共享网络,d表示daemon方式
$ docker run -v /opt/webapp:/opt/webapp -it *** #运行容器,并挂载/opt/webapp目录
$ docker run --mount type=bind,source=/opt/webapp,target=/opt/webapp -it *** #运行容器,并挂载/opt/webapp目录
#docker 镜像下载
docker pull NAME[:TAG]
$ docker pull *** #下载镜像
#docker 镜像上传
docker push NAME[:TAG]
$ docker push *** #上传镜像
#docker 镜像注释
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
$ docker commit -a "007<007@qq.com>" -m "add the new software" c3f279d17e0a aaa/my_ubuntu:3.2.3
-a, --author="" 作者信息,
-m, --message="" 提交信息,
-p, --pause=true在提交镜像时暂停容器
#docker 镜像加标签
docker tag [OPTIONS] IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME[:TAG]
$ docker tag ubuntu:latest 007/my_ubuntu:3.2.3 #给ubuntu:latest打上新TAG:007/my_ubuntu:3.2.3
$ dockertag eb601b8965b8 ubuntu:latest #给eb601b8965b8镜像打上TAG: ubuntu:latest(会转换原有的TAG指向)
#docker 容器,镜像打包tar
docker save保存的是镜像(image),docker export保存的是容器(container)
docker export CONTAINER
$ docker export my_ubuntu > ubuntu.tar#将Ubuntu的最新镜像打包为ubuntu.tar
docker save [OPTIONS] IMAGE [IMAGE...]
-o, --output="" #写入到一个文件中作为输出,默认是标准输出流
$ docker save --output ubuntu.tar ubuntu:latest #将Ubuntu的最新镜像打包为ubuntu.tar
$ docker save ubuntu:latest > ubuntu.tar #将Ubuntu的最新镜像打包为ubuntu.tar
#docker 读取tar文件作为镜像
docker load用来载入镜像包(image),docker import用来载入容器包(container),但两者都会恢复为镜像。
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称
Docker load [OPTIONS]
-i, --input="" #读取一个压缩文件作为输入,默认是标准输入流
$ docker load --input ubuntu.tar #读取ubuntu.tar作为镜像
$ docker load < ubuntu.tar #读取ubuntu.tar作为镜像
Docker import [OPTIONS]
$ docker import postgres-export.tar postgres:latest /bin/bash
#docker 读取dockerfile构建镜像
docker build [OPTIONS] PATH|URL|-
-f #dockerfile文件路径
--force-rm=false #移除构建时生成的中间容器
--no-cache=false #Donot use cache when building the image
-q, --quiet=false # 不显示容器的输出
--rm=true # 构建成功后,移除构建时生成的中间容器
-t, --tag="" #构建成功后,新建镜像的名称
#docker 容器启动
$ docker container start *** #启动容器
$ docker container restart *** #重启容器
#docker 容器停止
$ docker container stop *** #停止容器
$ docker container kill *** #杀掉运行容器
#docker 镜像,容器删除
$ docker container rm *** #删除容器
$ docker image rm *** #删除镜像
#docker 进入容器
$ docker attach *** #进入容器,多窗口同步显示,exit之后,容器停止运行
$ docker exec -it *** /bin/bash #进入容器,exit之后,容器保持运行
#docker 退出容器
$ Ctrl+p+q #退出容器,并保持容器运行
$ exit #退出容器,容器停止运行
#docker 复制容器中文件
$ docker cp CONTAINER:PATH HOSTPATH
#docker log查看
$ docker logs CONTAINER
Docker时间问题:
docker时间和宿主主机时间不一致。
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)
3种修改方式:
(1)共享主机的localtime
创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的。
$ docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash
(2)复制主机的localtime
$ docker cp /etc/localtime 87986863838b:/etc/
(3)创建dockerfile文件的时候,自定义该镜像的时间格式及时区。在dockerfile文件里添加下面内容
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
Opencv错误:
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
ImportError: libXrender.so.1: cannot open shared object file: No such file or directory
ImportError: libXext.so.6: cannot open shared object file: No such file or directory
解决:
#Ubuntu
apt-get install libsm6
apt-get install libxrender1
apt-get install libxext-dev
#centos
yum install libSM
Make错误:
-bash: make: command not found
解决:
#Ubuntu
apt-get install gcc automake autoconf libtool make
#centos
yum -y install gcc automake autoconf libtool make
references:
Docker文档:https://docs.docker.com/get-started/
Dockerhub登录:https://hub.docker.com/
Nvidia docker:https://github.com/NVIDIA/nvidia-docker
NVIDIA GPU cloud:https://ngc.nvidia.com/signin/email