云原生之docker命令详解

 更新时间:2023年06月05日 09:34:59   作者:山河亦问安  
Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,本文就给大家介绍了云原生中的docker命令

1.云原生概念

1.1 云原生定义

云原生”顾名思义,就是“生在云上、长在云上”。
云原生是一种以云计算技术为基础,利用容器、微服务、DevOps 和自动化等技术实现敏捷开发、快速部署的应用程序架构,这就是云原生。

云原生是面向“云”而设计的应用,因此技术部分依赖于传统云计算的 3 层概念,基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。

1.2 云原生元素

云原生元素如下图:

1.2.1 微服务

微服务解决的是我们软件开发中一直追求的低耦合+高内聚,记得有一次我们系统的接口出了问题,结果影响了用户的前台操作,于是黎叔拍案而起,灵魂发问:“为啥这两个会互相影响?!”

微服务可以解决这个问题,微服务的本质是把一块大饼分成若干块低耦合的小饼,比如一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操作,小饼可以进一步拆分,比如负责接收外部数据的小饼可以继续分成多块负责接收不同类型数据的小饼,这样每个小饼出问题了,其它小饼还能正常对外提供服务。

1.2.2 DevOps

DevOps 的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。我们现在开发和运维已经是一个团队了,但是运维方面的知识和经验还需要持续提高。

1.2.3 持续交付

持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。我们现在两周一个版本,每次上线之后都会给不同的用户造成不同程度的影响。

1.2.4 容器化

容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是 docker 和 k8s

所以你也可以简单地把云原生理解为:云原生 = 微服务 + DevOps + 持续交付 + 容器化

2. Docker

2.1 Docker概述

2.1.1 Docker 定义

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

2.1.2 Docker应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 解决软件跨境迁移的问题

2.1.3 Docker的架构

镜像(image)

Docker镜像(Image)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

容器(container)

Docker利用容器(Container)独立运行一个或一组应用。容器是使用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台,容器是一个简易版的Linux环境和运行在其中的应用程序。

仓库(Repository)

仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。

2.2 Docker命令

2.2.1 docker进程相关命令

#启动docker
systemctl start docker
#停止docker
systemctl stop docker
#查看docker状态
systemctl status docker
#重启docker
systemctl restart docker
#设置开机启动
systemctl enable docker

2.2.2 docker镜像相关命令

#查看镜像,查看本地所有的镜像
docker images
docker images 
    -q #查询所有镜像的ID
    -a #列出所有的镜像
    --help #命令帮助
#查询如下
#镜像的仓库源, 镜像的标签,镜像的id,     镜像的创建时间,   镜像的大小
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   14 months ago   13.3kB
#搜索镜像:从网络中查询需要的镜像
docker search 镜像的名称
#拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号, 如果不指定,则是最新版,如果不知道镜像的版本号,可以去hub.docker.com去查询
docker pull 镜像名称
#删除指定镜像
docker rmi 镜像id 

2.2.3 docker容器相关命令

docker run 参数 镜像名称:版本号

参数说明:
    * -i:保持容器运行,通常与-t同时使用,加上 it 这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭,
    * -d:以守护(后台)模式运行容器,创建一个容器在后台运行,需要使用docker exec 进入容器,退出后,容器不会关闭。
    * --name: 为创建的容器命名
    * -p 宿主机端口:容器端口

#查看正在运行容器
docker ps
#查看所有容器
docker ps -a
#创建并启动容器
docker run -d --name nginx1 -p 4200:80 nginx
#进入容器
docker exec -it ngnix1 /bin/bash
#停止容器
docker stop 容器名称或者容器id
#启动容器
docker start 容器名称或者容器id
#删除容器:如果是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称或者容器id
#查看容器信息
docker inspect 同期名称或者容器id

2.2.4 日志进程

#查看最近日志
docker logs -f 容器名/容器ID
#最近30分钟的日志
docker logs
#查看某时间之后的日志
docker logs -t  --since="2022-08-08T18:08:08" 容器ID
#查看某时间段日志
docker logs  -t  --since="2022-08-08T18:08:08" --until "2022-08-08T20:08:08" 容器ID
 

2.2.5 数据卷容器

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性,卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。数据卷可在容器之间共享或重用数据并且卷中的更改可以直接实时生效,数据卷的生命周期一直持续到没有容器使用它为止。

配置数据卷

docker run  ... -v 宿主机目录(文件):容器内目录(文件)...

注意事项

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂在多个数据卷
#mysql 同步数据
docker run -d -p 3310:3306 -v /www/server/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql1 mysql:5.5

2.2.6 dockerfile构建docker镜像文件

  • Dockerfile 是一个文本文件
  • 包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员:可以为开发团队提供一个完全一直的开发环境
  • 对于测试人员:可以直接那开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
  • 对于运维人员:在部署时,可以实现应用的无缝移植

构建自己的centos镜像如下图

执行dockerfile生成镜像

docker build -f dockerfile文件的路径 -t 设置新的镜像的名称和版本号 .  # 注意最后的点,代表生成的镜像路径

 -f 表示dockerfile路径
  -t 设备新镜像的名称和版本号
最后的. 表示生成镜像的路径,为当前路径

2.2.7 Docker Compose

我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

以上就是云原生之docker命令详解的详细内容,更多关于云原生 docker命令的资料请关注脚本之家其它相关文章!

相关文章

  • docker的卷映射手动指定位置的操作方法

    docker的卷映射手动指定位置的操作方法

    Docker中手动指定卷映射位置通过绑定挂载实现,使用-v或--mount参数,语法清晰,支持更多选项,注意宿主机目录存在性、权限和SELinux限制,本文介绍docker的卷映射手动指定位置的操作方法,感兴趣的朋友一起看看吧
    2025-02-02
  • Docker镜像重命名的实现方法

    Docker镜像重命名的实现方法

    本文主要介绍了Docker镜像重命名的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Docker之开启远程访问的实现

    Docker之开启远程访问的实现

    这篇文章主要介绍了Docker之开启远程访问的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Docker启动容器报错:Ports are not available的解决方案

    Docker启动容器报错:Ports are not available的解决方案

    这篇文章主要介绍了Docker启动容器报错:Ports are not available的解决方案,Docker 将容器程序的端口号映射到宿主机的端口号,是一个 NAT 过程,这个过程可能会因为与 Windows NAT 服务冲突而失效,文中有详细的解决方案,需要的朋友可以参考下
    2024-03-03
  • docker中mysql开启日志的实现步骤

    docker中mysql开启日志的实现步骤

    本文主要介绍了docker中mysql开启日志的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • kali下对Docker的详细安装教程

    kali下对Docker的详细安装教程

    这篇文章主要介绍了kali下对Docker的详细安装,Docker是渗透测试中必学不可的一个容器工具,在其中,我们能够快速创建、运行、测试以及部署应用程序,对kali安装docker相关知识感兴趣的朋友一起看看吧
    2022-05-05
  • 详解如何将java项目打包成docker镜像并且可运行

    详解如何将java项目打包成docker镜像并且可运行

    java 项目打包成 Docker 可运行的镜像,其目的是便于运用docker容器来管理项目,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2024-11-11
  • docker部署Prometheus+Cadvisor+Grafana实现服务器监控

    docker部署Prometheus+Cadvisor+Grafana实现服务器监控

    这篇文章主要为大家介绍了docker部署Prometheus+Cadvisor+Grafana实现服务器监控,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 清理Docker磁盘空间的几种有效方法

    清理Docker磁盘空间的几种有效方法

    随着Docker的广泛使用,管理Docker占用的磁盘空间变得越来越重要,长时间运行Docker环境,未使用的容器、镜像、卷和网络等会逐渐积累,占用大量磁盘空间,本文将介绍几种清理Docker磁盘空间的有效方法,需要的朋友可以参考下
    2024-08-08
  • 让非root用户构建Docker镜像的三种方法

    让非root用户构建Docker镜像的三种方法

    在默认情况下,Docker 需要 root 权限或 sudo 才能运行,这对于日常开发和 CI/CD 流水线可能不够方便,那么,如何让 非 root 用户 也能构建和运行 Docker 容器呢?本篇文章将介绍 三种方法 来实现这一目标,需要的朋友可以参考下
    2025-04-04

最新评论