zoukankan      html  css  js  c++  java
  • Docker概述及安装

    概述

    • Docker是开源、轻量级容器引擎
    • Docker使用容器承载应用程序,而不使用操作系统,因此开销小,性能高
    • Docker对应用程序的隔离不如虚拟机彻底

    Docker存储驱动

    • 每个Docker文件都有一个本地存储空间,用户保存层叠的镜像层[Image Layer],以及挂载的容器文件系统。
    • 默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中。

    Docker运维技能

    • Docker镜像下载
    • 运行容器
    • 登陆容器
    • 在容器内运行命令
    • 销毁容器

    Docker两个主要组件

    • Docker客户端
    • Docker daemon[服务端,引擎]
      * daemon实现了Docker引擎的API
    sudo docker version
    Client: Docker Engine - Community
     Version:           19.03.12
     API version:       1.40
     Go version:        go1.13.10
     Git commit:        48a66213fe
     Built:             Mon Jun 22 15:45:49 2020
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.12
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.13.10
      Git commit:       48a66213fe
      Built:            Mon Jun 22 15:44:20 2020
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.2.13
      GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
     runc:
      Version:          1.0.0-rc10
      GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    

    镜像

    • 可以将Docker镜像理解为一个包含了OS文件系统和应用的对象
    • 在Docker世界中,镜像实际上等价于未运行的容器
    • 查看Docker镜像
    sudo docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              latest              adafef2e596e        3 months ago        73.9MB
    
    • 镜像包含了基础操作系统,以及应用程序运行所需的代码和依赖包。
    • Docker的每个镜像都有自己的唯一ID。可以通过应用镜像的ID或名称来使用镜像。
    • 在Docker主机上获取镜像[拉取(pulling)]
    docker pull ubuntu
    Using default tag: latest
    

    容器

    • 拉取镜像到本地后,可以使用 docker container run 从镜像启动容器。
    • -it [将SHELL切换到容器终端]告诉Docker开启容器的交互模式并将当前的Shell连接到容器终端
    • docker run 告诉Docker Daemon 启动新的容器
    • /bin/bash 告诉Docker,想要在容器内部运行哪个进程。
    docker run -it ubuntu /bin/bash
    root@5dabfa10b0a0:/#
    
    • 在容器内部运行ps命令查看当前正在运行的全部进程
      可以看到容器中仅包含两个进程
      PID 1 代表 /bin/bash 进程,该进程是通过docker run 命令通知容器运行的
      PID 8 代表 ps -elf 进程,查看当前运行中进程所使用的命令/程序
    root@bf5f99b5ada3:/# ps -elf
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
    4 S root         1     0  0  80   0 -  1063 do_wai 10:14 pts/0    00:00:00 /bin/bash
    0 R root         8     1  0  80   0 -  1471 -      10:17 pts/0    00:00:00 ps -elf
    
    • 按 Ctrl-PQ 组合键,可以在退出容器的同时还保持容器运行
      [在容器内部使用该操作可以退出当前容器,但不会杀死容器进程]
      同时Shell返回到Docker主机终端
      再次运行 ps 命令
      与Docker容器相比,Docker主机中运行的进程数要多很多,
    ps -elf | grep docker
    4 S root      1370     1  0  80   0 - 151446 -     03:55 ?        00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    0 S root      4171  1369  0  80   0 - 26909 -      07:10 ?        00:00:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/59dee264970f0e239e1f40acf5b05afb856835ee0abb8a143af8e43a879353c2 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
    0 S vagrant   4268  2406  0  80   0 -  3558 pipe_w 07:11 pts/0    00:00:00 grep --color=auto docker
    
    • 可以通过docker container ls 命令查看系统内全部处于运行状态的容器
      • -a 列出所有容器,包括处于停止状态的
    docker container ls
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    59dee264970f        ubuntu              "/bin/bash"         3 minutes ago       Up 3 minutes                            magical_mestorf
    
    • 连接到运行中的容器
      执行 docker exec 可以将Shell连接到一个运行中的容器终端
      magical_mestorf 表示上述示例容器名称
    docker exec -it magical_mestorf /bin/bash
    root@59dee264970f:/#
    
    • docker exec 命令的格式如下
      将本地Shell连接到容器是通过-it参数实现的。
    docker exec <options> <container-name or container-id> <command/app>
    
    • 停止容器
    docker container stop magical_mestorf
    
    • 杀死容器
    docker container rm magical_mestorf
    

    安装

    • 有多种场景和方式安装:手工安装、脚本方式安装、向导方式安装
    • 多平台支持:Windows、Mac、Linux

    Linux 安装 Docker

    • 本文主要记录Linux下的Docker安装,安装社区版[CE]
    • 使用wget从https://get.docker.com获取并运行Docker安装脚本,然后采用shell中管道(pipe)的方式来执行这个脚本
    wget -qO- https://get.docker.com/ | sh
    // 也可通过curl获取安装脚本
    // curl -sSL https://get.daocloud.io/docker | sh
    
    • 确认安装结果
      • 查看如下信息,版本信息与docker系统信息包含Clinet及Server则表示安装成功
    docker --version
    Docker version 19.03.12, build 48a66213fe
    
    sudo docker system info
    Client:
     Debug Mode: false
    
    Server:
     Containers: 3
      Running: 0
      Paused: 0
      Stopped: 3
     Images: 1
    
  • 相关阅读:
    vue-cli
    respond.js
    dataTable调用接口渲染数据,没有数据,报错
    jq自定义鼠标右键菜单
    datatables通过ajax调用渲染数据,怎么根据数据给td添加class
    【C++ Primer 第11章 练习答案】2. 关联容器概述
    【Leetcode】1. Two Sum
    【C++】拷贝构造函数(深拷贝,浅拷贝)详解
    【图的遍历】广度优先遍历(DFS)、深度优先遍历(BFS)及其应用
    【C++ Primer 第十三章】4. 拷贝控制示例
  • 原文地址:https://www.cnblogs.com/biby/p/14031692.html
Copyright © 2011-2022 走看看