Docker

news2024/11/19 19:33:20

目录

  • 1、docker介绍
    • 1.1 docker是什么
    • 1.2 容器与虚拟机的比较
  • 2、docker安装
    • 2.1 docker 基本组成
    • 2.2 安装步骤
    • 2.3 阿里云镜像加速
    • 2.4 run干了什么
  • 3、docker常用命令
    • 3.1 帮助命令及启动命令
    • 3.2 镜像命令
    • 3.3 容器命令
  • 4、Docker镜像
    • 4.1 镜像是什么?
    • 4.2 分层镜像 UnionFS 联合文件系统
    • 4.3 镜像加载原理
    • 4.4 重点理解
    • 4.5 修改原始镜像并保存为新的镜像(生成镜像的方法)

1、docker介绍

1.1 docker是什么

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker原理:一次镜像,处处运行,从搬家到搬楼。把能运行的程序以及环境打包成一个镜像文件,在docker上运行。
docker是什么:docker是一个解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

1.2 容器与虚拟机的比较

  • 传统虚拟机技术 是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
  • 容器 内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
    每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
    在这里插入图片描述

2、docker安装

2.1 docker 基本组成

  • 镜像(image)(类比java中的类)
  • 容器(container)(类比java中的实例对象)
  • 仓库(repository)(集中存放镜像文件的地方)(国内一般都用阿里云)

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

docker平台架构图解:

在这里插入图片描述

2.2 安装步骤

安装地址: https://docs.docker.com/engine/install/centos/.
我安装的是CentOS7版本

  • 卸载旧版本
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  • yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
  • 安装需要的软件包
sudo yum install -y yum-utils
  • 设置stable镜像仓库,用阿里云的
yum-config-manager --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 更新yum软件包索引
yum makecache fast
  • 安装DOCKER ce 社区版
yum -y install docker-ce docker-ce-cli containerd.io
  • 启动docker
# 启动(执行命令后没有输出,是正常)
systemctl start docker

# 查看启动是否成功
ps -ef | grep docker
# 查看版本号
docker version
  • 测试
# 启动hello-world镜像
docker run hello-world
  • 卸载
# 停止docker服务
systemctl stop docker
# 删除docker服务
yum remove docker-ce docker-ce-cli containerd.io
# 删除docker的一些配置文件、库、包等
rm -rf /var/lib/docker
# 删除docker容器等相关东西
rm -rf /var/lib/containerd

2.3 阿里云镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxx.xxxxx.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

2.4 run干了什么

在这里插入图片描述
doker底层原理:
docker是一个 client-server 结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问。当docker-server接收到docker-client的指令,就会执行这个命令。

docker为什么比VM快?

  • docker有着比虚拟机更少的抽象层
  • docker利用的是宿主机的内核,而虚拟机每次都需要重新搭建一个操作系统内核

所以说,新建一个容器的时候,docker不需要向虚拟机一样重新加载一个操作系统内核,直接用的宿主机的操作系统,省略了这个复杂的过程。

3、docker常用命令

3.1 帮助命令及启动命令

# 1.启动docker
systemctl start docker
# 2.停止docker
systemctl stop docker
# 3.重启docker
systemctl restart docker
# 4.查看docker状态
systemctl status docker
# 5.开机启动
systemctl enable docker
# 6.查看docker概要信息
docker info
# 7.查看docker总体帮助文档
docker --help
# 8.查看docker命令帮助文档(会列出命令的可选参数)
docker 具体命令 --help

3.2 镜像命令

1.列出本地的镜像

# 1.列出本地的镜像
docker images [OPTIONS]
-a 列出本地所有的镜像,含历史映像
-q 只显示镜像ID

在这里插入图片描述
在这里插入图片描述
2、查远方仓库某个镜像

docker search [OPTIONS] 镜像名字
--limit:只列出N个镜像,默认25个
# 举例
docker search --limit 5 redis

在这里插入图片描述
3、下载镜像到本地

docker pull 镜像名字[:TAG]
TAG:版本号,默认是下载最新的latest

在这里插入图片描述
指定版本:
在这里插入图片描述
4、查看镜像、容器、数据卷所占空间

docker system df

目前3个镜像(mysql-latest、mysql-5.7、hello-world)1个容器(hello-world)
在这里插入图片描述
5、删除某个镜像

docker rmi [-f] 镜像名字(或imageID)
rmi:就是 remove image 的意思
注:如果删不掉,可能镜像被某个容器正在用,可以加 -f 强制删除

# 删除单个镜像
docker rmi -f 镜像[:TAG]  # 也可以按照镜像id删除
# 删除多个镜像
docker rmi -f 镜像[:TAG] 镜像[:TAG]  # 也可以按照镜像id删除
# 删除所有的镜像,($符号是引用的意思)
docker rmi -f $(docker images -qa)

3.3 容器命令

有镜像才能创建容器 (java中由类才能创建对象实例)
下载一个centos镜像来测试学习

docker pull centos

1、新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 参数说明
--name="name"   容器名字,用来区分容器
-d   后台方式运行
-it  使用交互方式运行,进入容器查看内容
-p   指定容器的端口 -p 8080:8080 跟主机映射
	四种方式: -p 主机端口:容器端口  (常用)
			 -p ip:主机端口:容器端口
			 -p 容器端口
			 容器端口
-P   大写,随机指定端口

# COMMAND 说明
例如 使用 -it 进行交互运行,交互运行肯定需要一个控制台
可使用 /bin/bash

可通过如下指令启动并进入容器

docker run -it centos /bin/bash

在这里插入图片描述
进入之后,ls可发现,容器内就是一个自己的服务器环境!它就是我们下载的centos,就是一个小型的服务器!

exit # 退出容器

2、查看正在运行的容器

# 查看正在运行的容器
docker ps
# 查看正在运行的容器以及历史中启动过的容器
docker ps -a
# 查看最近创建的容器
docker ps -l
# 显示最近n个创建的容器
docker ps -n 2
# 显示当前正在运行的容器编号
docker ps -q
# 显示所有启动过的容器编号
docker ps -aq

在这里插入图片描述

3、退出容器

# run进去容器,exit退出,容器会停止
exit
# run进去容器,ctrl+p+q退出,容器不会停止
ctrl+p+q

通过 ctrl+p+q 运行
在这里插入图片描述

4、停止容器

docker stop 容器ID(容器名)

在这里插入图片描述

5、启动已经停止过的容器

docker start 容器ID(容器名)

在这里插入图片描述
6、重启容器

docker restart 容器ID(容器名)

7、强制停止容器

docker kill 容器ID(容器名)

8、删除已停止容器

# 不能删除正在运行的容器(可以先stop下,再去删),也可以指定 -f 强制删除
docker rm [-f] 容器ID(容器名)
# 两种方式删除多个(危险)
docker rm [-f] $(docker ps -a -q)
docker ps -a -q | xargs docker rm

9、后台启动容器

docker run -d centos 

如果仅仅上面这样启动的话会发现 centos 立即停止了。因为docker容器使用后台方式运行时,必须要有一个前台进程,否则就会自动停止。

如果要后台启动容器,且保持运行状态,一种方式是加上-it

docker run -d -it centos /bin/bash

在这里插入图片描述
10、进入正在运行的容器(后台运行的容器)(重要)

docker exec -it 容器id /bin/bash

在这里插入图片描述
注意:通过后台启动的容器,在exec进入容器后,当exit退出后,容器不会停止运行。

docker exec -it 容器ID(容器名) [COMMAND]
docker attach 容器ID(容器名)

# 举例
docker exec -it 4216d5daf8e5 /bin/bash
docker attach 4216d5daf8e5
两者区别:
exec 是在容器中打开新的终端,并且启动新的进程。用exit退出,不会 导致容器的停止。(实际用的多)
attach 直接进入容器启动命令的终端,不会启动新的进程。用exit退出,会导致容器的停止。

11、查看容器日志

docker logs 容器ID(容器名)

12、查看容器内运行的进程

docker top 容器ID(容器名)

13、查看容器内部细节(已json格式展示)

docker inspect 容器ID(容器名)

14、从容器内拷贝文件到主机上 (重要)

docker cp 容器ID:容器内路径 目的主机路径

在这里插入图片描述
容器内所做的修改不会因为容器的停止而消失。即容器在关闭状态下也可以拷贝

15、部署nginx(本机通过一个端口号可访问到容器中的nginx)

docker pull nginx # 拉取
docker run -d --name nginx01 -p 3344:80 nginx # 启动容器,并将宿主机3344端口与容器内部端口80绑定,宿主机通过3344端口可访问到此容器

在这里插入图片描述
本机自测:
在这里插入图片描述
端口暴漏的概念:
首先服务器安全组开放3344端口,然后就算过了第一层防护。其次服务器防火墙要开放3344端口,过第二层防护,然后根据服务器的3344端口绑定容器中的80端口,访问到nginx服务!
在这里插入图片描述
需要在阿里云安全组配置3344端口:
在这里插入图片描述
然后就可以通过服务器公网:3344 进行访问容器内的80端口
在这里插入图片描述

进入容器:
在这里插入图片描述

16、导入和导出容器(整个容器做备份) (重要)

docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

说明:
export 导出容器的内容流作为一个tar归档文件[对应import命令]
import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
举例:
docker export 4a364837bb4f > myos.tar
cat myos.tar | docker import - huige/myos:3.7

4、Docker镜像

4.1 镜像是什么?

镜像是一种轻量级、可执行的独立软件包。用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有的应用,直接打包成docker镜像,传给别人,就可以直接跑起来。
如何得到镜像:

  • 从远程仓库下载
  • 别人拷贝给你
  • 自己制作一个镜像

4.2 分层镜像 UnionFS 联合文件系统

Docker中的镜像是分层的,就是为了保证复用。

Union文件系统(UnionFS) 是一种 分层、轻量级 并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。即当两个不同镜像有重叠部分时,不需要下载两次,一次即可,复用。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含底层的文件和目录。

4.3 镜像加载原理

docker的镜像实际上由一层一层的文件系统组成
bootfs(boot file system) 主要包含bootloader和kernel, bootloader 主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权己由bootfs转交给内核,此时系统也会卸载bootfs,底层直接用宿主机的内核,因此会省去大量的空间。
rootfs (root file system) 在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。可以很小的只包含最基本的命令,工具和程序库,这就是一个小的 linux。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

4.4 重点理解

(1)镜像下载时是分层下载的方式,如果某个层已经存在,则不会重复下载!
例如 docker pull redis

在这里插入图片描述
(2)Docker镜像层都是只读的,容器层是可写的
即 pull 下来的镜像是不会改变的,当我们通过 run 新建一个容器后,一个新的可写层被加载到镜像的顶部,这一层通常被称作容器层,容器下面的层叫做镜像层。
所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

4.5 修改原始镜像并保存为新的镜像(生成镜像的方法)

docker commit 根据镜像创建一个容器后,对容器做修改后,将镜像层和容器层打包并提交使之成为一个新的镜像。

docker commit [OPTIONS] 容器id [REPOSITORY[:TAG]]

例如:
docker commit -m="这里是提交的信息" -a "作者" 容器id 目标镜像名:TAG

举例:
原始 ubuntu 没有vim命令,先去下载 ubuntu 镜像到本地,启动镜像,在容器中安装vim,然后在命令行窗口执行 commit ,生成我们自己的新镜像,启动新镜像与老的进行对比。
过程:
拉取镜像并创建容器运行:
在这里插入图片描述
发现vim不存在,安装
在这里插入图片描述
在这里插入图片描述
提交新镜像,并查看内存变化
在这里插入图片描述

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

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

相关文章

时间复杂度和空间复杂度

文章目录一、算法的复杂度二、时间复杂度1.时间复杂度概念2.大O的渐进表示法3.常见时间复杂度计算举例3.1 实例1 【 O(N)】3.2 实例2 【O(NM)】3.3 实例3 【O(1)】3.4 实例4 【O(N)】3.5 实例5 【O(N^2)】3.6 实例6 【O(logN)】3.7 实例7 【O(N)】3.8 实例8【O(2^N)】三、空间复…

新的3D地图制图技术改变了全球定位的游戏规则

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 在人类技术发展的历史长河…

市场裁猿~ 行业内卷~ Android 开发突破重围?

往日光鲜亮丽的互联网企业在今年彻底进入了寒冬&#xff0c;往年的高不可攀&#xff0c;低成本运营&#xff0c;在今年都不再是护身符。更是有不少互联网大厂开启了裁员模式&#xff0c;其中就有百度、阿里巴巴、快手、汽车之家等知名企业。 从今年三月起直到现在互联网各厂裁员…

【微信小程序系列:二】小程序常用功能:文字可复制、跳转地图、扫一扫、拨打电话、调整屏幕亮度、监听截屏...

一.先言&#xff1a; (&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;&#xff0c;hello&#xff0c;微信小程序系列第二篇&#xff0c;介绍下小程序里的常用功能api&#xff0c;可以快速copy使用~ 二.文字可复制&#xff1a; 小程序页面里的文字默认是没有长按复制功…

自动泊车停车位检测算法

转自&#xff1a;https://zhuanlan.zhihu.com/p/522630354 图1&#xff1a;泊车示意图一、背景介绍 自动泊车大体可分为4个等级&#xff1a; 第1级&#xff0c;APA 自动泊车&#xff1a;驾驶员在车内&#xff0c;随时准备制动&#xff0c;分为雷达感知和雷达视觉感知两种方式。…

手机批发业务-商品备选区

样式 代码 <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"author" content"huyiwei"><meta name"generator" content"HBuilder X"><title>…

大数据项目之电商数仓、用户行为日志、服务器和JDK准备、模拟数据

文章目录3. 用户行为日志3.4 服务器和JDK准备3.4.1 服务器准备3.4.2 编写集群分发脚本xsync3.4.3 SSH无密登录配置3.4.4 JDK准备3.4.5 环境变量配置说明3.5 模拟数据3.5.1 使用说明3.5.1.1 将application.yml、gmall2020-mock-log-2021-10-10.jar、path.json、logback.xml上传到…

【C语言】经典编程题

文章目录1. Fibonacci数列 ⭐️2. 替换空格 &#x1f31f;3. 找单身狗 &#x1f4ab;4. 模拟实现 atoi ✨1. Fibonacci数列 ⭐️ 做题链接&#xff1a;Fibonacci数列 Fibonacci数列是这样定义的&#xff1a; F[0] 0 F[1] 1 for each i ≥ 2: F[i] F[i-1] F[i-2] 因此&…

[数据结构初阶]算法的时空复杂度

目录 算法效率 如何衡量一个算法的好坏 算法的复杂度 时间复杂度 时间复杂度的概念 大O的渐进表示法 常见时间复杂度计算举例 例一&#xff1a; 例二&#xff1a; 例三&#xff1a; 例四&#xff1a…

C规范编辑笔记(三)

继上篇我们的C规范编辑笔记(二)后&#xff0c;我们今天开始分享第三篇笔记&#xff0c;话不多说&#xff0c;我们开始~ 1、一个 tab 键盘等于四个空格键。我们在编程的时候最好使用空格键而不是使用 tab 键&#xff0c;当两个编译器的 tab 键设置的大小不一样的时候&#xff0…

无人机基础知识:多旋翼无人机自动控制原理与算法

无人机基础知识&#xff1a;多旋翼无人机自动控制原理与算法前言无人机自动控制器PID控制算法前言 无人机&#xff08;Unmanned Aerial Vehicle&#xff09;&#xff0c;指的是一种由动力驱动的、无线遥控或自主飞行、机上无人驾驶并可重复使用的飞行器&#xff0c;飞机通过机…

Linux:进程描述、进程创建(fork)、进程状态(僵尸进程、孤儿进程)

目录操作系统进程的基本概念进程创建&#xff08;fork)进程状态僵尸进程孤儿进程操作系统 操作系统是一个管理计算机软硬件资源的软件&#xff0c;它包括内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09;和其他程序&#x…

神经网络输出表达式,神经网络数据格式

1、BP神经网络输入输出格式问题 在你的代码基础上说了。 clc;clear; close all; pload(originaldata.txt);%你问题最后说的数据文件名跟这个不同。 p1p; t[1];% 这个输出&#xff08;Targets&#xff09;应该和输入数据对应&#xff0c;输入数据有10个&#xff0c;输出应该也是…

如何从0到1搭建一个个人网站

前言 如何从0到1搭建一个可以外网访问的项目&#xff1f; 我就用自己的服务器给大家举例&#xff0c;怎么从0到1搭建一个学生和新手可以用来面试的项目&#xff0c;老手也可以回忆一下自己逝去的青春。 服务器在激活的时候会让你选系统&#xff0c;这个时候敖丙我个人建议&a…

软考 | 计算机系统

CPU 计算机系统硬件组成 计算机系统是由软硬件共同组成&#xff0c;协同运行程序。计算机的基本硬件由 运算器、控制器、存储器、输入设备、输出设备 5 大部件组成。其中&#xff0c;运算器和控制器等部件集成到一起的部分称为中央处理器&#xff08;CPU&#xff09;。CPU 是…

离线数仓 (八) --------- 数仓分层

目录一、为什么要分层二、数据集市和数据仓库区别三、数仓命名规范1. 表命名2. 脚本命名3. 表字段类型一、为什么要分层 分层说明&#xff1a; ODS 层&#xff1a;原始数据层&#xff0c;存放原始数据&#xff0c;直接加载原始日志、数据&#xff0c;数据保持原貌不做处理。 …

【C++】命名空间输入输出缺省参数函数重载

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;什么是C&…

链路状态路由协议 OSPF (一)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.OSPF的基本概念 1.什么是OSPF 2.OSPF路由协议概述 (1)内部…

网络安全知识之什么是网络安全?

网络安全的概念&#xff0c;有很多不同的定义。在一些场合中&#xff0c;我们最多的考虑的还是网络的技术安全&#xff0c;但是技术延伸出来的安全又会涉及到社会安全、文化安全、国家安全等等。 网络安全的概念&#xff0c;有很多不同的定义。在一些场合中&#xff0c;我们最多…

升级全新网络方案,给你低成本、高性能的裸金属体验

摘要&#xff1a;对政企、金融客户来说&#xff0c;裸金属服务器相比于云服务器&#xff0c;更能满足他们对性能和稳定性的要求。但裸金属服务器的网络实现&#xff0c;却存在成本高、灵活性差、成熟度不足等问题。为解决这些问题&#xff0c;华为云Stack有一套增强版的网络方案…