当前位置: 首页 > article >正文

Docker-如何启动docker

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile

Docker镜像

Docker仓库

Docker原理(本小节属于)

Docker网络&存储&日志

Docker-Compose

Docker番外篇

我们经过前面两小节介绍docker的操作命令,只要熟练掌握这些命令,实际上我们已经可以掌握容器的运行,但是如果我一个容器无法启动或者启动失败,我们应该怎么去排错呢?

所以我们需要对docker的原理有一定的理解,这里我们先介绍docker的运行原理之一。

在讲解docker的运行原理之前,我们先来讲解前台进程和后台进程。在 Linux 系统中,进程可以根据其运行方式分为前台进程和后台进程。理解这两个概念有助于更好地管理和控制系统的运行状态。下面是关于这两个概念的详细解释:

前台进程 (Foreground Process)

定义:前台进程是指当前与终端交互的进程。用户可以直接看到前台进程的输出,并可以向其发送输入。

前台进程通常会阻塞终端,这意味着用户不能在前台进程运行期间输入其他命令,除非前台进程结束或被暂停。

示例:在终端中运行 ping 127.0.0.1 命令,ping 命令会持续输出结果,直到用户按下 Ctrl+C 终止它(适合linux,win默认4个包就会退出)。

后台进程 (Background Process)

定义:后台进程是指在后台运行的进程,它们不与终端直接交互。用户可以在后台进程运行的同时继续使用终端执行其他命令。

示例:使用 & 符号将命令放到后台运行。例如,运行 sleep 100 &,sleep 命令将在后台运行,终端立即返回,用户可以继续输入其他命令。

Docker的启动

通过前面的学习,我们了解docker的隔离性实际上比虚拟机差,它并没有从操作系统上进行隔离,而是通过Linux上的namespace特性进行的逻辑隔离(这个后面会单独讲)。

所以我们docker里面的进程实际上就是在docker子进程下面启动了一个普通进程(在操作系统里面也可以看到这个进程)。如果这个进程退出,则这个容器就会退出,这也就是我们的docker里面必须要有一个前台进程的原因。也是为后面的Dockerfile提前做好准备,避免我们制作的镜像出现无法启动情况。

下面我们讲通过例子来讲解这个问题,这个镜像官方的centos7的镜像,只有3层。

图片

按照我们前面讲解的命令,我们通过后台启动它,我们虽然启动这个容器,但是这个容器启动以后立即就退出,并没有按照我们的预期在后台持续运行。

[root@localhost ~]# docker run -d centos:7
88c8b9abd7000fa2366a10bd3d1caa131daffcb462094908baffb4040a1c2cd6
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS                     PORTS     NAMES
88c8b9abd700   centos:7   "/bin/bash"   7 seconds ago   Exited (0) 6 seconds ago             funny

我们换一种方式来启动它,使用了-itd参数来启动来,它就是按照我们的预期在后台运行。

[root@localhost ~]# docker run -itd centos:7
c16e503b7ddafe655403fb23718b1cd638d13d30f9924f952a3e34e2cc1d065d
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS                          PORTS     NAMES
c16e503b7dda   centos:7   "/bin/bash"   4 seconds ago        Up 4 seconds                              peaceful_tharp

我们再换一个nginx的镜像,这个镜像虽然tag被我修改过,但是它也是docker的官方镜像。

图片

[root@localhost ~]# docker run -d 192.168.31.43:5000/nginx
d664641bef7b6fcea5941efd6e3c38b8f13f6ac3f33181aa40b460fed51b11ca
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS                       PORTS     NAMES
d664641bef7b   192.168.31.43:5000/nginx   "/docker-entrypoint.…"   3 seconds ago   Up 3 seconds                 80/tcp    elastic_taussig
[root@localhost ~]# docker run -itd 192.168.31.43:5000/nginx
38dfe0c1fea8fd643f4abb5ae0b7c5fa9efdda2eb84c47ed0ea2556b801067d7
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                       PORTS     NAMES
38dfe0c1fea8   192.168.31.43:5000/nginx   "/docker-entrypoint.…"   2 seconds ago    Up 2 seconds                 80/tcp    happy_bhabha
 

可以看到无论我们无论是使用-itd 还是-d 它都可以按照我们预期的方式在后台持续运行,这个是为什么呢?

图片

通过这个对比,让我们了解到docker run的参数和不同的镜像其实相关联,不同的镜像是可以匹配不同的参数,这个就需要对镜像有一个基本的认识,这里简单的分类下:

1.操作系统&环境镜像

比如centos,ubuntu,jdk等类型的镜像

2.服务类操作系统

比如nginx,tomcat,mysql等提高具体服务的镜像

3.自我制作的镜像

就需要根据自己需要来实现,规则也可以参考上面两种。

根据前面信息,我们也就可以根据不同的镜像输入不同的运行命令,确保他是可以正常启动,而不会出现启动及退出。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!


http://www.kler.cn/a/450576.html

相关文章:

  • OpenResty开发环境搭建
  • 21.打印文件地址 C#例子
  • tcp 的重传,流量控制,拥塞控制
  • 某集团GIF动态验证码识别
  • 亚远景-SO 21434标准下的汽车网络安全:风险评估与管理的关键实践
  • 解释下什么是面向对象?面向对象和面向过程的区别?
  • 使用Python开发PPT图片提取与九宫格合并工具
  • 京东物流营销 Agent:智能驱动,物流新篇(13/30)
  • 面对小白的C语言学习方法
  • C++进阶(二)--面向对象--继承
  • 设计模式的主要分类是什么?请简要介绍每个分类的特点。
  • 服务器中了挖矿病毒-应急响应
  • 活着就好20241225
  • ctf相关总结
  • StartAI图生图局部重绘,让画面细节焕发新生!!
  • 基于单片机(如 51 单片机)实现十字路口交通灯控制电路的设计方案示例
  • 【Vue3+ts入门小试牛刀】
  • [机器学习]sklearn入门指南(2)
  • Elasticsearch介绍及安装部署
  • CentOs安装Nginx
  • Ubuntu系统部署程序:修改IP、部署docker、nginx、Redis、onlyoffice、java
  • git Force Push失败:unable to access解决方案
  • python web知识点梳理
  • Stealthy Attack on Large Language Model based Recommendation
  • 电子电气架构 --- 什么是EPS?
  • Linux程序设计(第四版)| 学习笔记