• docker基本概念及安装


    Docker一次封装,到处运行

    ●Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源

    ●是在Linux容器里运行应用的开源工具

    ●是一种轻量级的“虚拟机”

    ●Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。

    Docker与虚拟机的区别

    特性Docker容器虚拟机
    启动速度秒级分钟级
    计算能力损耗几乎无损耗50%左右
    性能接近原生弱于
    系统支持量(单机)上千个几十个
    隔离性资源隔离/限制完全隔离

    Linux 的namespace (命名空间)

    namespace 的六项隔离

    namespace系统调用参数隔离内容
    UTSCLONE_NEWUTS主机名和域名
    IPCCLONE_NEWWIPS信号量,消息队列和共享内存
    PIDCLONE_NEWPID进程编号
    NETWORKCLONE_NEWNET网络设备,网络栈,端口等
    MOUNTCLONE_NEWNS挂载点(文件系统)
    USERCLONE_NEWUSER用户和用户组(3.8以后的内核才支持)

    Docker运行流程

    在这里插入图片描述

    Docker的使用场景

    ●打包应用程序简化部署

    ●可脱离底层硬件任意迁移

    例:服务器从腾讯云迁移到阿里云

    Docker的核心概念

    ①镜像 一个面向Docker容器引擎的只读模板

    ②容器 从镜像创建的运行实例

    ③仓库 集中保留镜像的地方

    仓库分为 公有仓库:Docker官方仓库 私有仓库:个人化、私有化的仓库

    总结:Docker是容器管理工具,容器由镜像创建而来,镜像从仓库中获取而来,仓库分为公有、私有。

    Docker安装

    1. #关闭防火墙
    2. systemctl stop firewalld.service
    3. setenforce 0
    4. yum install -y yum-utils device-mapper-persistent-data lvm2
    5. #配置阿里云镜像源
    6. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    7. #安装Docker-CE,并启动,同时设置为开机自启
    8. yum -y install docker-ce
    9. systemctl enable --now docker.service
    10. #查看docker的版本信息
    11. docker version
    12. #查看当前docker的详细信息
    13. docker info
    14. #镜像加速
    15. 通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
    16. sudo mkdir -p /etc/docker
    17. sudo tee /etc/docker/daemon.json <<-'EOF'
    18. {
    19. "registry-mirrors": ["https://hgfiuss0.mirror.aliyuncs.com"]
    20. }
    21. EOF
    22. sudo systemctl daemon-reload
    23. sudo systemctl restart docker
    24. ##为什么要开启路由转发功能?
    25. 开启路由转发 是让docker0能根据虚拟机ip为自己所有的docker容器分配虚拟ip
    26. vim /etc/sysctl.conf
    27. net.ipv4.ip_forward=1 #开启路由转发
    28. sysctl -p
    29. systemctl restart network
    30. systemctl restart docker
    31. ###docker-server端配置文件建议配置
    32. #在daemon. json文件中配置
    33. {
    34. "graph":"/data/docker", #数据目录,数据存储位置
    35. "storage-driver":"overlay2", #存储引擎,docker1.18以上版本默认使用overlay2存储引擎。早期的适合存储引擎使用的aufs
    36. "insecure-registries":["registry.access.redhat.com","quary.io"], #私有仓库
    37. #registry-mirrors 以下添加
    38. "bip":"172.184.70.1/24", #docker网络
    39. "exec-opts":["native.cgroupdriver-systemd"], #启动时的额外参数,(是一种挂在驱动,k8s使用)
    40. "live-restore":true #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能继续运行
    41. }
    1. [root@localhost yum.repos.d]# docker info
    2. Client:
    3. Context:   default
    4. Debug Mode: false
    5. Plugins:
    6. app: Docker App (Docker Inc., v0.9.1-beta3)
    7. buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
    8. scan: Docker Scan (Docker Inc., v0.17.0)
    9. Server:
    10. Containers: 0   #有多少容器
    11. Running: 0   #正在运行的数量
    12. Paused: 0   #暂停的数量
    13. Stopped: 0 #停止的数量
    14. Images: 0 #镜像的数量
    15. Server Version: 20.10.17   #服务端版本号
    16. Storage Driver: overlay2   #文件类型的驱动引擎
    17. Backing Filesystem: xfs   #文件系统类型
    18. Supports d_type: true
    19. Native Overlay Diff: true
    20. userxattr: false
    21. Logging Driver: json-file
    22. Cgroup Driver: cgroupfs   #Cgroup引擎类型
    23. Cgroup Version: 1
    24. Plugins:
    25. Volume: local
    26. Network: bridge host ipvlan macvlan null overlay
    27. Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk
    28. Swarm: inactive
    29. Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
    30. Default Runtime: runc
    31. Init Binary: docker-init
    32. containerd version: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
    33. runc version: v1.1.2-0-ga916309
    34. init version: de40ad0
    35. Security Options:
    36. seccomp
    37.   Profile: default
    38. Kernel Version: 3.10.0-693.el7.x86_64   #当前系统的内核版本
    39. #以下是当前系统的信息,因为docker共享系统配置
    40. Operating System: CentOS Linux 7 (Core)
    41. OSType: linux
    42. Architecture: x86_64
    43. CPUs: 1
    44. Total Memory: 1.781GiB
    45. Name: localhost.localdomain  
    46. ID: LQWK:2C26:54YI:XEIW:XZP3:Q44T:LB3J:3PAC:LKE3:HMNW:YE3Q:7FIN
    47. Docker Root Dir: /var/lib/docker
    48. Debug Mode: false
    49. Registry: https://index.docker.io/v1/ #默认仓库地址
    50. Labels:
    51. Experimental: false
    52. Insecure Registries: #指定私有仓库地址
    53. 127.0.0.0/8
    54. Live Restore Enabled: false
     
    

    docker镜像与容器基本的基本操作

    docker 镜像操作

    1. ●搜索镜像(公共仓库)——docker search
    2. 默认是在公共仓库找,如果有私有仓库,会在私有仓库找
    3. #格式:docker search 关键字
    4. #示例:
    5. docker search nginx
    6. ●下载镜像——docker pull
    7. #格式:docker pull 仓库名称[:标签]
    8. #如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
    9. docker pull centos:7
    10. docker pull nginx
    11. ●查看镜像——docker images
    12. #查看下载到本地的所有镜像
    13. docker images
    14. REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    15. nginx       latest   55f4b40fe486   27 hours ago   142MB
    16. --------------------------------------------------------------------
    17. REPOSITORY:镜像属于的仓库;
    18. TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
    19. IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像,经过md5方式加密过;
    20. CREATED:镜像创建时间;
    21. VIRTUAL SIZE:镜像大小;
    22. ●获取镜像信息——docker inspect
    23. #格式:docker inspect 镜像ID
    24. #示例:查看nginx镜像信息
    25. docker insect 605c77e624dd
    26. ●添加镜像标签——docker tag
    27. #格式:docker tag 名称:[旧标签] 新名称:[新标签]
    28. #示例:
    29. docker tag nginx:latest nginx:lnmp #给nginx打上标签lnmp,原来的标签是latest
    30. ●删除镜像——docker rmi
    31. docker rmi是docker rm image的简写
    32. #格式:
    33. docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
    34. docker rmi 镜像ID号   #会彻底删除该镜像
    35. ●批量删除镜像
    36. #docker images -q 可以加载镜像id
    37. #批量删除所有镜像
    38. docker rmi `docker images -q`
    39. #批量删除nginx镜像
    40. docker rmi `docker images|grep "nginx"`
    41. ●导出/导入镜像——docker save/load
    42. #导出镜像
    43. #格式:docker save -o 存储文件名 存储的镜像
    44. docker save -o nginx_v1 nginx:latest   #存出镜像命名为nginx存在当前目录下
    45. scp nginx_v1 @root:192.168.59.111:/opt   #将导出的镜像以scp方式导到别的服务器上
    46. #导入镜像,可以异地导入,但是必须要有docker引擎,并且版本不可以差太多
    47. #格式:docker load < 存出的文件
    48.     docker load -i 存出的文件
    49. docker load < nginx_v1

    docker容器操作

    1. ●查询所有容器运行状态——docker ps -a
    2. docker ps -a
    3. CONTAINER ID   IMAGE   COMMAND   CREATED   STATUS   PORTS   NAMES
    4. 容器的ID号 加载的镜像   运行的程序 创建时间 当前的状态 端口映射   名称
    5. ●创建容器——docker create
    6. 新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。
    7. #格式:docker create [选项] 镜像
    8. #常用选项:
    9. -i:让容器的输入保持打开
    10. -t:让 Docker 分配一个伪终端
    11. #示例:
    12. docker create -it nginx:latest /bin/bash
    13. ●启动容器——docker start
    14. #格式:docker start 容器的ID/名称
    15. docker start b2a57b3ea48a
    16. docker ps -a
    17. 启动容器(一次性执行)—— docker run
    18. #加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
    19. #示例1:
    20. docker run -itd nginx:latest /bin/bash
    21. #示例2:执行后退出
    22. docker run centos:7 /usr/local/bash -c ls /  
    23. #示例3:执行后不退出,以守护进程方式执行持续性任务
    24. docker run -d centos:7 /usr/local/bash -c "while true;do echo hello;done"
    25. ●终止容器运行
    26. 格式: docker   stop/kill   容器ID/名称
    27. stop: 停止容器,可以给容器一个等待时间,以防止数据的丢失。
    28. kill: 立即强行停止一个容器(相当于linux命令 kill -9) ,不会给容器反应时间,可能会造成数据丢失
    29. ●进入容器
    30. 需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。
    31. 格式:docker exec -it 容器ID/名称 /bin/bash
    32. -i 选项表示让容器的输入保持打开;
    33. -t 选项表示让 Docker 分配一个伪终端。
    34. docker start 2592d3fad0fb   #进入容器前,确保容器正在运行
    35. docker exec -it 2592d3fad0fb /bin/bash
    36. ls
    37. exit   #退出容器后,容器仍在运行
    38. docker ps -a
    39. ●从宿主机上将文件导入到容器中
    40. docker ps -a                                               #先获取需要导入到的容器ID,然后重新开一个终端
    41. 另一个终端上操作
    42. echo "wmc" >> cc.txt                   #创建测试文件
    43. docker cp 123.txt cef59022a4dd:/opt
    44. ●容器的导出与导入
    45. #导出格式:docker export 容器ID/名称 > 文件名
    46. docker export 2592d3fad0fb > centos7.tar
    47. #导入格式:cat 文件名 | docker import – 镜像名称:标签
    48. cat centos7.tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器
    49. ●删除容器
    50. 格式:docker rm [-f] 容器ID/名称
    51. docker stop 2592d3fad0fb
    52. docker rm 2592d3fad0fb #删除已经终止状态的容器
    53. docker rm -f 2592d3fad0fb   #强制删除正在运行的容器
    54. docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash   #批量停止容器
    55. docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量删除所有容器
    56. docker images | awk 'NR>=2{print "docker rmi "$3}' | bash   #批量删除镜像

  • 相关阅读:
    80型泵支架零件制造工艺设计及夹具设计仿真
    PHP:BidirectionalQueue双向队列算法(附完整源码)
    【C基础篇】选择结构与循环控制
    32.(前端)主页布局
    【自然语言处理】【实体匹配】用于实体匹配中blocking环节的深度学习:一个设计空间的探索
    ubuntu 20.04安装各类软件
    Linux 进程管理
    阿三的CV很有意思
    Java基础进阶反射
    初创公司用“豆包”大模型,日均tokens两个月内增长357倍
  • 原文地址:https://blog.csdn.net/wmc995620/article/details/125385589