当前位置: 首页 > news >正文

Ubuntu20.04中Docker安装与配置

一、安装

  • 1、卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker-ce docker.io
  • 2、更新apt包索引
sudo apt-get update

显示“正在读取软件包列表… 完成”

  • 3、安装以下包以使apt可以通过HTTPS使用存储库(repository)
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

显示“done.”

  • 4、添加Docker官方的GPG密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

显示“OK”

  • 5、设置stable存储库
sudo add-apt-repository "deb [arch=amd64] Index of linux/ubuntu/ $(lsb_release -cs) stable"

如果没有报错就正常进行下一步。显示“正在读取软件包列表… 完成”

这里我报错

Command 'lsb_release' not found, but can be installed with:
sudo apt install lsb-release
E: 文件 list 第 73 行的记录格式有误 /etc/apt/sources.list (URI parse)
E: 无法读取源列表。

解决方法就是

(1)先删除刚刚加进去的语句

sudo gedit /etc/apt/sources.list

删掉73以及之后的句子(也就是刚刚我们加进去的)

(2)改为重新运行下列语句(根据版本选择自己的句子即可)

# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu (Ubuntu内核名称) stable"# Ubuntu16.04对应xenial
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"# Ubuntu18.04对应bionic
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"# Ubuntu20.04对应focal
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

参考链接:Ubuntu安装docker报错:Command ‘lsb_release‘ not found

  • 6、更新一下apt包索引
sudo apt-get update

显示“正在读取软件包列表… 完成”

  • 7、安装最新版本的Docker CE
sudo apt-get install -y docker-ce

显示“正在处理用于 man-db (2.9.1-1) 的触发器 …
正在处理用于 systemd (245.4-4ubuntu3.17) 的触发器 …”

二、验证

  • 查看docker服务是否启动
systemctl status docker

或者

service docker status

在这里插入图片描述

  • 【可跳过】若未启动,则启动docker服务
systemctl start docker
# 或者
service docker start

三、配置镜像加速器

默认的情况下docker会从docker hub中查找或下载镜像,在国内会比较慢。可以使用阿里的镜像加速器来提高速度。

  • 1、在阿里云注册账号–右上角进入控制台。

https://www.aliyun.com/

  • 2、容器镜像服务

打开左上角菜单栏,搜索“容器镜像”,选择“容器镜像服务”

在这里插入图片描述

  • 3、加速

打开左侧"镜像工具",选择"镜像加速器",在Ubuntu中依次运行最下方代码

(容器镜像服务)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

如果写错了可以通过以下代码来修改或者查看

sudo gedit /etc/docker/daemon.json

四、镜像使用

1、镜像和容器的区别

img

  • 镜像与容器为一对多的关系,通过一个镜像确实可以启动三个容器,但是这个三个容器的名字不能一样。

  • 镜像是别人打包好在镜像仓库的,我们去下载就好了。但是我们下载镜像的时候要带上版本号。如ubuntu:20.04和ubuntu:18.04是两个不同的镜像。

  • 镜像的基本属性包括REPOSITORY(仓库名)、TAG、IMAGE ID、CREATED(创建时间)、SIZE等。例如【ubuntu:20.04】的REPOSITORY = ubuntu,TAG = 20.04。

参考链接:

docker容器和镜像的区别

Docker容器与镜像的区别

2、Exit状态、运行、未运行

  • 创建镜像时顺便创建的容器:exit后成为:exited状态=未运行状态

  • start之后的容器:运行状态。经过exit后,未成为exited状态,需要再经过stop,才可以成为未运行状态。

3、具体使用

简单了解了镜像和容器的区别,就可以开始创建镜像/容器了。

(1)创建镜像和容器

【在这步骤中可以输入“exit”来直接退出容器】

a. run命令

【ubuntu20.04:8ba1b8fe358d,不命名】

在ubuntu:20.04镜像下创建一个容器。如果没有发现镜像的话,会自动进行下载(Pull)。

sudo docker run -it ubuntu:20.04 /bin/bash

/bin/bash 参数告诉docker在容器中启动一个bash shell,即pull完会直接进入容器中,其中8ba1b8fe358d就是容器的编号。

在这里插入图片描述

【ubuntu20.04:892fed6bf971,名为myx_test】

–name可以实现为容器取名。

事实上,在ubuntu20的系统中,ubuntu:latest和ubuntu:20.04是同一个镜像,但由于TAG不同,会再次Pull,此时创建了ubuntu:latest镜像下下一个新的名为“myx_test”的容器,容器ID为892fed6bf971。

sudo docker run -it --name=myx_test ubuntu:latest

【ubuntu18.04:f36e76fb8d9a,名为myx_test2】

此时,如果改为ubuntu18.04,就要重新进行pull。此时创建了一个ID为f36e76fb8d9a的容器

sudo docker run -it --name=myx_test2 ubuntu:18.04

在这里插入图片描述

b. create命令

也可以用create命令新建镜像,但create完成后不会自动创建容器。由于此时已经存在latest,所以不会pull

sudo docker create -it ubuntu:latest

在这里插入图片描述

(2)查看镜像和容器

  • 查看镜像
sudo docker images

在这里插入图片描述

根据之前的步骤,分别创建过ubuntu20.04、ubuntu:latest、ubuntu18.04三种镜像。

同时如之前所述,对于同版本的ubuntu镜像,其ID是相同的

  • 查看容器
# 查看Exited状态的容器
sudo docker ps -a|grep Exited|awk '{print $1}'

在这里插入图片描述

从下至上依次是之前创建的三个容器

(3)容器进入退出和启动停止

  • 若当前已经位于容器中:

    • 退出时想继续运行容器:依次按【ctrl+p】,【ctrl+q】

    • 退出时想停止运行容器:按【ctrl+d】或输入exit

  • 若当前不在容器中:

# 启动,start后跟着id号,只要能唯一标志,可以不完整输入
# 也可以是之前定义的名称
sudo docker start id   # sudo docker start 89
sudo docker start name  # sudo docker start myx_test
# 停止
sudo docker stop id
sudo docker start name

其中,启动并不会进入bash界面,而是让容器运行,不再属于Exited状态。

在这里插入图片描述

  • 容器已经启动,想要进入容器bash界面:

需要先通过sudo docker start启动容器,才可以用以下代码进入

# 同样是使用id和name都可以,之后不再复述
sudo docker exec -i -t myx_test /bin/bash
sudo docker exec -i -t 89 /bin/bash

在这里插入图片描述

这里要注意的是,经过start的容器,仅仅“exit”无法让其处于Exited状态,需要再运行stop命令。

在这里插入图片描述

(4)删除镜像和容器

  • 删除镜像

删除镜像ubuntu:latest

# 短id
sudo docker rmi ba6a
# 完整id
sudo docker rmi ba6acccedd29
# 镜像名【REPOSITORY:TAG】
sudo docker rmi ubuntu:latest

(2)删除容器

创建一个新的容器,id是d56bf84b9bbe,删除

# 删除某个具体容器
sudo docker rm id
# 删除Exited状态/未运行的容器,三种命令均可
sudo docker rm docker ps -a|grep Exited|awk '{print $1}'
sudo docker rm $(sudo docker ps -qf status=exited)
sudo docker rm $(sudo docker ps -a -q)
# 删除孤立容器
sudo docker container prune 

在这里插入图片描述

参考链接

docker容器安装与使用

相关文章:

Ubuntu20.04中Docker安装与配置

一、安装 1、卸载可能存在的旧版本 sudo apt-get remove docker docker-engine docker-ce docker.io2、更新apt包索引 sudo apt-get update显示“正在读取软件包列表… 完成” 3、安装以下包以使apt可以通过HTTPS使用存储库(repository) sudo apt-get install -y apt-tran…...

pytorch权值初始化和损失函数

pytorch权值初始化和损失函数 权值初始化 梯度消失与爆炸 针对上面这个两个隐藏层的神经网络&#xff0c;我们求w2的梯度 可以发现&#xff0c;w2的梯度与H1&#xff08;上一层网络的输出&#xff09;有很大的关系&#xff0c;当h1趋近于0时&#xff0c;w2的梯度也趋近于0&am…...

maven将jar文件上传至本地仓库及私服

maven官方仓库有些依赖并不存在&#xff0c;现在项目都是maven直接获取jar&#xff0c;当maven获取不到时&#xff0c;需要我们把jar上传至maven仓库。已 ImpalaJDBC41.jar 文件为例&#xff0c;如&#xff1a;希望上传后&#xff0c;设置的依赖为&#xff1a;<dependency&g…...

前端学习第三阶段-第1、2章 JavaScript 基础语法

01第一章 JavaScript网页编程课前导学 1-1 JavaScript网页编程课前导学 02第二章 JavaScript 基础语法 2-1 计算机基础和Javascript介绍 01-计算机基础导读 02-编程语言 03-计算机基础 04-JavaScript初识导读 05-初始JavaScript 06-浏览器执行JS过程 07-JS三部分组成 08-JS三种…...

hibernate学习(二)

hibernate学习&#xff08;二&#xff09; 一、hibernate常见配置&#xff1a; 1.XML提示问题配置&#xff1a; 二、hibernate映射的配置&#xff1a; &#xff08;1&#xff09;class标签的配置&#xff1a; 标签用来建立类与表之间的映射关系属性&#xff1a; 1.name&…...

平安银行LAMBDA实验室负责人崔孝林:提早拿到下一个计算时代入场券

量子前哨重磅推出独家专题《“量子”百人科学家》&#xff0c;我们将遍访全球探索赋能“量子”场景应用的百位优秀科学专家&#xff0c;从商业视角了解当下各行业领域的“量子”最新研究成果&#xff0c;多角度、多维度、多层面讲述该领域的探索历程&#xff0c;为读者解析商业…...

linux下进不去adb

linux 进不去adb cat /sys/kernel/debug/usb/devices 查看是否有adb口 首先查看adb是否被识别成串口 option 如果被识别成串口 方法1&#xff1a; https://patchwork.kernel.org/project/linux-usb/patch/20180723140220.7166-1-romain.izard.progmail.com/ diff --git a/dri…...

【SPSS】多因素方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 方差分析概述 多因素方差分析原理...

我的投稿之旅

一、铁道科学与工程学报选择这个期刊的原因是&#xff1a;感觉影响因子较低&#xff0c;而且实验室有师兄师姐中过这个期刊&#xff0c;所以抱着试一试的心态投了。投稿之前需要去官网注册账号由于方向不一致&#xff0c;被退稿了“您的稿件内容不属于本刊刊载范畴&#xff0c;…...

51单片机DS18B20的使用

文章目录前言一、DS18B20介绍二、单总线协议三、DS18B20引脚说明四、DS18B20程序编写1.DS18B20复位函数2.DS18B20存在检测3.DS18B20读取一个bit和一个byte函数4.DS18B20写一个字节函数5.开始温度转换函数6.DS18B20初始化函数7.DS18B20读取温度函数五、代码测试总结前言 本篇文…...

Vue组件原理知识(1)

Vue 组件知识整理&#xff08;1&#xff09;文章目录Vue 组件知识整理&#xff08;1&#xff09;一、组件介绍1.1 传统方式与组件方式编写应用对比二、组件使用2.1 非单文件组件的使用**1. 组件的创建****2. 组件的注册****3. 组件的使用****4. Vue中使用组件的三大步骤总结***…...

Linux:IO库函数

目录标准库IO函数一、fopen二、fwrite三、fread四、fseek五、fclose在编写程序时&#xff0c;离不开IO操作&#xff0c;最常见的IO操作就是用printf函数进行打印&#xff0c;本文主要介绍的是封装后的IO库函数。 标准库IO函数 常使用的IO库函数如下&#xff1a; 函数作用fop…...

Go爬虫学习笔记

N002.02 Go分布式爬虫实战 开篇 学习三阶段 入门&#xff0c;照猫画虎底层&#xff0c;了解方方面面&#xff0c;深入阅读源码和书籍借助开源组件来进行复杂设计&#xff0c;窥探各个组件赋能业务 分布式系统&#xff1a; 扩展性一致性可用性高并发微服务 爬虫&#xff1…...

数据结构课程设计:高铁信息管理系统(C++实现)

目录 简介实验输出实验要求代码运行环境结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖…...

Python 模块之 datetime

datetime 对象格式化为字符串 标准转换格式符号&#xff1a; %a 本地星期的短名称 如&#xff1a;Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE) %A 本地星期全名称 如 &#xff1a;Sunday, Monday, ..., Saturday (en_US);Sonntag, Montag, ..., Samstag (de_DE) %w…...

linux安装编译ffmpeg

ffmpeg下载&#xff1a;http://ffmpeg.org/releases可以下载适合自己的版本。我下载的是5.0版本&#xff0c;然后解压&#xff1a;tar xvf ffmpeg-5.0.tar.gz进入ffmpegcd ffmpeg-5.0编译ffmpeg./configure --prefix/root/ffmpeg //编译文件存放的路径如果是交叉编译添加以下参…...

嵌入式Linux驱动开发(二)LED驱动

1. Linux下LED驱动原理 与裸机区别在于&#xff0c;编写驱动要符合linux驱动框架规范。裸机直接对寄存器物理地址进行读写&#xff0c;linux下需要经过MMU。 1.1 地址映射相关概念 1&#xff09;MMU&#xff08;Memory Manage Unit - 内存管理单元&#xff09;&#xff1a; …...

C++学习

强制转换运算符 C 引入了四种不同的强制转换运算符以进行强制转换&#xff1a; const_caststatic_castreinterpret_castdynamic_cast C语言强制类型转换缺点&#xff1a; 主要是为了克服C语言强制类型转换的以下三个缺点。 没有从形式上体现转换功能和风险的不同。 例如&am…...

JavaEE简单示例——依赖注入

简单介绍&#xff1a; 首先我们要知道&#xff0c;依赖注入就是赋值&#xff0c;带着这句话去理解依赖注入就非常的简单了&#xff0c;将文中所有的依赖注入全部脑部替换成给属性赋值&#xff0c;再去理解依赖注入的概念。 依赖注入&#xff08;DI&#xff09;是指IoC容器在运…...

大数据框架之Hive: 第7章 综合案例练习(初级)

第7章 综合案例练习&#xff08;初级&#xff09; 一 环境准备 1.1 建表语句 hive> -- 创建学生表 DROP TABLE IF EXISTS student; create table if not exists student_info(stu_id string COMMENT 学生id,stu_name string COMMENT 学生姓名,birthday string COMMENT 出…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...