Docker 命令笔记

本文提供在Ubuntu16.04环境下Docker及NvidiaDocker的安装与配置步骤,涵盖资源使用率查看、容器与镜像管理、时间同步、常见错误解决等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

阿里镜像:https://dev.aliyun.com/list.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值