• Docker部署和全部命令


    文章目录

    前言

    关于Docker:
    Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议。通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。

    在这里插入图片描述
    容器和虚拟机的区别:

    在这里插入图片描述

    1. 启动速度:
      虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。
      容器使用宿主操作系统的内核,而虚拟机使用独立的内核。Docker 的局限性之一是,它只能用在64位的操作系统上。
    2. 体积:
      容器占用体积小,基本是MB级别的。
      虚拟机占用体积大基本是GB级别的。
    3. 隔离性:
      容器提供了进程的隔离。
      虚拟机提供了资源的完全隔离。
    4. 本质区别:
      容器是进程

    Docker的优点:

    1. 启动速度快,可以快速部署
    2. 占内存小,充分利用服务器资源
    3. 可移动性强,可跨平台部署
    4. 交付性强,一次构建,多次交付

    Docker的三个重要组成部分:

    1. 镜像
      在这里插入图片描述
      Docker的镜像好比就是一个容器,就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
      例如:运行拉取nginx.img ------>run(运行)------>叫做nginx的容器(提供服务)。

    2. 容器
      Docker利用容器技术可以运行一个或者多个应用,通过镜像来创建的。
      它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
      可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
      容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

    3. 仓库
      存放镜像的地方,公有的仓库:Docker Hub 阿里云 网易云 华为云务。
      也可以自己搭建一个私有的仓库。

    部署

    Docker的默认安装目录是 /var/lib/docker

    1. 进行清空旧版docker和依赖

      yum remove docker
      docker-client
      docker-client-latest
      docker-common
      docker-latest
      docker-latest-logrotate
      docker-logrotate
      docker-engine

    2. 安装阿里云的Docker源

      yum-config-manager
      –add-repo
      http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    3. 安装最新版本的 Docker Engine-Community 和 containerd

      yum install docker-ce docker-ce-cli containerd.io

    4. 启动Docker并放到后台运行

      systemctl enable docker && systemctl start docker

    5. 安装镜像加速器
      可以提升拉去镜像的速度,国内有阿里、网易、科大这些云厂商都在提供镜像加速器服务,本文选择安装阿里云的镜像加速器。
      ①打开阿里镜像服务的网址::https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 然后记录图中的地址。
      在这里插入图片描述②在Docker写入配置文件,更换上图获取的地址即可,重启Docker服务即可。

      cat > /etc/docker/daemon.json << EOF
      {
      “registry-mirrors”: [“https://dfw6zeux.mirror.aliyuncs.com”]
      }
      EOF

      systemctl daemon-reload && systemctl restart docker

    帮助命令

    docker version : 查看版本信息

    docker info : 显示 Docker 系统信息,包括镜像和容器数…

    Docker --help 查看帮助信息

    镜像命令

    docker images : 列出本地镜像

    docker images 
    
    • 1

    docker rmi : 删除本地一个或多少镜像。

    dicker rmi [镜像ID1]..[镜像ID多个]
    
    • 1

    docker tag : 标记本地镜像,将其归入某一仓库,也叫打标签,形成一个新的镜像。

    docker tag [镜像名:镜像版本]   [新的镜像名:新的镜像版本]
    
    • 1

    docker build :命令用于使用 Dockerfile 创建镜像。

    使用该命令之前 ,应该需要在指定目录有Dockerfile文件
    docke build [参数] [Docker的目录]
    参数列表  
    -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
    --cpu-shares :设置 cpu 使用权重;
    --cpu-period :限制 CPU CFS周期;
    --cpu-quota :限制 CPU CFS配额;
    --cpuset-cpus :指定使用的CPU id;
    --cpuset-mems :指定使用的内存 id;
    --disable-content-trust :忽略校验,默认开启;
    -f :指定要使用的Dockerfile路径;
    --isolation :使用容器隔离技术;
    --label=[] :设置镜像使用的元数据;
    -m :设置内存最大值;
    --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
    --no-cache :创建镜像的过程不使用缓存;
     -q :安静模式,成功后只输出镜像 ID;
    -shm-size :设置/dev/shm的大小,默认值是64M;
     --ulimit :Ulimit配置。
    --squash :将 Dockerfile 中所有的操作压缩为一层。
    --network: 默认 default。在构建期间设置RUN指令的网络模式
    
    例如 
    [root@localhost ~]# vim dockerfile
    FROM nginx
    RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
    
    [root@localhost ~]# docker build -t nginxtest:v1.0  .
    -t : 后面是新的镜像名字和标签  “.” Dockerfile是在当前的目录
    [root@localhost ~]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    nginxtest    v1.0      dcb60ca8b3d8   2 minutes ago   133MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    Dockerfile:构建容器的文件.
    在这里插入图片描述docker -H history : 查看指定镜像的创建历史。

    [root@localhost ~]# docker history -H [镜像ID]
    
    • 1

    docker save -o : 将指定镜像保存成 tar 归档文件。

    docker save  -o  命名.tar  [镜像名:镜像版本  或者  镜像ID]
    例如
    [root@localhost ]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    nginxtest    v1.0      dcb60ca8b3d8   24 minutes ago   133MB
    [root@localhost ]# docker save -o nginxtest.tar dcb60ca8b3d8
    root@localhost ]# ll -h
    -rw------- 1 root root 131M 3月  14 21:24 nginxtest.tar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    docker load : 导入使用 docker save 命令导出的镜像。

    docker load [参数]
    [root@localhost test]# docker load < nginxtest.tar
    或
    [root@localhost test]# docker load -i  nginxtest.tar
    
    • 1
    • 2
    • 3
    • 4

    docker import : 从归档文件中创建镜像。

    docker import [镜像包] [新的镜像名:标签]
    [root@localhost test]# docker import  nginxtest.tar nginx:v1.0
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@localhost test]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    nginx        v1.0    eac8ab518808   22 seconds ago   137MB
    
    
    export 和 import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。
    
    你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。
    
    快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。
    
    docker save 保存的是镜像(image),docker export 保存的是容器(container);
    docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
    docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    容器命令

    docker ps -a : 列出容器

    docker inspect : 获取容器/镜像的元数据。

    docker inspect [容器ID]或[容器名]
    
    • 1

    docker start 启动容器 docker stop 停止容器 docker kill 强行终止容器

    docker start -itd --restart=always [容器ID] /bin/bash
    -i :标准输入输出
    -t:分配一个终端或控制台
    -d	后台运行容器,并返回容器ID
    --restart=always:容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    docker -rm:删除一个或多个容器。

    删除所有已经停止的容器:
    docker rm $(docker ps -a -q)
    删除容器 nginx01, 并删除容器挂载的数据卷:
    docker rm -v nginx01
    强制删除容器 ngxin02
    docker rm -f nginx02
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    docker -p : 映射端口

    docker -p 8888:80 主机8888端口映射容器80端口
    docker -p 随机映射
    
    • 1
    • 2

    docker attach :docker exec 连接到正在运行中的容器。

    docker exec -itd [容器ID]或[容器名] /bin/bash
    
    • 1

    docker exit Ctrl+p+q退出容器

    exit:退出并结束容器内的应用进程
    Ctrl+p+q:退出容器交互界面
    
    • 1
    • 2

    docker pause :暂停容器中所有的进程。

    docker unpause :恢复容器中所有的进程。

    docker logs : 获取容器的日志

    docker logs [参数] [容器名或ID]
    -f : 显示实时日志
    --since :显示某个开始时间的所有日志
    -t : 显示时间戳
    --tail :仅列出最新N条容器日志
    
    • 1
    • 2
    • 3
    • 4
    • 5

    docker export -o :将容器 归档 [快照] 成一个tar文件

    docker export  -o 命名文件.tar  [容器ID] 
    
    • 1

    docker top :查看容器中运行的进程信息。

    docker top [容器ID]或[容器名]
    查看所有容器的进程
    for i in  `docker ps |grep Up|awk '{print $1}'`;do echo  &&docker top $i; done
    
    • 1
    • 2
    • 3

    docker commit :从容器创建一个新的镜像。

    docker commit [参数] [容器ID] [新的镜像名:标签]
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停。
    
    root@localhost ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                NAMES
    848908c20f36   nginx     "/docker-entrypoint.…"   6 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   ngixn
    
    [root@localhost ~]# docker commit -a "king" -m "my test" 848908c20f36  ngxintest:v1.0 
    
    [root@localhost ~]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    ngxintest    v1.0      50b4321ff10b   8 seconds ago   133MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    docker cp :用于容器与主机之间的数据拷贝。

    docker cp [主机目录]  [容器ID:目录]
    docker cp     /www/runoob    96f7f14e99ab:/www/
    或
    docker cp  96f7f14e99ab:/www/   /www/runoob
    
    • 1
    • 2
    • 3
    • 4

    docker diff : 检查容器里文件结构的更改。

    [root@localhost ~]# docker diff [容器ID]
    
    • 1

    仓库命令

    docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
    docker logout : 退出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

    登陆到Docker Hub
    docker login -u 用户名 -p 密码
    登出Docker Hub
    docker logout
    
    • 1
    • 2
    • 3
    • 4

    docker pull : 从镜像仓库中拉取或者更新指定镜像

    从Docker Hub下载ngixn镜像。
    docker pull -a nginx:1.6 (不加标签默认最新版本)
    从Docker Hub下载ngixn所有镜像。
    docker pull -a nginx
    
    • 1
    • 2
    • 3
    • 4

    docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

    上传本地镜像ngxintest:v8.8到镜像仓库中。
    docker push ngixntest:v8.8
    
    • 1
    • 2

    docker search : 从Docker Hub查找镜像

    从 Docker Hub 查找所有镜像名包含ngxin,并且收星星大于 1000 的镜像
    docker search -f stars=1000 nginx
    
    • 1
    • 2
  • 相关阅读:
    iPaaS和RPA,企业自动化应该如何选择?
    MySQL浅析之架构概览
    【NeRF】1、NeRF 是什么
    mysql中还有窗口函数?这是什么东西?
    python3之35个关键字详解
    Fabric.js 修改画布交互方式到底有什么用?
    好库推荐|两个解决ja3检测的Python库,强烈推荐
    【最详细】Git常用命令面试题 (60道)
    AWS Lambda 操作 RDS 示例
    【uniapp小程序】—— 配置首页搜索框
  • 原文地址:https://blog.csdn.net/m0_67401228/article/details/126327673