• +86 400-9955-698
  • support@vinchin.com
logo
关于我们

技术分享

技术分享 docker知识整理(备份)

docker知识整理(备份)

2020-07-16

概念:

     镜像:Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板 。镜像是创建 Docker 容器的基础。通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像。镜像文件 一 般由若干层(layer)组成。多个镜像共用一个层时,本地只会存储该层的一份内容,以解决空间。

     容器: Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用 。容器是从镜像创建的应用运行实例 。 它可以启动、开始、停止 、 删除,而这些容器都是彼此相互隔离、互不可见的 。可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网 络空间等)以及运行在其中的应用程序打包而成的盒子 。

    镜像和容器的关系:镜像自身是只读的 。 容器从镜像启动的时候,会在镜像的最上层创建一个可写层 。

     仓库:Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。

    仓库注册服务器是存放仓库的地方。每个仓库集中存放多个某一类镜像,这些镜像通过不同的标签( tag )来进行区分。例如仓库注册服务器存放了ubuntu和centos两个仓库,ubuntu仓库中又存放了16.04和18.04版的ubuntu镜像。

CentOS 7 安装docker :

#卸载旧版本
yum remove docker{,-{common,selinux,logrotate,client{,-latest},latest{,-logrotate},engine{,-selinux}}}   
#安装必要系统工具
yum install yum-utils device-mapper-persistent-data lvm2  
#添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
#更新yum缓存
yum makecache fast   
#安装docker社区版
yum  install docker-ce  
#启动docker服务
systemctl start docker
#测试hello world
docker run hello-world

 

Debian上安装Docker

下面命令全部以root用户执行:

更新可用软件包列表:
# apt update   

安装必备包 :
# apt install curl  apt-transport-https ca-certificates  gnupg2 software-properties-common 

添加docker的gpg秘钥:
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -添加apt源:
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"为刚添加的源更新可用包列表:
# apt update


确认一下docker-ce的安装来源为docker官方的源,而非debian的源:
apt-cache policy docker-ce    

确认好来源后,执行apt install安装docker-ce
apt install docker-ce

查看docker状态,服务处于running状态:
systemctl status docker

 

镜像加速(例如使用163):

 /etc/docker/daemon.json改成

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"] }
然后重启docker: systemctl daemon-reload; systemctl restart docker


docker命令 -- 镜像操作:
获取镜像(pull): docker pull [OPTIONS] NAME[:TAG|@DIGEST]  //NAME是仓库名称/或镜像名。不指定镜像tag就会默认使用latest,latest会跟踪镜像的最新变化,往往是不稳定的。option部分参考docker <命令> --help,下同
      例如 docker pull ubuntu:18.04 //等效于docker pull registry.hub.docker.com/ubuntu:18.04

查看镜像(images/image ls/inspect)
           docker images 或 docker image ls
例如 docker images --filter=dangling=true //列出没有被使用的镜像 
          例如 docker images --format='{{.ID}} {{.Repository}}'  //仅查看ID和仓库
     
      查看镜像详情:  docker inspect 仓库名:标签  docker inspect ubuntu:18.04  //help上的提示是Return low-level information on Docker objects  
          例如  docker inspect ubuntu:18.04
          例如  docker inspect -f '{{.ID}}' centos:latest

打标签(tag): docker tag ubuntu:latest myubuntu:lates  //类似软链接概念
镜像历史(history),列出各层创建信息: docker history ubuntu: 18. 04  //如果信息过长被阶段,可以添加参数 --no-trunc
搜索镜像(search)docker search --filter=is-official=true --limit=30 nginx  //默认输出25个,所以这里使用--limit来限制
删除镜像(rmi/image rm): docker rmi -no-prune ubuntu:latest //-no-prune不要清理未带标签的父镜像。
清理镜像(image prune)清理临时和未用的镜像文件: docker image prune  //-a, -all: 删除所有无用镜像, 不光是临时镜像;    -filter filter: 只清理符合给定过滤器的镜像;

创建镜像:
基于已有容器创建,例如对容器的/tmp目录新增一个文件后(使用Dockerfile创建,另开一文):
执行:docker  commit -m "ThisIsComment" -a "ThisIsAuthorName" ae012c07115e test1:latest
再执行:docker history test1:latest
//回显IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
7e3d6c953ff8        49 seconds ago      /bin/bash                                       467kB               ThisIsComment1e1148e4cc2c        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           2 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:6f877549795f4798a…   202MB

 


导出镜像到tar(save): docker save -o ubuntu_18.04.tar ubuntu:18.04 
从tar导入镜像(load):docker load -i ubuntu_18.04.tar 或 docker load < ubuntu_18.04.tar
上传镜像(push): docker push [OPTIONS] NAME[:TAG]

docker命令 -- 容器操作
从镜像创建容器(create): docker create [OPTIONS] IMAGE [COMMAND] [ARG...] //option相当多
启动容器(start):docker start [OPTIONS] CONTAINER [CONTAINER...]         //比较有用的选项: -a 连接stdout/stderr,转发信号    -i 连接stdin
新建并启动容器(run): docker run [OPTIONS] IMAGE [COMMAND] [ARG...]       //option也相当多,更多选项参考man docker-run或docker run --help
   比较重要的选项有:
       -d表示守护进程方式运行。
       --net=<bridge、none、container、 host、network命令>  #bridge是容器内网络接口桥接到宿主的docker0; none就是不配置容器的网络(隔离的网络栈); container:共享已存在容器的网络和端口资源,
                                                            两个容器可以使用lo网口通讯(--net=container:容器名或id); host是指使用宿主机的网络(比较危险);
   该命令做了:如果镜像没有就从公有仓库下载,然后用镜像创建容器,分配文件系统,并在只读镜像外层挂上可读写层,从宿主的网桥接口中桥接一个虚拟接口到容器中,并分配ip地址,执行应用程序然后终止。
查看容器输出(logs): docker logs [OPTIONS] CONTAINER  //即使容器已经运行完毕了,但还是可以通过该命令来查看输出。选项支持按照时间来查看输出
暂停、解除暂停容器(pause/unpause): docker pause CONTAINER [CONTAINER...]  / docker unpause CONTAINER [CONTAINER...]
停止容器(stop):docker stop [OPTIONS] CONTAINER [CONTAINER...]   //先发SIGTERM,默认10秒后发SIGKILL信号。
先停再启容器(restart):docker restart [OPTIONS] CONTAINER [CONTAINER...]
移除所有停止状态的容器(container prune): docker container prune [OPTIONS]
向容器发信号(kill): docker kill [OPTIONS] CONTAINER [CONTAINER...]  //默认是SIGKILL信号
进入容器(attach): docker attach [OPTIONS] CONTAINER  //--detach-keys[=[]]: 指定退出 attach 模式的快捷键序列, 默认是 CTRL-p CTRL-q; --no-stdin=trueifalse :是否关闭标准输入,默认是保持打开; --sig-proxy=truelfalse :是否代理收到的系统信号给应用进程,默认为 true
在运行的容器中执行命令(exec): docker exec [OPTIONS] CONTAINER COMMAND [ARG...]  //可以指定环境变量,交互,tty、工作目录等
删除容器(rm):docker rm [OPTIONS] CONTAINER [CONTAINER...]
导出容器到stdout(export),不管它是否正在运行:  docker export [OPTIONS] CONTAINER //重要选项 -o tar文件路径  
复制文件或目录到(cp): docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- 或 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH  //这里的-号表示stdin或stdout, 例如: tar -zcf - /tmp/a.txt |docker cp - ae012c07115e:/tmp
查看容器(container inspect/top/stats): 例如:docker container stats [OPTIONS] [CONTAINER...] //查看容器统计,如cpu、内存、存储、网络等
查看变更(diff): docker diff <容器名> //查看文件增删改
查看端口映射(port): docker port CONTAINER [PRIVATE_PORT[/PROTO]]
更新配置(update): docker update [OPTIONS] CONTAINER [CONTAINER...] //限制容器的cpu使用率,绑定cpu核,限制内存使用率等


其他命令,不详细描述了:
管理命令有:
  builder     Manage builds
  config      Manage Docker configs  container   Manage containers
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes
# 例如上面很多命令其实是省略的写法,比如docker create其实对应的是docker container create


数据卷、数据卷容器:
数据卷: docker volume create -d local test  //创建一个普通数据卷,创建完成后,就可以看到/var/lib/docker/volumes/下多了个test目录,volume子命令有很多其他的命令,使用docker volume --help 查看

数据卷容器
:执行 docker run -it -v /TestVol --name cos1 centos:latest     //创建了一个带数据卷的容器 cos1,里面执行df会发现有 /TestVol这个挂载点
         docker run -it --volumes-from=cos1 --name cos2 centos:latest  //指定分区来源为上面的容器
在任意一个容器执行: cd /tmp/TestVol; touch aaa 然后就可以在另一个容器中发现 ls -l  /TestVol 会多出aaa这个文件
如果删除了挂载的容器(包括 dbdata 、 db 工和 db2 ),数据卷并不会被自动删除 。 如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用 docker rm -v 命令来指定同时删除关联的容器 。//这点有疑问

绑定数据卷:  docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
    上面命令注释: type有bind、volume、tmpfs三类。bind就是映射到宿主的某个绝对路径,volume就是上面通过docker volume create创建的普通数据卷,tmpfs就是临时的内存数据卷
    上述命令等同于使用旧的 -v 标记可以在容器内创建一个数据卷 docker run - d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
    只读挂载: docker run -d -P --name web -v /webapp:/opt/webapp:ro training/webapp python app.py //同理rw就是读写挂载

 
端口映射:  
-p 宿主机IP:宿主机端口:容器端口   //注意,宿主机IP和宿主机Port都可以省略。 例如 -p 80 是省略宿主机的IP和port,-p 192.168.1.1::80 省略了宿主机的port。默认协议是tcp,如果需要指定udp,要这样写: -p 33:22/udp 
或者-P 自动映射随机端口  
例如:run -d -p 8000:80 nginx:latest //其他机器访问http://宿主机IP地址:8000/ 即可看到nginx欢迎页


容器互联

例子: docker run -d --name c1 -it centos:latest /bin/bash
     docker run -d --name c2 --link c1 -it centos:latest /bin/bash  //然后我们在c2里面的/etc/hosts就看到了 ip和c1的映射关系(c1中没有c2 IP和c2的映射)。如果不用--link 那么可以就通过容器内的ip来连通了


 

 

 

 


搭建私人仓库: 使用 registry 镜像创建私高仓库,具体自己百度

 

  • 标签:
  • 技术分享

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载