linux应用docker基本使用(一)

news2024/12/26 23:02:41

相关文章:

linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客

一、mac 安装及使用docker_docker mac_做测试的喵酱的博客-CSDN博客

Docker 容器使用 | 菜鸟教程

一、docker介绍

1.1 介绍

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个image文件里面。

运行这个文件,就会生成一个虚拟容器。

程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

1、Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

2、image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

3、为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
 

1.2、docker应用场景

Docker 是一种开源的应用容器化平台,它可以帮助开发人员和运维人员以更高效、可移植的方式构建、交付和运行应用程序。以下是 Docker 的一些常见应用场景:

  1. 应用程序的开发与测试:Docker 提供了一个轻量级、可隔离的容器环境,使开发人员能够在自己的开发机上快速创建和启动应用程序所需的运行环境,避免了因开发环境不一致而导致的问题。同时,也可以轻松地在多个环境中进行测试,保证程序在不同的环境中正常工作。

  2. 应用程序的部署与交付:使用 Docker 可以将应用程序及其所有依赖项打包成一个独立的容器,该容器可以在任意支持 Docker 的环境中运行,无需担心底层操作系统和软件的差异性。这使得应用程序的部署和交付变得更加简单、快速和可靠。

  3. 微服务架构:Docker 为微服务架构提供了理想的支持。通过将每个微服务打包为独立的容器,可以实现每个服务的独立开发、部署和扩展。同时,通过 Docker 的容器编排工具(如 Docker Compose 或 Kubernetes),可以方便地管理和协调多个微服务的运行和通信。

  4. 持续集成与持续部署(CI/CD):Docker 可以与 CI/CD 流程无缝集成。通过使用 Docker 来构建和打包应用程序,可以确保在不同的环境中始终使用相同的容器镜像,从而减少了部署过程中的不一致性和问题。同时,使用容器编排工具可以自动化部署、扩展和回滚等操作,实现快速且可靠的持续交付。

  5. 多租户环境:在共享资源的多租户环境中,使用 Docker 可以实现更好的资源隔离和管理。每个租户可以在独立的容器中运行其应用程序,并享受到与其他租户隔离的好处,而无需担心资源冲突和干扰。

  6. 跨平台开发和迁移:Docker 提供了跨平台的能力,可以在不同的操作系统上运行相同的容器。这使得开发人员可以在自己的开发机上构建和测试应用程序,然后将容器迁移到生产环境中,而无需担心操作系统的差异和依赖库的问题。

总结起来,Docker 的应用场景非常广泛,可以帮助简化开发、测试和部署流程,提高应用程序的可移植性、可伸缩性和稳定性。无论是单机应用还是分布式微服务架构,Docker 都能提供强大的支持。

二、docker启动容器,并在容器里运行程序(小栗子)

[root@ecs-39233 ~]# docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

  • docker: Docker 的二进制执行文件。

  • run: 与前面的 docker 组合来运行一个容器。

  • ubuntu:15.10 指定要运行的镜像/image,Docker 首先从本地主机上查找镜像/image是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:

Docker 以 ubuntu15.10 镜像/image创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

三、运行交互式的容器

进入容器的终端,并在容器的终端中,执行命令

3.1、进入容器的终端

docker run -i -t ubuntu:15.10 /bin/bash

  • -t: 在新容器内指定一个伪终端或终端。

  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

注意第二行 root@0123ce188bd8:/#,此时我们已进入一个 ubuntu15.10 系统的容器

3.2、在容器终端中,执行命令

1、执行命令,查看当前容器的内核信息。

cat /etc/os-release

显示为Ubuntu。我们当前启动的容器就是 ubuntu15.10 系统的容器

2、执行 cat /proc/version 查看内核信息

cat /proc/version

 

 注意:

在我自己的linux的容器终端中,这里显示的是Red Hat ,而不是ubuntu。因为

/proc/version 文件显示的是宿主机的内核版本信息,而不是容器内的。

由于 Docker 容器共享宿主机的内核,因此在容器内查看 /proc/version 实际上会显示宿主机的内核版本信息。因此,即使你在 Ubuntu 容器中运行该命令,也会显示宿主机 CentOS 的相关信息,比如 Red Hat。

要查看容器内部的实际内核版本,你可以运行 uname -r 命令。该命令将显示容器内正在运行的内核版本。

扩展:

1、cat /etc/os-release 与 cat /proc/version 区别:

1、cat /etc/os-release:这个命令显示的是操作系统的相关信息,包括发行版名称、版本号、ID等。该文件通常在基于Linux的操作系统中以文本文件的形式存在,提供有关该发行版的详细信息。

2、cat /proc/version:这个命令显示的是当前正在运行的内核版本信息。/proc/version 文件是在 Linux 内核文件系统中的一个文件,提供了有关内核的一些基本信息。
当你在 CentOS 7 上使用 Docker 启动了一个 Ubuntu 容器时,容器内的 /etc/os-release 文件确实会显示为 Ubuntu。但是 /proc/version 文件显示的是宿主机的内核版本信息,而不是容器内的。

由于 Docker 容器共享宿主机的内核,因此在容器内查看 /proc/version 实际上会显示宿主机的内核版本信息。因此,即使你在 Ubuntu 容器中运行该命令,也会显示宿主机 CentOS 的相关信息,比如 Red Hat。

要查看容器内部的实际内核版本,你可以运行 uname -r 命令。该命令将显示容器内正在运行的内核版本。

2、CentOS 与 Red Hat 是什么关系

CentOS (Community Enterprise Operating System) 是一个基于 Red Hat Enterprise Linux (RHEL) 的发行版,它与 Red Hat 有紧密的关系。

具体来说,CentOS 是由社区开发和支持的免费开源操作系统,完全兼容 Red Hat Enterprise Linux。CentOS 团队在 RHEL 的源代码发布后,将其重新编译并创建成 CentOS 发行版,以提供类似于 RHEL 的稳定性和功能。

CentOS 可以被认为是 RHEL 的克隆版本,但是它没有商业支持,而是由一个志愿者社区负责维护和更新。这使得 CentOS 成为许多企业和个人用户的首选,因为它提供了与 RHEL 相近的功能和性能,同时又是免费的。

3.3、退出容器终端

运行 exit 命令或者使用 CTRL+D 来退出容器

四、后台模式启动容器

使用以下命令创建一个以进程方式运行的容器

[root@ecs-39233 ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
fa60e7213ce7c7313848cd7c2cbd2a95193a1c93c1a4b17e5f6a02596a0e4582

在输出中,我们没有看到期望的 "hello world",而是一串长字符

2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

4.1 容器状态

docker ps 查看当前正在运行中的docker容器

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

4.1.1 容器的7种状态

  • created(已创建)
  • restarting(重启中)
  • running 或 Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

4.1.2 查看容器内的标准输出

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

方式:

  • docker logs 容器id(短)
  • docker logs 容器id(长)
  • docker logs 容器名称

docker logs fa60e7213ce7

这里的容器id /CONTAINER ID 可以使用短的id,也可以使用长的容器id

fa60e7213ce7c7313848cd7c2cbd2a95193a1c93c1a4b17e5f6a02596a0e4582

使用容器名称

docker logs keen_hermann

4.2 停止容器

docker stop 容器id/name

[root@ecs-39233 ~]# docker stop keen_hermann
keen_hermann
[root@ecs-39233 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

5、docker 容器使用

在终端中输入 docker 命令来查看到 Docker 客户端的所有命令选项。

5.1 镜像/image

5.1.1、拉取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:

docker pull ubuntu

5.1.2、查看镜像 列表

docker images

5.2 、使用镜像,启动容器

使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

$ docker run -it ubuntu /bin/bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

注意:

当本地没有镜像,通过镜像启动容器时,系统会自动拉取镜像,然后启动容器

5.3、查看容器列表

  1. 查看当前正在运行的容器:docker ps 
  2. 查看历史启动过的容器:docker ps -a

 一个镜像/image 可以启动多个容器,每个容器的id是不同的。

5.4、使用 docker start 启动一个已停止的容器:

docker start  容器id/name

$ docker start b750bbbcfd88 

5.5、 后台运行docker容器 -d

后台运行docker 的服务,我们可以过 -d 指定容器的运行模式。

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

参数说明:

  • -d: 在后台运行容器,不进入容器
  • -t: 终端。
  • -i: 交互式操作
  • --name ubuntu-test 指定容器名称为 ubuntu-test
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

5.6、停止一个容器

停止容器的命令如下:

$ docker stop <容器 ID/name>

5.7、重启容器

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>

5.8、进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach

  • docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

5.8.1 docker attach

$ docker attach 0119b146eac9

注意: 如果从这个容器退出,会导致容器的停止。

5.8.2 docker exec

docker exec -it 6d1d85879669 /bin/bash
  • -t: 终端。
  • -i: 交互式操作

注意: 如果从这个容器退出,容器不会停止

6、导出&导入&删除容器

6.1 导出容器为快照 docker export

如果要导出本地某个容器,可以使用 docker export 命令。

$ docker export 1e560fca3906 > ubuntu.tar

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

6.2 导入容器到镜像/image

可以使用 docker import 从容器快照文件中再导入为镜像。

以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

此外,也可以通过指定 URL 或者某个目录来导入,例如:

$ docker import http://example.com/exampleimage.tgz example/imagerepo

6.3 删除容器

删除容器使用 docker rm 命令:

$ docker rm -f 1e560fca3906

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode——两数相加

目录 一、两数相加 1、题目 2、题目解读 3、代码 二、反转链表 1、题目 2、题目解读 3、代码 三、两数相加 II 1、题目 2、题目解读 3、代码 反转链表再进行计算 借助栈 一、两数相加 1、题目 2. 两数相加 - 力扣&#xff08;Leetcode&#xff09; 给你两个 非…

linux入门之进程控制(上)进程创建,进程等待

目录 一、进程创建 1.fork函数 2.fork函数返回值 3.写时拷贝 4.fork常规用法 5.fork调用失败原因 二、进程终止 1.进程退出场景 2.进程常见退出方法 2.1_exit函数&#xff08;直接调用内核&#xff09; 2.2 exit函数 2.3return退出 三、进程等待 1.进程等待必要性…

Mysql数据库插入数据时提示 1366 - Incorrect string value: ‘\xE5\xBC\xA0\xE4\xB8\x89‘ 报错

背景&#xff1a; 在部署完成了mysql5.7.4数据库服务之后创建了mydb数据库&#xff0c;然后创建了如下的表&#xff1a; CREATE TABLE department(did int (4) NOT NULL PRIMARY KEY, dname varchar(20) );CREATE TABLE employee (eid int (4) NOT NULL PRIMARY KEY, ename var…

华为OD机试真题 Python 实现【微服务的集成测试】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 现在有n个容器服务&#xff0c;服务的启动可能有一定的依赖性&#xff08;有些服务启动没有依赖&#xff09;&#xff0c;其次服务自身启动加载会消耗一些时…

Leetcode:42. 接雨水(单调栈C++)

目录 42. 接雨水 题目描述&#xff1a; 实现代码与解析&#xff1a; 单调栈 原理思路&#xff1a; 42. 接雨水 题目描述&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#x…

SpringBoot配置外部Tomcat项目以及启动流程源码分析

1.SpringBoot配置外部Tomcat并打war包 2.SpringBoot配置外部Tomcat项目启动流程源码分析

调戏chatGPT(三)逻辑推理

chatGPT已经被吹的神乎其神了&#xff0c;今天我来测试一下chatGPT的逻辑推理能力 t 你好 你好&#xff01;很高兴能与您交流。 T 今天我想考考你的智力&#xff0c;看看你的逻辑思维能力如何 太好了&#xff01;我非常乐意 t 一根质地不均匀的绳子完全烧完需要1小时…

【云原生 | 57】Docker三剑客之Docker Swarm֯使用其他服务发现后端

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Android 为什么设计只有主线程更新UI?

选择方案的选择 单线程更新UI多线程更新UI 从问题本身考虑就两个方案不是单线程就是多线程。 下面是个人根据具体情况分析&#xff0c;如果有什么不对的地方&#xff0c;欢迎指正。 从开发效率来看&#xff0c;开发一个 单线程UI 库&#xff0c;会显得非常容易&#xff0c;而…

动态gif图片如何快速制作?分享一招快速制作gif动画

动态gif图片对大家来说都不陌生了&#xff0c;常常会在各种社交平台中见到&#xff0c;那么&#xff0c;这种gif动图片要怎么制作呢&#xff1f;很简单&#xff0c;给大家分享一款专业的gif制作&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&#xff0c;只需要上…

【多维BFS】AB路线

P2038 - AB 路线 - ZJHUOJ 题意&#xff1a; 思路&#xff1a; 首先看是什么影响了决策&#xff0c;即能不能走这个格子 走到当前格子是第几步和格子的字符种类影响了能不能走该格子&#xff0c;因此需要多加一维k&#xff0c;表示走到当前字符种类的第k步 然后就可以去BFS…

Jvm对象创建-JVM(六)

上篇文章说了jvisualvm工具查看年轻代老年代gc过程。 Jvisualvm&内存模型剖析-JVM&#xff08;五&#xff09;https://blog.csdn.net/ke1ying/article/details/131524708 jvm创建对象 之前我们介绍了类的加载&#xff0c;这篇文章要介绍类的创建&#xff0c;过程主要是&a…

通俗易懂生成对抗网络GAN原理(二)

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09;的原理 学习李宏毅机器学习课程总结。 前面学习了GAN的直观的介绍&#xff0c;现在学习GAN的基本理论。现在我们来学习GAN背后的理论。 引言 假设x是一张图片&#xff08;一个高维向量&#xff09;…

「AntV」使用AntV X6实现流程编排设计器

通过对BPMN的深入学习&#xff0c;以及对业界成熟的流程编排设计器的调研&#xff0c;了解到要研发一个流程编排设计器&#xff0c;需要实现如下几个主要的功能&#xff1a; 支持创建各种流程图元素&#xff0c;包括任务&#xff08;活动&#xff09;、网关、事件等。支持绘制…

漏洞复现 || NginxWebUI 后台命令执行runCmd远程命令执行

免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此…

【Linux】yum git 的使用

yum 的使用 yum 源的查看 yum 源就是一个配置文件。 可以看到 yum 源的文件中包含有很多下载源的链接。我们使用 yum 命令进行安装的时候&#xff0c;就是通过这些链接去寻找下载源进行下载的。这些链接一般都是国内的镜像网址。 所谓的更新 yum 源&#xff0c;也就是将最新…

异步交互技术Ajax

Ajax 概念&#xff1a;Asynchronous JavaScr And XML 异步的JavaScript和XML作用&#xff1a; 数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务响应的数据异步交互&#xff1a;可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部…

mysqldump + python 定时备份数据库

场景&#xff1a; 需要对mysql进行定时备份&#xff0c;受限于硬盘空间的大小&#xff0c;需要对备份的数据需要定时清理 python代码实现&#xff1a; # -*- coding:UTF-8 -*- """ProjectName : HotelGo2DelonixPmxFileName : fix_missing_ratesDescripti…

第二章:L2JMobius学习 – 安装jdk17

L2JMobius是一套开源的 LineageII 的服务器端代码&#xff0c;使用Java语言编写。想要运行L2JMobius源程序的话&#xff0c;需要安装jdk17版本。首先&#xff0c;下载jdk17版本。 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.msi 当然&#xff0c;也…

华为OD机试真题 Java 实现【新员工座位安排系统】【2022Q4 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 工位由序列F1,F2…Fn组成&#xff0c;Fi值为0、1或2。其中0代表空置&#xff0c;1代表有人&#xff0c;2代表障碍物。 1、某一空位的友好度为左右连续…