最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

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:容器 IDrunoob/ubuntu:v2: 指定要创建的目标镜像名
    • 构建镜像

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

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

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

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

      docker image prune //删除虚悬镜像docker image ls -f dangling=true //查找虚悬镜像
    • 查看镜像内的历史记录

      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 容器IDdocker start 容器IDdocker restart 容器ID
    • 进入容器
      attachexec  推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止docker exec -it dev-redis /bin/bash
    • 导入导出容器
      导出容器docker export 1e560fca3906 > ubuntu.tar导入容器快照docker import  example/imagerepo
    • 删除容器
      docker rm -f 容器ID\-f: 强制清理所有停止的容器docker container prune
    • 查看容器端口
      docker port 容器ID
    • 查看容器进程
      docker top 容器ID
    • 查看容器日志
      docker logs -f 容器ID
    • 容器自启动
      docker update --restart=always \
    • 容器互联
      新建网络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 centosRUN 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),以键值对的形式,语法格式如下:xxxxxxxxxxLABEL 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

关键词: 操作系统