Linux下Docker的安装和使用

Docker基本概念

仓库(Repository):用来保存镜像 Docker Registry
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,
       镜像是静态的定义,容器是镜像运行时的实体。
       容器可以被创建、启动、停止、删除、暂停等。  
	安装的:Docker 主机(Host)  Docker Machine  
	使用的 Docker 客户端(Client)	

安装的Docker需要的

 docker 
 nvidia-docker
 需要提前确认GPU的支持

Docker的使用

 docker images : 列出本地镜像 
 使用 docker run 命令来在容器内运行一个应用程序
 docker stats --help  帮助系统
 -- docker 命令来查看到 Docker 客户端的所有命令选项
 -- Docker 公共仓库  Docker Hub  docker search centos
 -- Docker 私有仓库

Docker容器状态

 created(已创建)  restarting(重启中)
 running 或 Up(运行中)
 removing(迁移中)
 paused(暂停)
 exited(停止)
 dead(死亡)
-- 启动或者关闭
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker

Docker常用命令

 查看docker是否安装成功  docker version
-- 查看镜像   sudo docker images
-- 查看容器   sudo docker ps -a
## cd docker_images/
sudo docker save -o ufoy.tar ufoy-docker
sudo docker load -i ufoy.tar             #  docker load : 导入使用 docker save 命令导出的镜像。 --input , -i : 指定导入的文件	
sudo docker inspect *********
sudo docker history *********
   说明:
       docker inspect 用于查看docker对象的底层基础信息。
	   包括容器的id、创建时间、运行状态、启动参数、目录挂载、网路配置等等。
	   另外,该命令也可以用来查看docker镜像的信息。
 sudo docker run --runtime=nvidia  
 sudo nvidia-docker start "***
 sudo nvidia-docker exec -it  "***"  /bin/bash
 -- docker exec 进入容器内部
 

 ##停止和删除
 docker stop  你的_CONTAINER ID
 docker rm    你的CONTAINER_ID 
 
使用docker commit命令制作docker镜像
   docker history命令用来显示镜像创建的历史记录信息-再现完整构建命令
   
   docker commit 命令主要功能是把当前容器提交打包为镜像
   以使用docker commit构建镜像,但是推荐使用 Dockerfile 构建镜像(构建指令和设置指令)
# sudo docker info

 其他命令和说明
     docker tag
	 Dockerfile 的指令每执行一次都会在 docker 上新建一层。
	    指令:  COPY  ADD  CMD  ENTRYPOINT  ENV  ARG  VOLUME  EXPOSE  WORKDIR

制作Docker镜像并推送到镜像仓

容器引擎 docker 
制作容器镜像:镜像(Image)
   Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),
     每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
	   Dockerfile指令介绍如下。
        FROM语句:表示使用nginx镜像作为基础镜像,一个Dockerfile中FROM是必备的指令,并且必须是第一条指令。
        RUN语句:格式为RUN <命令>,表示执行echo命令,在显示器中显示一段“Hello, SWR!”的文字。
	 vim Dockerfile
	docker build
镜像库管理
Docker搭建带有访问认证的私有仓库
       拉取镜像registry(仓库)和registry-web(用于访问仓库的UI界面)
	   下载 docker-compose
	   创建几个目录,用于存放配置文件和作为私有仓库的镜像存储目录
	   设置配置文件
	   启动容器 docker-compose up -d
	   镜像运行情况:docker ps | grep registry
登录镜像仓库。
    docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]
    其中,区域项目名和镜像仓库地址在1中获取,AK在2中获取,登录密钥为3的执行结果
	# 登录私有镜像仓库 registry
	docker Login 100.10.10.12:8000   # 测试账号test 密码 aTtest123@
	docker login -u test -p Ttest123@
	相关认证信息在: $HOME/.docker/config.json 文件中
	 Registry的登陆密码是在容器镜像服务的密码。 Docker 会将 token 存储在 ~/.docker/config.json 文件中,从而作为拉取私有镜像的凭证
上传镜像:不同用户分配相应的访问权限(读取、编辑、管理) 镜像不包含任何动态数据
     docker tag 2048-demo:v1 swr.cn-north-1.myhuaweicloud.com/group/2048-demo:v1
     docker push [镜像仓库地址]/[组织名称]/[镜像名称:版本名称]	
     制作镜像压缩包: docker save [OPTIONS] IMAGE [IMAGE...]

Linux系统

01.ssh
   ssh -p 20 user@host
   ssh-keygen生成一个自己的公钥  新生成两个文件:id_rsa.pub 和 id_rsa 前者是你的公钥,后者是你的私钥
   公钥传送到远程主机host上面:
  $ ssh-copy-id user@host
02.scp  file_source file_target 
   -r: 递归复制整个目录
 ##本地推远程
   scp /home/snn_id/docker.sh test_id@100.100.100.100:/home/test_id/
   scp -r snn_id@10.10.10.10:/home/ss_id/docker.sh /home/test_id/
03.Linux tee命令用于读取标准输入的数据,并将其内容输出成文件
   sudo tee /etc/docker/daemon.json <<EOF
   {
       "runtimes": {
           "nvidia": {
               "path": "/usr/bin/nvidia-container-runtime",
               "runtimeArgs": []
           }
       }
   }
   EOF
   其中: <<EOF,以EOF输入字符为标准输入结束
   命令tee与重定向的区别
 重定向,是将读取的内容输出到指定文件中,在屏幕上并不显示
 命令tee,在屏幕上显示的同时,将读取的内容也重定向到指定文件中
    类似
     sed 's//home/ballchang/下载/hadoop3/jdk//usr/lib/jvm/java-1.8.0-openjdk-amd64/' /home/hadoop/hadoop-env.sh
         # -i :直接修改读取的文件内容,而不是输出到终端
     sed -i 's//home/ballchang/下载/hadoop3/jdk//usr/lib/jvm/java-1.8.0-openjdk-amd64/' /home/hadoop/hadoop-env.sh

    sudo pkill -SIGHUP dockerd    ps kill
04.添加软件包存储库
    sudo apt-key add -
	distribution
	
	Advanced Packaging Tool(apt)是Linux下的一款安装包管理工具
	   APT使用一个文件列出可获得软件包的镜像站点地址,这个文件就是/etc/apt/sources.list
	   格式如下: deb [web或ftp地址] [发行版名字] [main/contrib/non-free]
	   sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
       sudo apt-get update
	   确保软件包列表是最新的:apt-get update
  
05.sudo usermod -aG sudo your_name

参考

 nvidia-container-runtime  https://github.com/nvidia/nvidia-container-runtime#docker-engine-setup
 【Docker】Ubuntu16.04安装docker  https://blog.csdn.net/heiheiya/article/details/102820157
 【Docker】Ubuntu16.04安装nvidia-docker2 https://blog.csdn.net/heiheiya/article/details/102834222
 【Docker】nvdia-docker2 docker-ce  https://blog.csdn.net/heiheiya/article/details/102834703
原文地址:https://www.cnblogs.com/ytwang/p/14610005.html