初始docker以及docker的基本使用!!!

文章目录

  • 虚拟化技术
  • Docker/podman 命令
      • 通用命令
        • 查看docker 当前版本
        • 管理docker运行
      • 镜像操作[image]
          • 列出本地所有镜像
          • 拉取镜像
          • 删除镜像
          • 把docker中的镜像打包成文件
          • 把镜像文件加载到docker中
          • 上传镜像
      • 容器操作[container]
          • 创建容器
          • docker run的参数选项
          • 列出所有容器
          • 启动容器
          • 停止容器
          • 杀死容器
          • 进入容器
          • 删除容器
          • 复制文件
          • 把容器保存成镜像

虚拟化技术

把真实物理机子中剩余的资源重新整合,基于虚拟机软件创建出来一台新的虚拟的计算机提供给开发者使用。
优点:虚拟化使用软件/硬件的方法重新定义划分计算机资源,可以实现计算机资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,降低成本,加快部署,极大增强系统整体安全性和可靠性。使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。虚拟化技术有5种不同的实现方案:
1. 硬件虚拟化需要购买虚拟化设备
2. 分区虚拟化一台电脑下可以实际安装多个操作系统。开机的时候,就固定分配好了内存。 
3. 虚拟机技术[应用虚拟化]通过在操作系统中安装软件来实现,例如:VMware,virtualbox,在vm中创建虚拟机,搭建操作系统,在虚拟机运行的时候,由vm动态向真实电脑申请分配硬件资源[cpu,内存,显卡网络等等]。
4. 准虚拟机技术是上面第2和第3中的混合产物,不需要安装vm也不需要分区,而是由操作系统本身提供出来了一个虚拟层来实现的。例如;xven或者window10的HyperV都是这种实现。因为上面不管哪一种虚拟化技术,都会出现一个问题就是为了让虚拟出来的操作系统能正常运作起来都需要实实在在向真实物理机申请固定的对应计算机资源。而且为了能让虚拟出来的操作系统能正常运作,物理机要分配各种的硬件资源,这样很大程度上存在资源的消耗,降低物理机的性能。而这个过程用户完全有可能仅仅只是了为运行某几个软件而已。所以为了更好的提升用户的体验,提升系统的性能,减低不必要的计算机资源消耗,所以出现了一种新的虚拟化技术。容器化技术!!!
比较流行的容器化技术有:docker和podman
目前在外界使用过程中,比较常用的还是dockerdocker提供给开发者使用的方式提供了3种:
1. 终端命令[通过终端命令逐步操作docker]
2. dockerFile[通过脚本对docker进行封装和操作单个镜像]
3. docker-compose [通过脚本对docker的多个镜像/容器进行组合编排的技术, 是python实现的一种技术]

更新ubuntu的apt源索引

sudo apt-get update

安装包允许apt通过HTTPS使用仓库

sudo dpkg --configure -a
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG key【这个是国外服务器地址,所以网路不好的时候,会失败!在网路好的情况下,多执行几次就没问题了】

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置Docker最新稳定版仓库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

添加仓库后,更新apt源索引

sudo apt-get update

前面的准备工作完成以后,接下来安装最新版Docker CE(社区版)

sudo apt-get install docker-ce

通过下载一个叫hello-world的镜像并运行起来,以此来检查Docker CE是否安装正确并能正常使用。

sudo docker run hello-world

出现了helo from Docker则表示上面的安装成功!

在这里插入图片描述

在这里插入图片描述

我们获取镜像文件,可以直接去官方网站上获取: https://hub.docker.com/

Docker/podman 命令

docker在ubuntu使用过程中,需要左边加上sudo,而podman不需要。同时下面所有的命令在docker和podman里面是通用的。

所以这里全部写成docker了,在使用podman操作以下以下命令时,直接把docker换成podman即可。

通用命令

查看docker 当前版本
sudo docker version
docker -v
# podman version
# podman -v
管理docker运行
# 启动docker
sudo service docker start
# sudo service podman start# 停止docker
sudo service docker stop
# sudo service podman stop# 重启docker
sudo service docker restart
# sudo service podman restart# 查看docker状态
sudo service docker status
# sudo service podman status

镜像操作[image]

列出本地所有镜像
sudo docker image ls --all
# 简写
# sudo docker image ls
# 简写
# sudo docker images# podman
# podman images
REPOSITORYTAGIMAGE IDCREATEDSIZE
当前镜像的作者以及镜像名镜像版本号镜像唯一标记符镜像创建/析出时间镜像文件的大小

拉取镜像

docker/podman支持通过网络拉去镜像源站的所有镜像。默认使用的工具就是git工具。

官方镜像源:https://hub.docker.com/

拉取镜像时,如果不指定版本号,默认拉取最新版本的镜像

sudo docker image pull <镜像名称:版本号>
# 简写
# sudo docker pull <镜像名称:版本号># podman
# podman pull <镜像名称:版本号>
删除镜像

删除的时候,必须注意是否有容器在运行当前镜像文件,如果在使用,则需要先删除容器,才能删除镜像

sudo docker image rm <镜像名称/镜像ID:版本号>
# 简写 
# sudo docker rmi <镜像名称/镜像ID:版本号># podman
# podman image rm <镜像名称/镜像ID:版本号>
# podman rmi <镜像名称/镜像ID:版本号>

删除的镜像如果被容器提前使用了,则错误如下:

在这里插入图片描述

解决方案:先删除当前镜像对应的容器,接着才能删除镜像。

把docker中的镜像打包成文件

用于分享发送给他人,或备份

sudo docker save -o <文件名.tar.gz>  <镜像名:版本号># podman 
# podman save -o <文件名.tar.gz>  <镜像名:版本号>
把镜像文件加载到docker中
sudo docker load -i <文件名.tar.gz># podman
# podman load -i  <文件名.tar.gz>
上传镜像

使用之前,必须先到阿里云/dockerhub官方注册账号并创建对应的仓库。

sudo docker login -u <账号名>
# podman login -u <账号名>sudo docker push <镜像名称/镜像ID>:<版本号>
# podman push <镜像名称/镜像ID>:<版本号>

容器操作[container]

创建容器

必须先有镜像,才能运行创建容器,需要指定使用的镜像名,并且设置创建容器以后,执行对应的第一条命令

sudo docker run <参数选项>  <镜像名称:镜像版本> <容器启动后的第一个命令>
# podman run <参数选项>  <镜像名称:镜像版本> <容器启动后的第一个命令>

例如:使用"hello-world"镜像,创建一个hello-world容器。(注意:如果运行容器时,本地没有对应的镜像或对应镜像的版本,则docker/podman会自动往线上的源服务器中搜索是否有对应的镜像并自动下载的,执行pull镜像操作)。

sudo docker run hello-world
# podman run hello-world

例如:docker使用ubuntu:20.04镜像,创建一个名为ubuntu1的容器

sudo docker pull ubuntu:20.04
sudo docker run -it --name=ubuntu1 ubuntu:20.04 bash# podman pull ubuntu:20.04
# podman run -it --name=ubuntu1 ubuntu:20.04 bash

注意:启动容器时,如果设置了-it选项参数表示让容器启动以后运行bash解析器,我们可以通过bash终端输入命令操作该容器,但是如果使用了exit关闭bash以后,容器会自动关闭。那如果设置了-itd选项参数,那么run命令执行以后,docker会自动以守护进程的方式创建一个容器,容器会一直运行着。

docker run的参数选项

-t 表示容器启动后会进入其命令行终端

-i 表示以“交互模式”运行容器

–name 表示设置容器的名称,注意容器名是唯一的,尽量遵循python变量名的规范。

-v 目录影射,相当于把容器外部的物理机的目录与容器内部的目录实现共享,改了里面相当于改了外面

-p 端口影射,把物理机的一个端口和容器内部的端口进行绑定。访问了物理机的端口相当于访问了容器的对应端口

-e 设置环境变量,在部分容器中,需要设置环境变量时使用到

–restart=always 设置容器随着docker开机自启,docker/podman中创建的容器默认是不会开机自启,同时podman是没有这个选项的。

–network=host 设置网络模式,与-p冲突,一般设置-p以后不要设置–network

例如,使用ubuntu镜像,创建一个名为ubuntu2,并且在后台运行的容器像

sudo docker run -itd --name=ubuntu2 ubuntu<:版本> ubuntu
# podman run -itd --name=ubuntu2 ubuntu<:版本> ubuntu

-d 创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器内部的,需要使用docker exec -it 命令才能进入容器内部)

列出所有容器
sudo docker container ls                      # 所有正在启动运行的容器
# 简写 sudo docker ps
# podman pssudo docker container ls --all                # 所有容器[不管是否在启动运行中]
# 简写 sudo docker ps --all
# podman ps --all
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
容器的唯一标记ID容器的镜像名容器运行以后默认执行的第一个命令容器创建时间容器的运行状态,Up表示容器正在正在启动,Exitd表示容器已经关闭了。容器与操作系统的端口映射容器名
启动容器

可以同时启动多个容器,容器之间使用空格隔开

# 启动一个容器[被开启的容器默认会以守护式容器在后台持续运行]
sudo docker container start <容器名称/容器ID>
# 简写 sudo docker start  <容器名称/容器ID>
# podman start  <容器名称/容器ID># 启动多个容器
sudo docker container start <容器名称/容器ID>  <容器名称/容器ID> <容器名称/容器ID>
# 简写 sudo docker start <容器名称/容器ID>  <容器名称/容器ID> <容器名称/容器ID>
# podman start <容器名称/容器ID>  <容器名称/容器ID> <容器名称/容器ID>
停止容器
sudo docker container stop <容器名称/容器ID>
# 简写 sudo docker stop  <容器名称/容器ID>
# podman stop  <容器名称/容器ID># 停止多个容器
sudo docker container stop <容器名称/容器ID>  <容器名称/容器ID>
# 简写 sudo docker stop <容器名称/容器ID>  <容器名称/容器ID>
# podman stop <容器名称/容器ID>  <容器名称/容器ID>
杀死容器

该命令在容器无法停止的时使用,注意不能滥用,这种操作有可能被导致容器里面运行的文件丢失!!!

sudo docker container kill <容器名称/容器ID>
# 简写 sudo docker kill <容器名称/容器ID>
# podman kill <容器名称/容器ID># 杀死多个容器
sudo docker container kill <容器名称/容器ID>  <容器名称/容器ID>
# 简写 sudo docker kill <容器名称/容器ID>  <容器名称/容器ID>
# podman kill <容器名称/容器ID>  <容器名称/容器ID>
进入容器

要进入容器,必须当前容器是启动状态的,exec命令不需要加上-d选项,但需要指定指定容器启动后的第一个命令。

sudo docker container exec -it <容器名称/容器ID>  <第一个命令>
# sudo docker exec -it <容器名称/容器ID>  <第一个命令>
# podman exec -it <容器名称/容器ID>  <第一个命令>

第一个命令一般都是bash,也可以是其他允许开发者输入信息的其他软件命令

删除容器

注意:docker/podman只能删除关闭的容器,无法删除一个正在运行的容器。

sudo docker  container rm <容器名称/容器ID>
# 简写 sudo docker rm <容器名称/容器ID>
# podman rm <容器名称/容器ID># 删除多个容器
sudo docker  container rm <容器名称/容器ID>  <容器名称/容器ID>
# 简写 sudo docker rm <容器名称/容器ID>  <容器名称/容器ID>
# podman rm <容器名称/容器ID>  <容器名称/容器ID>
复制文件
# 命令基本格式:
sudo docker container cp <源文件地址> <保存文件地址># 从物理机中复制一个文件到指定容器的内部指定路径中
sudo docker container cp <物理机路径> <容器名称/容器ID>:<容器路径>
# 简写 sudo docker cp <物理机路径> <容器名称/容器ID>:<容器路径>
# podman cp  <物理机路径> <容器名称/容器ID>:<容器路径># 指定容器的内部指定路径中复制一个文件到物理机指定路径中保存
sudo docker container cp <容器名称/容器ID>:<容器路径> <物理机路径>
# 简写 sudo docker cp <容器名称/容器ID>:<容器路径> <物理机路径>
# podman cp <容器名称/容器ID>:<容器路径> <物理机路径>
把容器保存成镜像
sudo docker container commit <容器名称/容器ID>  <新镜像名:镜像自定义版本>
# 简写 sudo docker commit <容器名称/容器ID>  <新镜像名:镜像自定义版本>
# podman commit <容器名称/容器ID>  <新镜像名:镜像自定义版本>

若有错误与不足请指出,关注DPT一起进步吧!!!

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

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

相关文章

安防区域保护:无线电干扰设备技术详解

在安防区域保护中&#xff0c;无线电干扰设备技术扮演着重要角色&#xff0c;它主要用于通过发射特定频率的无线电波来干扰无人机或其他无线电设备的通信链路、导航信号或控制信号&#xff0c;以达到削弱、阻断甚至控制这些设备运行的目的。以下是对无线电干扰设备技术的详细解…

【GAN】生成对抗网络Generative Adversarial Networks理解摘要

【Pytorch】生成对抗网络实战_pytorch生成对抗网络-CSDN博客 【损失函数】KL散度与交叉熵理解-CSDN博客 [1406.2661] Generative Adversarial Networks (arxiv.org) GAN本质是对抗或者说竞争&#xff0c;通过生成器和鉴别器的竞争获取有效地结果&#xff0c;换句话说&#xff0…

每日一练 2024.9.29(2)

目录 解题思路与代码实现 题目分析 一、解题策略 关键步骤&#xff1a; 二、代码实现 三、代码解析 四、复杂度分析 五、运行示例 示例1&#xff1a; 示例2&#xff1a; 六、总结 解题思路与代码实现 题目分析 这道题目要求我们找到字符串列表 strs 中的相似字符组…

C++——vector

1.简介 2.成员函数 2.1构造函数 void test_vector1() {//1.无参构造vector<int> v1;cout << v1.capacity() << endl;//2.传参构造vector<int> v2(10,1);//3.迭代器构造vector<int> v3(v2.begin(), v2.end());//也可以使用其它容器的迭代器区间来…

scrapy快速上手

安装 除了scrapy本身还要安装两个库 pip install scrapy pip install pywin32 pip install wheel 创建项目 在要创建项目的地方打开powershell scrapy startproject 项目名 我们得到这样的项目结构&#xff0c;功能如下 scrapy.cfg 项目的主配置信息 …

LeetCode[中等] 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路 回溯法 log&#xff1a;当前结果数组&#xff1b;level&#xff1a…

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲&#xff0c;同济大学长聘特聘教授&#xff0c;国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间&#xff0c;你可以按照如下步骤修改SessionAge 这个参数&#xff1a; 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错&#xff0c;则执行步骤4;如果没有报错则执行第5步如果第2步…

探索光耦:光耦在电脑电源中的应用及其重要性

随着计算机技术的飞速发展&#xff0c;电脑已成为现代生活和工作中不可或缺的工具。无论是日常办公、游戏娱乐还是复杂的图像处理&#xff0c;电脑电源的稳定性和安全性都至关重要。作为电脑电源的核心部件之一&#xff0c;光耦&#xff08;光电耦合器&#xff09;在提升电源性…

JavaScript网页设计案例:互动式简历网站

JavaScript网页设计案例&#xff1a;互动式简历网站 在现代网页设计中&#xff0c;JavaScript 是实现交互和动态效果的关键技术。本文将通过一个完整的案例&#xff0c;展示如何使用 JavaScript 构建一个交互式的个人简历网页。本文不仅会涵盖 HTML 和 CSS 的使用&#xff0c;…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要&#xff0c;开发了一款新的android和ios端应用性能测试工具&#xff0c;本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云&#xff0c;工具说明 本工具无侵入&#xff0c;不需要root&#xff0c;低延迟…

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功&#xff0c;可以在浏览器访问3.2、如果没有跳转&#xff0c;需要单独安装 kubernetes-dashboard3.2.1、方式一&#xff1a;一步到位3.2.2、方式二&#xff1a;逐步进行 1、Enab…

如何恢复被删除的 GitLab 项目?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

time命令:轻松测量Linux命令执行时间!

一、命令简介 用途&#xff1a; 用于测量 Linux 命令执行的时间&#xff0c;包括实际时间、用户 CPU 时间和系统 CPU 时间。刚开始以为是用来“看现在几点钟”的 &#x1f972;。标签&#xff1a; 实用工具&#xff0c;性能分析。 ‍ 二、命令参数 2.1 命令格式 time [选项…

进程的那些事--实现shell

目录 前言 一、预备知识 二、实现步骤 1.思路 2.实现 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习的本质就是变现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、预备知识 char * fgets ( char * str, i…

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习&#xff08;一&#xff09;最简单的智能体构建-CSDN博客&#xff0c;我介绍了编排创作智能体&#xff0c;这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…

巧用switch-case消除条件判断

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 在之前的文章中&#xff0c;我们有提交消除if-else代码的方法&#xff1a; 结合HashMap与Java 8的Function和Optional消除ifelse判断巧用枚举消除逻辑判…

一文上手SpringSecuirty【六】

自定义认证流程完成之后,前端收到了后端生成的token,那么在之后的所有请求当前,都必须携带token.作为服务器来说,得验证这个token,是否合法. 一、验证token是否合法 1.1 OncePerRequestFilter过滤器 OncePerRequestFilter是 Spring 框架中的一个过滤器&#xff0c;用于确保在…

抖音支付回调验签 go 版本

序言 最近在做抖音小程序支付&#xff0c;由于抖音开放平台的文档写的较为简陋&#xff0c;让人踩了不少坑&#xff0c;在这里整理一下做小程序支付的整个过程&#xff0c;以通用交易系统为例子。 准备条件 1&#xff09;申请小程序&#xff0c;开通支付功能 这里需要明确你小…