Docker-如何启动docker

embedded/2024/12/28 16:43:25/

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

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而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.ppmy.cn/embedded/148524.html

相关文章

项目底链华为链切换长安链经验总结

项目底链华为链切换长安链经验总结 前言业务需求分析智能合约重写k-v存储结构设计设计上链存储的结构体使用迭代器查询历史记录长安链合约编辑器历史记录返回错误材料上链非必传字段 Int 类型自动赋值长安链cmc工具部署合约ca证书需齐全分页查询截取处理,返回 nil处…

深度学习推理速度优化指南

深度学习推理速度优化指南 简介一、显卡频率设置二、查看当前显卡频率三、调整显卡频率范围注意事项总结 简介 本文旨在探讨深度学习推理过程中 CUDA 或 TensorRT 推理速度变慢的问题,并提供实用的解决策略。我们将从显卡频率设置、模型权重优化等方面出发&#xf…

C++ 函数编程题

目录 1、等差数列求和 2、判断数字位数 3、有规律的图形 4、简易计算器 5、素数对 6、用函数打印金字塔 7、用函数计算员工的平均工资 8、用函数计算斐波那契数列的指定项 (1)要求用非递归函数实现用函数计算斐波那契数列的指定项 (2)要求用递归函数实现用函数计算斐波…

安装CPU版的torch(清华源)

1、安装指令: pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple2、验证torch是否安装成功 // 使用python验证 import torch print(torch.__version__)能正常打印版本即表示安装成功,如下图

基于WCF(C#)+SQL SERVER设计与实现的在线评测系统

基于WCF和SQL SERVER的在线评测系统设计与实现 摘要 目前,在线评测系统大多采用Linux系统作为运行平台,由于Linux系统人机交互能力差,使得系统部署要求高和维护难度大。本文针对以上问题进行分析,采用Windows操作系统作为运行平…

AMD | GPU | 深度学习 | 如何使用

问题:我在复现代码的时候,发现自己只拥有AMD的GPU,对于一个硬件小白来说,怎么办呢?我想看看怎么使用;解决: 首先要安装支持AMD的GPU的pytorch,pytorch; 使程序在安装了支…

电力-恶意代码合集

ESS发送客户端信息 科东测试ESS外发的客户端上报数量不足,将数据库中已接收的客户端信息全部删除,需要ESS重新再此发送客户端的全部信息。 通过修改:vim /kingsoft/conf_gd_sync_info.lua 【里面记录了已外发的客户端信息,增量上报】 将内容修改为:{} 修改完成后重启ESS管…

Java:链接redis报错:NoSuchElementException: Unable to validate object

目录 前言报错信息排查1、确认redis密码设置是否有效2、确认程序配置文件,是否配置了正确的redis登录密码3、检测是否是redis持久化的问题4、确认程序读取到的redis密码没有乱码 原因解决 前言 一个已经上线的项目,生产环境的redis居然没有设置密码&…