Linux操作系统中docker

news2024/11/19 16:38:05

1、docker概述

1、什么是docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows(对于windows不是太友好)操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2、什么是沙盒

沙盒机制,又称为沙箱(sandbox),是一种计算机安全领域中的技术,用于为运行中的程序提供隔离的环境。这种机制主要通过以下方式来实现:

  • 进程隔离。通过创建独立的进程来运行应用程序,每个进程拥有自己独立的内存空间和资源,从而确保应用程序的异常不会影响其他进程和系统的稳定性。

  • 权限控制。通过权限控制来限制应用程序对系统资源的访问,例如通过访问控制列表(ACL)或用户权限来限制应用程序对文件系统的访问,以防止数据泄漏或破坏。

  • 资源隔离。对应用程序的资源使用进行限制,如CPU利用率和内存使用量,以防止某个应用程序占用过多的系统资源,导致其他应用程序运行缓慢。

  • 数据隔离。将应用程序的数据存储在独立的文件系统中,与其他应用程序的数据隔离开来,防止敏感数据被其他应用程序访问和修改。

  • 沙盒机制广泛应用于操作系统、浏览器、移动应用等场景,旨在提高安全性和稳定性。例如,在移动设备中,每个应用程序都有自己的沙盒,只能访问自己的存储空间,这有助于保护应用程序免受其他应用程序的干扰。在计算机安全中,沙盒常用于测试可能带有恶意代码的程序,因为在沙盒环境中,即使程序包含恶意行为,也不会对系统造成实际损害。

3、docker容器和虚拟机的区别

相同点:docker容器和虚拟机都采用了虚拟的技术。

不同点:docker相当于虚拟机而言,少了虚拟机操作系统层,少了一层就少了很多的资源浪费,所以docker的效率更高。

4、Docker架构

1、docker分三大部分

1、docker客户端

用户执行命令,客户端接收到命令会将命令发给docker主机,由主机去执行,同时会将docker的一些信息展示给用户。

2、docker主机

执行docker命令的,接收到docker客户端的命令,执行这个命令,这个过程是隐藏的,不会暴露给用户。

3、远程仓库

提供了丰富的镜像,有丰富的资源供开发者下载。

2、两个关键词

1、镜像

远程仓库中提供的都是镜像,镜像是启动容器必须的。【刚从远程仓库下载完,类似于 安装文件】。

2、容器

docker中真正运行的软件被称为容器,【安装后的软件,正在运行的软件,没有运行的软件都是容器】。

5、核心概念

6、docker的特性及优点

特点:

隔离,文件隔离、系统隔离、资源隔离、网络隔离、日志隔离等。每个容器都完全独立运行在一个沙盒中,所有数据、资源都是隔离的,比如,CPU、内存等等,网络上会为每个容器虚拟一个ip地址,docker为每个容器都提供自己的日志,互不影响。

优点:

它的虚拟化做的比虚拟机要好,更节省资源。可以跨平台,不需要担心操作系统的影响,另外docker的应用也很广泛,各大公司都有应用。

缺点:

docker对程序是友好的,但是不善于处理文件和数据,一般情况会将文件或数据以路径映射的方式挂载到容器外。

2、部署docker环境

官网手册:CentOS | Docker Docs

1、查看一下Linux内核版本

uname -r

要求3.10版本及以上。

2、卸载老版本docker,避免产生影响

如果服务器安装过docker,没有卸载再次安装会导致安装失败,首先要卸载老版本(咱们没安装过docker,可以不需要这个操作,不过可以试一下。)

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

3、升级 yum 和 配置源

yum工具可以安装软件,安装docker时需要更多工具,操作系统自带不够,所以要升级。

源是 安装软件时找的软件安装包,需要将docker的源(安装包)添加到yum中。

##执行第一个命令,给yum升个级。
yum install -y yum-utils 
​
​
##执行的第二个命令  【一次不成功,多执行两次】 (国外的)
 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
 
#配置源也可以换成下面的: 
 yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

【命令一:】

【命令二】

4、安装指定版本的docker

#安装指定版本的[命令公式]:
yum install --setopt=obsoletes=0 docker-ce-<VERSION_STRING> docker-ce-selinux-<VERSION_STRING>.noarch
#具体安装命令:
yum install --setopt=obsoletes=0 docker-ce-20.10.8-3.el7 docker-ce-selinux-20.10.8-3.el7.noarch
​

? 【安装过程中,两次都输入 y 】

5、安装成功

6、启动服务验证一下

# 执行命令1:启动docker服务
systemctl start docker
​
# docker开机自启
systemctl enable docker
​
# 运行hello-world程序(官方自带镜像)
docker run hello-world   
​

【执行命令1:】

【执行命令2:】

【执行命令3:】

【出错:执行后,显示超时连接】

【解决】

解决网址如下: Docker运行hello-world镜像失败或超时_unable to find image 'hello-world:latest' locally -CSDN博客

操作步骤1:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl status docker

操作步骤2:

docker info

操作步骤3:

docker run hello-world

7、导出虚拟机镜像

前提准备:Ctrl+D退出 Linux操作界面;然后虚拟机关机。

8、导入虚拟机镜像

【注意】

? 导入进来后,直接 ”正常启动“就可以,不需要进行设置网络和镜像。

3、docker的常用操作

0、操作汇总

镜像:刚从配置源下载完,类似于 安装文件
        查看镜像:images
        查找镜像:search  镜像名
        拉取镜像:pull 镜像名:版本
        移除镜像:rmi  镜像id或名字
            
容器:  
       安装容器:run 
       启动容器:start  容器id或者名字
       停止容器:stop  容器id或者名字
       查看容器:ps -a  (安装后的容器 + 启动的+停止的 。但是移除的容器不显示)
       移除容器:rm  容器id或者名字
       重启容器:restart  容器id或者名字
       进入容器内部:exec 容器id或者名字
=====例如,修改tomcat/webapps 里添加文件夹,添加访问页面。
       退出容器内部:exit 
       查看容器日志:logs 

1、查看本地镜像

docker images

REPOSITORY:镜像的名字

TAG:镜像标签,可以通过标签指定版本号

IMAGE_ID:镜像的唯一标识

CREATED:创建镜像的时间

SIZE:镜像大小

2、查找指定镜像【不操作】

1、到官网去查

网站: https://hub.docker.com/

2、用命令查

docker search 镜像名称

3、拉取镜像

docker pull tomcat:8.0

拉取tomcat的8.0版本镜像

4、查看容器

# 【查看当前正在运行的容器】
docker ps
​
# 【查看所有容器,包括运行中的和未启动的】
docker ps -a

CONTAINER_ID:容器的唯一标识

IMAGE:容器对应的镜像

COMMAND:容器启动执行的命令

CREATED:创建容器的时间

STATUS:容器的当前状态

PORT:容器的端口号

NAMES:容器的名字,自定义。名字不允许重复,无论容器的状态是运行还是停止。名字也是唯一的,操作容器时可以用container_id也可以用名字。

5、移除容器

【先多启动几次tomcat镜像:】

# rm是移除容器
docker rm 容器id或名字

按照id移除时可以不把id写全,docker会根据输入模糊匹配,如果只匹配到一个,那么移除,匹配多个不做任何操作。

# rmi是移除镜像
docker rmi 镜像id或名字:[标签]

移除镜像时,id的规则也符合容器操作的规则,模糊匹配。

如果镜像对应的容器存在(正在运行),不能移除镜像,需要先把所有容器都移除才能移除镜像。

6、创建 容器

# docker run 自定义个名字 镜像名字或id:标签
# docker run tomcat8 tomcat:8.0
# tomcat启动还要添加其它指令,以保证可以正常访问到tomcat,并且不占用控制点,在后台运行
​
docker run -p 8080:8080 -d --name tomcat8 tomcat:8.0

docker run -p 8090:8080 -d --name tomcat8-90 tomcat:8.0

run:第一次启动容器是要用run命令

-p:端口映射,将虚拟机的端口号映射到容器上(虚拟机端口号:容器端口号)

-d:后台运行

--name:给容器取个名字

7、启动Tomcat容器

# 启动 docker start 容器名称或id
docker start tomcat8
​
# 停止 docker stop 容器名称或id
docker stop tomcat8
​
# 重启 docker restart 容器名称或id
docker restart tomcat8

start和run的区别

  • run是在第一次启动时执行,准确来说是创建一个容器

  • start是启动已经存在的容器

  • start不需要想run一样写多个参数及配置,会自动按照run时的配置和命令启动

【启动tomcat容器成功后,可以通过宿主机 进行访问!】

8、进入容器内

# 进入容器内部 docker exec -it 容器名称或id /bin/bash
docker exec -it tomcat8 /bin/bash

exec:进入容器的命令

-it:是由-i和-t组成的,-i是交互方式,-t是提供一个终端

/bin/bash:指定命令的路径和方式(就是该路径下有linux命令的可识别文件。)

9、Tomcat启动后404问题(无)

创建的Tomcat容器的webapps目录下可能没有ROOT工程,这样会导致访问时出现404问题,可以进入容器后,从webapps.dist目录下的ROOT工程复制到webapps中。(目前版本已经不存在404问题了)

10、退出容器+查看容器日志

退出容器可以用ctrl+d,也可以执行exit命令

docker日志查看

# docker logs 容器名字或id -f -n 数字
docker logs tomcat8 -f -n 10

-f:日志持续输出,会时时输出产生的日志

-n:输出倒数X条日志

11、MySQL数据库安装和配置

1、拉取MySQL镜像

docker pull mysql:8

2、启动MySQL(不执行)

docker run --name mm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8

-e:执行的指令,MYSQL_ROOT_PASSWORD是给root用户设置了一个密码

【验证一下:连接mysql】

3、目录映射(执行)

按照结构在虚拟机中创建好对应的目录:

/usr/local/docker/mysql/logs

/usr/local/docker/mysql/conf

/usr/local/docker/mysql/conf/conf.d (目录)

/usr/local/docker/mysql/data

docker run --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql  mysql:8

-v:目录挂载(映射),虚拟机:容器内。

12、创建docker镜像

0、准备内容:

【1、准备项目】

【2、准备目录】

创建/usr/local/docker/jar/demo

1、创建Dockerfile文件

FROM openjdk:8 
ADD demo-helloworld-0.0.1-SNAPSHOT-exec-99.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
【注意】

创建Dockerfile文件: 文件里不能有中文字符,空格等。

2、上传jar

将做好的jar和Dockerfile上传到同一个目录下

3、执行命令

docker build -t demo .

打包一个名为demo的镜像到本地镜像仓库中

-t:添加一个标签,如果什么都不写就是lasted标签

demo:自定义一个镜像名字,注意允许有大写字母

.:代表当前目录,会把当前目录的文件打包镜像

【报错】

【解决】
# 拉取一下openjdk:8 镜像
docker pull openjdk:8  

4、启动

docker run -d -p 8888:8888 --name demo01 demo

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

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

相关文章

Amazon EC2:权限设置指南,构建安全的云环境

在数字化转型的浪潮中&#xff0c;企业纷纷将业务迁移到云端&#xff0c;以提高灵活性和效率。Amazon Elastic Compute Cloud&#xff08;EC2&#xff09;作为 AWS 的核心服务之一&#xff0c;为企业提供了一个强大的云计算平台。然而&#xff0c;随着云环境的复杂性增加&#…

DHCP 中继器

在实际应用中可能会遇到一个比较大的物理网络中存在多个ip子网&#xff0c;而每个ip子网的主机都需要DHCP服务器来动态分配ip地址&#xff0c;实现的方法有两种: 第一种是在每一个子网中设置DHCP服务器&#xff0c;将其分别为每个子网分配ip地址&#xff0c;但此方法会增加开销…

【Hadoop】【vim编辑器】【~/.bashrc 文件】如何编辑

1. 进入 vim 编辑器 在终端中输入以下命令&#xff1a; vim ~/.bashrc 2. 进入插入模式 打开文件后&#xff0c;你将处于普通模式。在普通模式下&#xff0c;你不能直接编辑文本。 要进入插入模式&#xff0c;请按下 i 键。这时&#xff0c;你应该会看到屏幕底部出现 -- 插…

优化java中 HashMap 的容量](capacity值)

我们很多人都知道&#xff0c;分配比我们所需更多的内存可能会对应用程序的性能产生负面影响。因此&#xff0c;使用带有容量的构造函数创建列表可能会产生很大的不同。 但是&#xff0c;使用Maps时&#xff0c;这个优化步骤可能不是那么简单。在本文中&#xff0c;我们将学习…

鸿蒙OpenHarmony【小型系统基础内核(互斥锁)】子系统开发

互斥锁 基本概念 互斥锁又称互斥型信号量&#xff0c;用于实现对共享资源的独占式处理。当有任务持有时&#xff0c;这个任务获得该互斥锁的所有权。当该任务释放它时&#xff0c;任务失去该互斥锁的所有权。当一个任务持有互斥锁时&#xff0c;其他任务将不能再持有该互斥锁…

Redis 主从复制的实现过程

Redis 主从复制的实现过程 1. 初始同步请求2. 快照生成与发送3. 从服务器载入数据4. 增量同步5. 持续同步与部分重同步 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Redis 的主从复制是一个高效的数据同步机制&#xff0c;主要步骤为以下…

5分钟内不能重复发送验证码!

文章目录 引言校验5分钟内不能重复发送验证码生成验证内容保存验证码到缓存获取缓存验证内容验证短信验证码是否正确数据模型see also引言 防止被恶意攻击,使用需要限制用户获取验证码的频率,例如5分钟内不能重复发送验证码!获取验证码接口,也必须进行签名校验。 使用Red…

单片机STM32 外部中断线的使用笔记

一、STM32外部中断线问题小结 1.1 不同的端口同一PIN 在STM32中&#xff0c;不同的端口&#xff08;如PA、PB、PC等&#xff09;上的相同PIN号&#xff08;如PA1、PB1、PC1&#xff09;可以共用一个外部中断线&#xff08;EXTI_Line&#xff09;。这意味着&#xff0c;虽然这些…

[系列]相关的知识点关联

系列 独立&不相关不相关&正交协方差&互相关相关系数协方差&相关系数余弦系数&内积余弦系数&相关系数滤波&卷积卷积&互相关互相关&内积互相关&归一化互相关

Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)

本文讲述在虚拟机环境下(模拟服务器)&#xff0c;使用docker方式搭建jenkins&#xff0c;并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑&#xff0c;后续再进行细节补充。 一、环境准备和基础工具安装 1. 环境 系统环境为本机vmware创建的Ubuntu24.04。 2. yum…

Unity 3D UGUI 系统一口气讲完!(^U^)ノ~YO

UGUI Canvas 画布 Canvas画布是摆放所有 UI 元素的区域&#xff0c;在场景中创建的所有控件都会自动变为 Canvas游戏对象的子对象。 若场景中没有画布&#xff0c;在创建控件时会自动创建画布。 不论是你主动创建还是被动创建&#xff0c;系统都会自动创建一个名为 EventSys…

使用Python解决数据分析中的相关性分析

目录 1.相关系数基础1.1 使用Pandas计算皮尔逊相关系数1.2 计算物品A与其他物品的相关系数1.3 用户间的相关系数1.4 获取相关系数矩阵 2. 相似度计算的Python实现2.1 欧式距离2.2 余弦相似度2.3 皮尔逊相关系数的手动实现 3. 总结 在数据分析中&#xff0c;相关系数是衡量两个变…

应用案例 | HK-MSR数据记录仪如何计算滑雪时膝盖上的应力?

计算滑雪时膝盖上的应力 阿尔卑斯山高山滑雪运动员在滑雪时对膝盖产生的压力有多大&#xff1f;Thea Waldleben&#xff0c;现任瑞士青年速降赛冠军&#xff0c;在她的 "Maturaarbeit"&#xff08;考试项目&#xff09;中回答了这个问题。通过使用HK-MSR数据记录仪&…

Python OpenCV精讲系列 - 边缘检测深入理解(十三)

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;Python OpenCV精讲⚡️⚡️&#x1f496;&#x1f496; 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计&#xff0c;从基础概念入手&#xff0c;逐步深入到图像处理、特征检测、物体识…

地质工程专业职称申报条件详细解读

一、初级&#xff08;助理&#xff09;地质工程工程师评审条件&#xff1a; 1、理工类或者地质工程类专业毕业 2、专科毕业满3年或本科毕业满1年 3、研究生毕业&#xff0c;从事本专业技术工作&#xff0c;当年内考核认定 二、中级地质工程工程师评审条件&#xff1a; 1、理工…

解决远程连接AlpineLinux Mysql/MariaDB 无法连接的问题

&#x1f525;博客介绍&#xff1a; EvLast &#x1f3a5;系列专栏&#xff1a; << C项目>> <<数据结构与算法>> << 算法入门>> &#x1f3a5; 当前专栏:<< C项目>> 专题 : 解决开发中的日常Bug &#x1f44d;&#x1f44…

服务端的 Session 详解

0x01&#xff1a;Session 简介 Session 是在 Cookie 的基础上发展的&#xff0c;其主要功能和 Cookie 一样&#xff0c;都是为了解决 HTTP 无状态的痛点&#xff0c;和 Cookie 不同的是&#xff0c;它是将大部分数据存储在了服务端&#xff0c;而只给用户一个 SESSID&#xff…

django学习入门系列之第十点《A 案例: 员工管理系统21》

文章目录 16 Ajax(订单案例)16.9 编辑想要去数据库中获取数据时:对象/字典将具体内容的错误信息传入到前端&#xff08;Ajax&#xff09;将数据库数据传入前端&#xff08;Ajax&#xff09;清空新建订单的数据 16.10 编辑后保存 往期回顾 16 Ajax(订单案例) 16.9 编辑 点击编辑…

TCN预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测

TCN预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测 目录 TCN预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料预测效果

Python第一篇:Python解释器

一&#xff1a;python解释器 python解释器是一款程序&#xff0c;用于解释、执行Python源代码。 一般python解释器都是c python使用c编写的&#xff0c;还有j python用java编写的。 二&#xff1a;python下载 三&#xff1a;使用示例 python进入控制台&#xff0c;python。 三…