【2023裸辞失业后之初学Docker1】

news2024/10/6 16:31:31

目录

    • Docker简介
    • docker下载安装
    • 常用命令
      • 帮助启动类命令
      • 镜像命令
      • 容器命令
    • 镜像分层概念
      • commit命令
      • 本地镜像发布到腾讯云
    • docker容器数据卷
      • 宿主机和容器内添加容器卷案例
      • 读写规则
      • 容器卷的继承

学习视频来自 https://www.bilibili.com/video/BV1gr4y1U7CY

Docker简介

Docker出现原因
    开发一个程序,如何保证在服务器能跑,如何保证在部署过程中不出现令人头疼的版本、配置问题,答案就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。
    安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
在这里插入图片描述
docker理念
    Docker是基于Go语言实现的云开源项目。
    Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

什么是Docker
     Docker 是在Linux容器技术的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

与虚拟机的比较
    虚拟机(virtual machine)就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
在这里插入图片描述但是虚拟机存在以下缺点
1 资源占用多 2 冗余步骤多 3 启动慢

http://120.27.193.132:8888/down/R7bhAnrNdnIh
docker三要素
仓库:存放镜像的地方
镜像:初学可以理解java中的类
容器:初学可以理解java中的对象

也是一个CS的架构,类似Mysql

在这里插入图片描述

docker下载安装

官网:https://www.docker.com/
官方仓库:https://hub.docker.com

linux上安装
以下内容在官网可以看到
官网安装步骤
1,确认是centos7以上版本 cat /etc/redhat-release
2,卸载旧版本

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

3,yun安装gcc相关

yun -y install gcc
yun -y install gcc-c++

4,安装需要的软件包

sudo yum install -y yum-utils

5,设置镜像仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6,安装docker引擎,按y下一步就行

sudo yum install docker-ce docker-ce-cli containerd.io

7,启动docker

sudo systemctl start docker

8,测试

docker version

9,运行一个docker镜像

docker run hello-world

在这里插入图片描述
阿里云镜像加速
在这个地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
一步步执行2里面的命令即可
在这里插入图片描述

常用命令

帮助启动类命令

systemctl start docker
systemctl stop  docker
systemctl restart docker
systemctl status docker
#开机启动docker
systemctl enable docker
docker info
docker --help
docker 具体命令 --help

镜像命令

#列出本地主机的所有镜像
#REPOSITORY:表示镜像的仓库源,TAG:镜像的标签版本号,IMAGE ID:镜像ID,CREATED:镜像创建时间,SIZE:镜像大小
docker images

#从远程仓库搜索镜像,stars为点赞数,official为官方认证,AUTOMATED是否自动构建
docker search hello
#拉取镜像,不写tag默认是最新的
docker pull 镜像名字:tag 
#查看镜像,容器所占空间等信息
docker system df
#删除镜像
docker rmi -f 名字/或者id
#删除多个
docker rmi -f 名字/或者id,名字/或者id
#传参删除
docker rmi -f $(docker images -aq)

什么是虚悬镜像?
仓库名、标签都是的镜像,俗称虚悬镜像dangling image
在这里插入图片描述

容器命令

以安装ubuntu为例
创建运行容器docker run -it ubuntu /bin/bash
在这里插入图片描述

·	新建+启动容器
	·	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
	·	 OPTIONS说明
		 OPTIONS说明(常用):有些是一个减号,有些是两个减号
 
		--name="容器新名字"       为容器指定一个名称;
		
		docker run -it --name=myubuntu ubuntu bash
		
		-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
 
		-i:以交互模式运行容器,通常与 -t 同时使用;
		-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
		也即启动交互式容器(前台有伪终端,等待交互);
 
		-P: 随机端口映射,大写P
		-p: 指定端口映射,小写p

在这里插入图片描述
列出所有的容器docker ps

-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。

退出容器

两种方式
exit		  :退出时容器会关闭
ctrl+p+q  	:退出时容器不会关闭

启动已经停止的容器

docker start 容器id或者名字

停止容器

docker stop 容器id或者名字

强制停止容器

docker kill 容器id或者名字

删除已经停止的容器

docker rm 容器id或者名字
##强制删除,正在运行的也可以删除
docker rm -f 容器id或者名字
#删除所有的的
docker rm -f $(docker ps -a -q)

启动守护式容器(后台服务器)

docker run -d 容器名

查看容器的日志

docker logs 容器id

查看容器内部细节

docker inspect 容器id

进入正在运行的容器

docker exec -it 容器id /bin/bash
docker attach 容器id

    两个的区别是attach相当于直接进入,exec相当于远程连接进入,attach进入后exit退出会直接把容器关掉,exec进入退出是相当于关闭远程连接
从容器复制文件到主机

docker cp 容器id:容器内路径 目的路径

导入和导出容器

#导出容器的内容留作为一个tar归档文件[对应import命令]
docker export 容器ID > 文件名.tar 
#从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 

镜像分层概念

镜像
    是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。

分层的镜像
    以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载。
UnionFS(联合文件系统)
    Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
Docker镜像加载原理
     docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
    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 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

    rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

为什么 Docker 镜像要采用这种分层结构呢
    镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。

比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
重点理解
    Docker镜像层都是只读的,容器层是可写的 当容器启动时,一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
    当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
在这里插入图片描述

commit命令

	docker commit提交容器副本使之成为一个新的镜像
	docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]	
·	案例演示ubuntu安装vim
·	原始的默认Ubuntu镜像是不带着vim命令的

1,运行容器
docker run -it ubuntu  /bin/bash
2,在容器内使用vim ,发现vim not found
3,先更新apt,再安装vim,测试之后发现能使用vim
apt-get update
apt-get install vim
4,退出容器,提交成一个新的镜像
docker commit -m "添加vim" -a "Xiao" f4ec3bdba1c3 myubuntu:1.0
5,再运行这个容器,发现是有vim的

本地镜像发布到腾讯云

1,先进到容器镜像服务
在这里插入图片描述
2,创建一个命名空间,创建完成之后创建仓库,选中你创建的命名空间
在这里插入图片描述3,点击快捷指令,按照需求执行即可

docker容器数据卷

    卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

     将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的

    Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接实时生效,爽
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

命令如下

docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash

宿主机和容器内添加容器卷案例

docker run -it -v /tem/hostdockerdata:/tem/dockerdata --name=u1 ubuntu
#在该目录下,我们发现创建修改文件都会同步到宿主机或者容器中
#如果失败,尝试加上参数 --privileged=true
#如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限

使用命令docker inspect 容器id进行查看
在这里插入图片描述

读写规则

默认是rw 上面的案例等于

docker run -it -v /tem/hostdockerdata:/tem/dockerdata:rw --name=u1 ubuntu

ro:容器内部只能读,不能写

docker run -it -v /tem/hostdockerdata:/tem/dockerdata:ro --name=u1 ubuntu

我们在容器内想去修改,会提升如下
在这里插入图片描述

容器卷的继承

docker run -it --volumes-from 父容器id或者名字--name u2 ubuntu

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

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

相关文章

DNS协议解析原理

0. 前言 为了保证网址的正常访问,域名解析协议(DNS)其实在背后做出了很多努力,本文将透彻讲解 DNS 协议的原理,了解我们每天都在接触的网址到底是怎么工作的。 1. 什么是 DNS 协议 在学习 DNS 协议之前,我…

你真的不想知道ai绘画工具有哪些吗?

近期我发现了一个超酷的玩意儿,叫做ai绘画工具。没错,它就是那个能让你在不懂任何绘画技巧的情况下,也能创作出令人惊叹的艺术作品的神奇东西!简直就像是给你一支魔法画笔,让你成为真正的艺术大师。但是,市…

Java设计模式之行为型-备忘录模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 备忘录模式是一种行为型设计模式,它允许保存一个对象的内部状态到一个备忘录对象中,这样就可以在需要的时候恢复这个对象的状态了,同时又不违反封装…

1.5 纹理

这次笔记时间有点久,主要是这节课讲的东西需要很多基础来铺垫,看完了后感觉缺失信息很多,又去补了GAMES 101 3~10节内容。 强烈建议看不懂的先去学习GMAES101 网址Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)_哔哩哔哩_bi…

你知道哪些Linux 发行版采用 了KDE Plasma 吗

Linux操作系统以其高度的灵活性和可定制性而闻名,有许多不同的发行版适用于各种场合和需求。其中一种备受欢迎的桌面环境是KDE Plasma,它提供了现代化的外观、丰富的功能和高度自定义的选项。那么,你知道哪些Linux发行版采用了KDE Plasma呢&a…

python遍历整个网站寻找所有输入框并提交表单

文章目录 一、遍历查找网站所有输入框二、对找到的输入框实现自动表单提交三、实现留言板和其他输入框的表单提交 一、遍历查找网站所有输入框 # 查找所有表单 import requests from bs4 import BeautifulSoup import sys# 定义起始页面 url sys.argv[1]# 通过requests库获取…

Linux下如何部署Nuxt项目(二)

Linux下如何部署Nuxt项目(一)_小鸟哗啦啦的博客-CSDN博客,书接上回,以实际场景开始。 请认真看完这篇文章,还不会部署Nuxt,我直接拿弹弓打你们家玻璃! 一、nuxt的配置检查 服务端渲染的应用,应该是先编译构…

智能手表学习笔记

一、相关知识模块 1、RTOS & FreeRTOS (1) RTOS 实时操作系统(Real Time Operating System) 是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(二):损耗的来源

导体电阻和趋肤深度 信号沿信号路径和返回路径传播的串联电阻与导体的体电阻率和电流传播的横截面有关。直流时,信号导体中的电流分布均匀,电阻为: ρ表示电阻的体电阻率,w表示线宽,t表示导体厚度,Len表示走…

7.10蓝桥杯刷题

public class _求阶乘和 {public static void main(String[] args) {// 根据已有的知识 可以知道的是,现在要求s的末尾九位数字,已知的是39之后的阶乘他的后九位都是0;//所以不需要计算到2023的阶乘//一个数求出来的阶乘想要末尾有0//数中必须要有2和5&a…

C语言每日一练(3)

C 练习实例6 题目:用*号输出字母C的图案。 程序分析:可先用*号在纸上写出字母C,再分行输出。 程序源代码: #include "stdio.h" int main() {printf("用 * 号输出字母 C!\n");printf(" ****\n")…

小红书数据分析工具|年轻人入玄门?小红书热门笔记大赏

当代年轻人血脉觉醒,逐渐出现寺庙打卡、电子木鱼、发疯语录“在上进和上班之间,选择上香”,小编观察近期彩票成为年轻人信仰的新玄学,兴起了“送礼就送刮刮乐”的小风潮。卷不动躺不平的年轻人,严重精神内耗下&#xf…

Pycharm中设置动态模板(自定义自动补齐)

Settings——Editor——Live Template——点击号新增动态模板 Abbreviation缩略词:输入的简写内容 Template text: 简写词对应的模板内容 默认输入简写内容按Tab键,生成模板内容 Define: 选择在哪个语言环境下生效

【WebSocket】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功能测试 4. 来单提醒4.1 需求分析和设计4.2 代码开发4.3 功能测试 5. 客户催单5.1 需求分析和设计5.2 代…

接口自动化测试,一键快速校验接口返回值全部字段

目录 前言: 一、认识一下,DeepDiff 介绍 主要组成部分: 二、DeepDiff 使用 2.1 案例一:比较两个 JSON 2.2 案例二:比较接口响应 2.3 案例三:正则搜索匹配 三、最后一个小技巧:DeepDiff …

【代码随想录 | Leetcode | 第二天】数组 | 双指针法 | 相向双指针 | 27

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来双指针法和相向双指针的分享✨ 目录 前言27. 移除元素 27. 移除元素 ✨题目链接点这里 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回…

keep-alive和router-view配合使用缓存整个路由页面以及路由切换

实现内容:通过vue实现,在页面有侧边栏动态来展示当前页面流程,右边进行页面的切换,左右两边都是组件,但是A/B/C组件的切换是通过keep-alive搭配router-view实现的,首先在当前文件中创建五个文件&#xff1a…

Linux系统编程(传统信号和实时信号)

文章目录 前言一、传统信号和实时信号概念二、重要函数介绍三、实时信号和传统信号被处理的次数总结 前言 本篇文章我们来讲解传统信号和实时信号,这里我们将从实际应用给大家讲解。 一、传统信号和实时信号概念 传统信号(Traditional Signals&#x…

spring boot学习第一篇:spring boot 1.5.x版本启动接口服务

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

华为云出品《IDEA-Plugin-开发手册》电子书——学完即会场景设计

小智又来给各位开发者送书啦&#xff01; 助力各位开发者们提升技能 海量案例串联 IEDA Plugin 插件开发技能 重实践与验证帮助避免踩坑 学完就可自己完成一些场景设计和开发 适合有一定编程基础&#xff0c;1年以上经验的开发者 适合对IDEA Plugin有学习需求或想拓展业务…