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

news2024/11/16 3:37:33

文章目录

  • 虚拟化技术
  • 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
目前在外界使用过程中,比较常用的还是docker

docker提供给开发者使用的方式提供了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 ps

sudo 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.coloradmin.cn/o/2159186.html

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

相关文章

【Mysql】为modified_time和created_time设置默认值

建立表SQL&#xff1a; CREATE TABLE your_table_name (id int(11) NOT NULL AUTO_INCREMENT,/* 其他字段 */created_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT 创建日期,modified_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 修改…

使用Docker一键部署Blossom笔记软件

Blossom 是一个需要私有部署的笔记软件,虽然本身定位是一个云端软件,但你仍然可以在本地部署,数据和图片都将保存在你的设备,不依赖任何的图床或者对象存储。 客户端:支持 Windows 端和 ARM 架构的 Mac 端,以及作为网页端部署。移动端:响应式网页移动端,主要为移动端设…

【论文速看】DL最新进展20240923-长尾综述、人脸防伪、图像分割

目录 【长尾学习】【人脸防伪】【图像分割】 【长尾学习】 [2024综述] A Systematic Review on Long-Tailed Learning 论文链接&#xff1a;https://arxiv.org/pdf/2408.00483 长尾数据是一种特殊类型的多类不平衡数据&#xff0c;其中包含大量少数/尾部类别&#xff0c;这些类…

UPPAL安装

UPPAL安装 下载安装UPPAAL 在UPPAAL官网上下载所需版本的UPPAAL&#xff1a;https://uppaal.org/downloads/#uppaal5.0 此处下载Windows UPPAAL5.0&#xff1a; 下载完成后&#xff0c;双击.exe文件&#xff0c;一路点击“下一步”&#xff0c;安装完成&#xff0c;并关闭&am…

分布式锁的几种方案对比?你了解多少种呢?

目录标题 1.关于分布式锁2.分布式锁的实现方案2.1 基于数据库实现2.1.1乐观锁的实现方式2.1.2 悲观锁的实现方式2.1.3 数据库锁的优缺点 2.2 基于Redis实现2.2.1 基于缓存实现分布式锁2.2.2缓存实现分布式锁的优缺点 2.3 基于Zookeeper实现2.3.1 如何实现&#xff1f;2.3.2 zk实…

生信技能59 - 基于GATK CallingSNP变异检测及注释流程

1. 流程说明 使用BWA MEM比对,如果文件较大,可使用bwa-mem2进行比对,速度会有很大提升;使用GATK对BAM进行排序和标记重复,再使用GATK HaplotypeCaller + GATK GenotypeGVCFs进行变异检测,生产.g.vcf文件,提取SNP并使用annovar进行位点注释。 使用bwa-mem2进行比对,获…

python全栈开发《37.列表(元组)的count函数》

元组的count函数的功能和用法与列表的count函数完全一致。 1.count的功能 返回当前列表中某个成员的个数。 2.count的用法 fruits [苹果,西瓜,水蜜桃,西瓜,雪梨] count fruits.count(西瓜) print(count) 运行结果&#xff1a; 2 注意&#xff1a;列表的内置函数count拿到需要…

Qt系统相关——QThread

文章目录 QThread的API使用示例客户端多线程应用场景互斥锁QMutexQMutexLockerQReadWriteLocker、QReadLocker、QWriteLocker 条件变量和信号量 QThread的API Qt中的多线程和Linux中的线程&#xff0c;本质上是一个东西 Linux线程概念 Linux多线程——线程控制 Linux多线程——…

EEPROM手册阅读笔记

目录 一、特征描述二、功能描述三、总线特性四、设备寻址五、写入操作1.字节写入2.页写入 六、读取操作1.当前地址读取2.随机读取3.顺序读取 一、特征描述 1.Microchip Technology Inc. 24AA04/24LC04B &#xff08;24XX04*&#xff09; 是一款 4 Kbit 电气可擦除 PROM。该器件…

【4】AT32F437 OpenHarmony轻量系统移植教程(1)

开源地址&#xff1a;https://gitee.com/AT32437_OpenHarmony 1.学习本文档的意义 1.学习移植OpenHarmony轻量系统到AT32全系列mcu上&#xff0c;本文档移植的具体型号为AT32F437ZMT7 2.学习OpenHarmony轻量系统开发 2.移植前的准备工作 1.移植之前必须要先熟悉AT-START-F…

HTTP协议:发展、请求响应、状态码 等

文章目录 HTTP发展历程HTTP请求URL和URIHTTP协议版本HTTP请求方法GET 和 POST 区别HTTP状态码HTTP 请求与响应报文HTTP 请求流程 HTTP 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在…

SAP-ABAP消息号 AD857

激活表时报错 返回表&#xff0c;找到报错的字段 维护参考表和字段

免费!大厂太卷了,又一款AI对口型神器,让照片开口说话唱歌,吊打阿里EMO?(附保姆级教程)

大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~&#xff08;AI资料点文末卡片自取&#xff09; 之前分享了一款…

【小白向】怎么去除视频水印?HitPaw帮你轻松解决

序言 HitPaw是一款优秀的去除视频水印的工具。 特点&#xff1a;不仅仅能够去除图片、视频里的固定水印&#xff0c;还能去除移动水印。 尤其是它的AI去水印功能&#xff0c;效果非常好。 极简使用教程 下载安装 HitPaw需要在电脑上安装软件才能使用。 支持Windows系统和…

【AIGC】ChatGPT RAG提取文档内容,高效制作PPT、论文

目录 一、理解 RAG 技术 二、利用 ChatGPT 的 RAG 技术提取文档内容 三、高效制作 PPT 四、高效撰写论文 五、最佳实践与建议 六、工具推荐 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Ret…

kismet和war driving具体准备(仅供无线安全学习)

war driving准备 一台笔记本 一个最好是双频的网卡&#xff0c;单频搜集信号少 我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?tkKZ5g3RVeH6f 如果经济条件允许可以去买大功率天线&#xff08;我买的车载的 大概40db这样子 范围广&#xff09; http://e.tb.cn/h.grCM0CQ6L…

YOLOv5-水印检测

简介&#xff1a; YOLOv5在YOLOv4算法的基础上做了进一步的改进&#xff0c;检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较与分析&#xff0c;但是YOLOv5在COCO数据集上面的测试效果还是挺不错的。 YOLOv5是一种单阶段目标检测算法&#xff0c;该算…

教材改版难道是假的?!24下半年软考怎么还是用旧版?何时启用新教材?

之前一直有消息说软考有几个科目的教材要改版&#xff0c;导致不少打算报名2024年下半年软考的同学都在担心是否会影响考试…… 但一直到现在都没看到有新教材出版的消息&#xff0c;所以很多人怀疑之前教材改版的消息是不是假的&#xff0c;要不然怎么还在用旧版教材…… 那…

C++11新特性和扩展(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 C11新特性和扩展 收录于专栏 [C进阶学习] 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1.C11简介 2. 列表初始…

Oracle 数据库安装和配置指南

目录 1. 什么是Oracle数据库&#xff1f; 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量&#xff08;Linux&#xff09; 4.…