1.Docker基础

文章目录

    • 1.docker架构
      • [1.1 Docker Engine 为什么要设计成客户端 / 服务器(C/S)架构?](#1.1 Docker Engine 为什么要设计成客户端 / 服务器(C/S)架构?)
      • [1.2 容器到底是什么](#1.2 容器到底是什么)
      • [1.3 docker与虚拟机的区别是什么](#1.3 docker与虚拟机的区别是什么)
      • [1.4 隔离是怎么实现的](#1.4 隔离是怎么实现的)
    • 2.docker安装
    • 3.docker镜像
    • 4.docker容器

1.docker架构

1.1 Docker Engine 为什么要设计成客户端 / 服务器(C/S)架构?

  • CS架构可以解耦,让升级、维护都更加简单

1.2 容器到底是什么

  • 容器就是操作系统里一个特殊的"沙盒"环境,里面运行的进程只能看到受限的信息,与外部系统实现了隔离

为什么要隔离

  • 容器隔离的目的是为了系统安全,限制了进程能够访问的各种资源

1.3 docker与虚拟机的区别是什么

实现方式 优势 劣势3
虚拟机 虚拟化硬件 隔离程度非常高 资源消耗大,启动慢
容器 直接利用下层的硬件和操作系统 资源利用率高运行速度快 隔离程度较低

1.4 隔离是怎么实现的

Linux 操作系统内核之中三项资源隔离技术

namespace cgroup(Linux Control Group) chroot
2002 年 Linux 2.4.19 2008 年从 Linux 2.6.24,cgroup技术最早由Google实现,被用于公司内部的Borg系统,也就是Kubernetes的前身,后来才被集成进Linux内核。 1979 年的 UNIX V7,目前的容器基本不再使用过于古老的 chroot 了,而是改用 pivot _ root。
它可以创建出独立的文件系统、主机名、进程号、网络等资源空间(能看那些进程) 对进程的 CPU、内存等资源的优先级和配额限制(能用那些资源) 更改进程的根目录,也就是限制访问文件系统(能看那些文件)
相当于给进程盖了一间小板房 给进程的小板房加了一个天花板 相当于给进程的小板房铺上了地砖

2.docker安装

1.安装Docker Engine

shell 复制代码
sudo apt install -y docker.io
sudo service docker start         #启动docker服务
sudo usermod -aG docker ${USER}   #当前用户加入docker组
docker version
docker info             # 会显示当前 Docker 系统相关的信息
docker run hello-world
docker pull busybox
docker run busybox echo hello world

2.配置docker加速器

shell 复制代码
sudo vim /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker

daemon.json

json 复制代码
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
[

3.docker的基本目录

  • /etc/docker/ docker的认证目录

  • /var/lib/docker/ docker的应用目录

3.docker镜像

  • 拉取镜像

    shell 复制代码
    $ docker pull unbuntu
  • 列举出所有镜像

    shell 复制代码
    $ docker images -a
  • 删除未标记或用过的镜像

    shell 复制代码
    $ docker rmi mydjango:1.0 mydjango:2.0
  • 移除所有未被使用的镜像

    shell 复制代码
    $docker image prune -a
  • 使用dockerfile构建镜像,docker build + 目录,.代表当前目录,-t表示加标签

    shell 复制代码
    $ docker build -t mydjango:2.0
  • 镜像加标签: docker tag 镜像标签 镜像标签名

    shell 复制代码
    $ docker tag mydjango:1.0 django

4.docker容器

应用的容器化:就是指应用程序不再直接和操作系统打交道,而是封装成镜像,再交给容器环境去运行

  • 创建并运行容器

    shell 复制代码
    $ docker run --name mydjango_1 -it -p 8080:80 mydjango:1.0 #创建容器并进入容器
    $ docker run -it ubuntu /bin/bash
    参数名 含义
    -i 以交互模式运行容器
    -t 为容器重新分配一个伪输入终端
    -p 端口隐射,宿主机在前,容器在后
    -d 后台运行容器,并返回容器ID
    -v 目录挂载
    --entrypoint 指定进入点
    --restart=always 服务重启
  • 启动/停止/重启/容器

    shell 复制代码
    $ docker start mydjango_1
    $ docker stop mydjango_1
    $ docker restart mydjano_1
  • 删除容器

    这个命令与 docker rmi 非常像,区别在于它没有后面的字母"i"

    shell 复制代码
    $ docker rm my_django1 
    $ docker rm -f mydjango_1 # 强制删除一个正在运行的容器
    $ docker container prune # 删除已停止运行的所有容器
  • 查看正在运行中的容器

    shell 复制代码
    $ docker ps -a # -a 包括停止运行的容器
  • 进入运行的容器

    shell 复制代码
    $ docker exec -it mydjango_1 /bin/bash
  • 查看容器日志

    shell 复制代码
    $ docker logs web
  • 查看容器的信息

    shell 复制代码
    $ docker inspect web
    $ docker inspect web | grep 'IPAddress' # 利用inspect查看容器的ip地址
  • 查看容器内已修改文件

    shell 复制代码
    $ docker diff mydjango_1
相关推荐
斯普信云原生组7 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪8 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人8 小时前
docker compose部署kafka集群搭建
docker·容器·kafka
safestar20128 小时前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins
来一颗砂糖橘9 小时前
负载均衡的多维深度解析
运维·负载均衡
楠奕9 小时前
CentOS7安装GoldenDB单机搭建及常见报错解决方案
linux·运维·服务器
GCTTTTTT9 小时前
远程服务器走本地代理
运维·服务器
剑锋所指,所向披靡!9 小时前
Linux常用指令(2)
linux·运维·服务器
飞Link10 小时前
逆向兼容的桥梁:3to2 自动化降级工具实现全解析
运维·开发语言·python·自动化
开心码农1号10 小时前
k8s中service和ingress的区别和使用
云原生·容器·kubernetes