docker学习

基础命令

  • 基础概念

    虚拟机
    • 资源占用多
    • 启动慢
    linux容器

    linux容器不是模拟一个完整的操作系统,而是对进程进行隔离

    启动快,资源占用少,体积小

    docker

    docker是linux容器的一种封装,提供简单易用的容器使用接口

    原理:Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样

    用途:提供一次性的环境,提供弹性的云服务,组建微服务架构

    docker info 查看信息
    docker version 查看版本

  1. 镜像(操作系统包)

    • 概念

      镜像是一种虚拟的概念,实际并非由一个文件组成,而是由一组文件系统组成(多层文件系统联合组成)

      镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层,类似于git(提交)

    • 列出镜像列表

      docker images / docker image ls -a 
      
    • 拉取镜像

       docker  pull  centos
      
    • 查找镜像

      docker search centos  
      
    • 删除镜像

       docker  rmi d52bdbc72669(images ID)
      
    • 更新镜像

      docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
      -m: 提交的描述信息
      -a: 指定镜像作者
      e218edb10161:容器 ID
      runoob/ubuntu:v2: 指定要创建的目标镜像名
      
    • 构建镜像

      使用dockerfile去构建镜像
      docker build -t runoob/centos:6.7 .
      -t :指定要创建的目标镜像名
      . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
      
    • 设置镜像标签

      docker tag 860c279d2fec runoob/centos:dev
      docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
      
    • 推送镜像

      docker tag ubuntu:18.04 username/ubuntu:18.04
      docker push username/ubuntu:18.04
      docker search username/ubuntu:18.04
      
    • 查看镜像、容器、数据卷所占用的空间。

       docker system df 
       docker diff  containername  //查看容器存储层改动
      
    • 虚悬镜像

      docker image prune //删除虚悬镜像
      docker image ls -f dangling=true //查找虚悬镜像
      

      image

    • 查看镜像内的历史记录

      docker history  imagename
      
  2. 容器(操作系统的一个实例)

    • 容器

    image 文件生成的容器实例,本身也是一个文件,称为容器文件

    一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已

    每一个容器运行时,是以镜像为基础,在其上创建一个当前容器的存储层(容器存储层)

    • 启动容器
      docker run -itd -rm -P --restart=always ubuntu:15.10 /bin/bash
      -i: 交互式操作。
      -t: 终端。
      -d: 后台运行
      -P 端口随机映射本地
      -p 容器内部端口绑定到指定的主机端口
      -rm 这个参数是说容器退出后随之将其删除
      --restart具体参数值详细信息:
      no        // 默认策略,容器退出时不重启容器;
      on-failure    // 在容器非正常退出时(退出状态非0)才重新启动容器;
      on-failure:3    // 在容器非正常退出时重启容器,最多重启3次;
      always      // 无论退出状态是如何,都重启容器;
      unless-stopped  // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
      ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
      /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
      
    • 启动已停止运行容器
      docker ps -a
      
    • 启动,关闭,重启容器
      docker stop 容器ID
      docker start 容器ID
      docker restart 容器ID
      
    • 进入容器
      attach
      exec  推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止
      docker exec -it dev-redis /bin/bash
      
    • 导入导出容器
      导出容器
      docker export 1e560fca3906 > ubuntu.tar
      导入容器快照
      docker import <http://example.com/exampleimage.tgz> example/imagerepo
      
    • 删除容器
      docker rm -f 容器ID
      \-f: 强制
      清理所有停止的容器
      docker container prune
      
    • 查看容器端口
      docker port 容器ID
      
    • 查看容器进程
      docker top 容器ID
      
    • 查看容器日志
      docker logs -f 容器ID
      
    • 容器自启动
      docker update --restart=always \<containerName>
      
    • 容器互联
      新建网络
      docker network create -d bridge dev-net
      \-d: 参数指定 Docker 网络类型,有 bridge、overlay。
      运行一个容器加入网络中
      docker run -itd --name test1 --network dev-net ubuntu /bin/bash
      
    • 列出本机所有容器,包括终止的容器
        docker container ls --all
      
  3. Dockerfile

    • FROM 和RUN

      FROM 基于什么镜像
      RUN 用于执行后面跟着命令行命令
      <!--例如-->
      FROM centos
      RUN yum -y install wget \
          && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
          && tar -xvf redis.tar.gz
      
    • COPY

      COPY 从上下文目录中复制文件或目录到容器指定位置
      <!--例如-->
      COPY hom* /mydir/
      COPY hom?.txt /mydir/
      
    • ENTRYPOINT

      类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖
      ENTRYPOINT ["nginx", "-c"] # 定参
      CMD ["/etc/nginx/nginx.conf"] # 变参 
      
    • ENV

      设置环境变量
      ENV NODE_VERSION 7.2.0
      
    • VOLUME

      定义匿名数据卷
      	避免重要数据
      	避免容器不断变大
      VOLUME <路径>
       -v 参数修改挂载点
      
    • WORKDIR

      WORKDIR <工作目录路径>
      
    • LABEL

      LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:xxxxxxxxxx 
      LABEL org.opencontainers.image.authors="runoob"
      
  4. 数据卷(volume)

    数据卷是一个多个容器使用的特殊目录

    • 数据卷可以在容器之间共享和重用
    • 对数据卷的修改会立马生效
    • 对数据卷的更新,不会影响镜像
    • 数据卷默认会一直存在,即使容器被删除
    • 创建数据卷

      docker volume create my-col

    • 查看数据卷

      docker volume ls 
      
    • 查看指定数据卷的信息

      docker volume inspect my-col  
      查看容器的信息
      docker inspect containername
      
    • 创建一个容器,并加载一个数据卷到指定目录

      $ docker run -d -P \
          --name web \
          # -v my-vol:/usr/share/nginx/html \
          --mount source=my-vol,target=/usr/share/nginx/html \
          nginx:alpine
      
    • 挂载一个主机目录作为数据卷

      使用--mount 标记可以指定挂在一个本地主机的目录到容器中
      $ docker run -d -P \
          --name web \
          # -v /src/webapp:/usr/share/nginx/html \
          --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \
          nginx:alpine
      
      -v 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用 --mount 参数时如果本地目录不存在,Docker 会报错 
      
    • 删除数据卷

      docker volume rm my-vol
      // 无主的数据卷删除
      docker volume prune 
      

本文作者:乐天--

本文链接:https://www.cnblogs.com/blackamon/p/17105273.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   乐天--  阅读(32)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起