Docker 快速入门Ubuntu版(1h速通)

Docker 快速入门Ubuntu版(1h速通)

写在前面,本教程主要参考Docker get started,ChatGPT-4o的回答,以及网络上查找到的其他资料,这里主要是记录了笔者的学习过程,难免会有批漏,还烦请请各位指出。

另外,我使用的系统为ubuntu20.04,请大家注意区别。

如果您在查看的时候遇到了问题,请在其他问题进行查找。

文章目录

  • Docker 快速入门Ubuntu版(1h速通)
    • 1. 基本概念及安装
      • 1.1 Docker镜像(Image)
      • 1.2 Docker容器(Container)
      • 1.3 打包、分发、部署
      • 1.3 安装Docker
    • 2. 制作自己的镜像和运行容器
    • 3. 停止容器运行和移除容器
    • 常用CLI
    • 其他问题
      • 1. Ubuntu运行docker 权限问题Got permission denied
      • 2. 添加Docker Hub镜像加速
      • 3. Docker的卸载
    • Reference

1. 基本概念及安装

Docker是一种用于创建、部署和运行应用程序的开源平台。它使得开发者可以将应用程序及其依赖项打包到一个名为“容器”的轻量级、可移植单元中,从而保证应用程序在不同环境中的一致运行。容器包含了应用程序的代码、运行时、系统工具、库等,确保在任何支持Docker的系统上都能运行。

简单来说Docker就是一个能跨平台(比如,windowslinuxmac等)运行的虚拟机,它只虚拟软件运行的基本环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。

Docker和普通的虚拟机virutalboxvmware的对比如下

Image

1.1 Docker镜像(Image)

镜像是一个静态的、只读的模板,它包含了容器运行所需的所有内容。Docker镜像类似于虚拟机的快照,提供了一种便捷的方式来创建容器。镜像可以从公共或私有的Docker注册表(如Docker Hub)中拉取。

1.2 Docker容器(Container)

容器是镜像的运行实例。它包含了应用程序及其依赖项,可以独立运行。容器是轻量的、可移植的,并且可以在开发、测试和生产环境中一致地运行。

1.3 打包、分发、部署

打包(Packaging)

打包是指将应用程序及其所有依赖项打包成一个Docker镜像的过程。这个过程通常使用Dockerfile来定义。

分发(Distribution)

分发是指将Docker镜像上传到一个镜像注册表(如Docker Hub),以便其他人可以下载和使用。

部署(Deployment)

部署是指在目标环境中运行Docker容器的过程。Docker容器可以在任何安装了Docker的机器上运行,这使得部署变得非常简单和高效。

1.3 安装Docker

如果你是初学者,建议安装带UI的桌面版本,如果你是高手,可以直接使用命令行来进行安装。因为笔者使用的是ubuntu20.04服务器版,所以我将ubuntu的服务器版的链接也放在下面,方便笔者以后查找

  • 桌面版:https://www.docker.com/products/docker-desktop/
  • 各种服务器版:https://docs.docker.com/engine/install/
  • ubuntu服务器版:https://docs.docker.com/engine/install/ubuntu/

需要注意的是在Linux上Docker Desktop的工作方式有所不同:

  • Docker Desktop在Linux上会启动一个虚拟机(VM)。
  • 这个虚拟机中运行一个自定义的Docker上下文,称为desktop-linux

因此这个虚拟机中的Docker引擎不会自动访问到本地系统中之前创建的镜像和容器。这就意味着本地系统上的Docker引擎(安装Docker Desktop之前运行的引擎)与虚拟机中的Docker引擎(Docker Desktop启动后运行的引擎)是分离的。

这里我们讲解一下在ubuntu中是如何安装docker服务器版本的,其实很简单,只要按照官网上的要求进行即可

根据之前的解释,首先我们需要先安装docker engine,网址如下:Install Docker Engine on Ubuntu

设置仓库

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装docker engine

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

测试

sudo docker run hello-world

如果出现打印的文字则表示安装成功

Image

如果你想使用桌面版,那么在安装完docker engine之后,我们可以开始安装docker desktop,网址如下:Install Docker Desktop on Ubuntu

开启cpu虚拟化

modprobe kvm

根据你的cpu属于intel还是amd来选择语句

modprobe kvm_intel  # Intel processors

modprobe kvm_amd    # AMD processors
kvm-ok
ls -al /dev/kvm
sudo usermod -aG kvm $USER

然后下载ubuntu下的.deb安装文件,下载地址:docker for ubuntu.deb

然后安装

 sudo apt-get install ./docker-desktop-<version>-<arch>.deb

安装完毕后,可以在搜索框中搜到,如下所示

Image

注:你安装了桌面版和服务器版之后你可能需要

  • 将docker的上下文设置为服务器版
docker context use default
  • 将docker的上下文设置为桌面版
docker context use desktop-linux

2. 制作自己的镜像和运行容器

下载docker官网上提供的示例:https://github.com/docker/getting-started-app,这个示例是基于Javascript开发的一个web项目,如果你不熟悉Javascript的话也没有关系,我们只是用这个项目来熟悉Docker的制作镜像的流程。

git clone https://github.com/docker/getting-started-app.git

我们可以自己制作一个docker镜像并运行,进入这个文件,它应该具有如下的结构

├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock

这些内容是什么我们并不关系,我们只关心如何将其打包成一个image

我们进入这个文件的存放路径

cd /path/to/getting-started-app

然后创建一个Dockerfile,docker会查找这个文件,这个文件用于定义如何构建一个Docker镜像。它包含了一系列指令,每一条指令都描述了如何构建镜像的一个步骤。我们的构建规则都写在Dockerfile中,我们可以这样创建一个Dockerfile

touch Dockerfile
gedit Dockerfile

然后向其中写入以下的内容,保存

# syntax=docker/dockerfile:1

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

接着,我们就可以构建镜像了

docker build -t getting-started .
  • -t--tag的缩写,用于给新构建的镜像打标签。标签为镜像提供了一个可读的名称和版本号
  • . 表示当前目录是构建上下文。Docker会查找当前目录中的Dockerfile,并根据其中的指令构建镜像。

构建过程如下所示

Image

构建完毕后,我们可以启动构建的image看看效果

docker run -dp 127.0.0.1:3000:3000 getting-started
  • -d这个选项表示“分离模式”(detached mode)。它告诉Docker在后台运行容器,这样你可以继续使用你的终端而不被容器的输出阻塞。
  • p选项用于端口映射,它将主机的端口与容器的端口绑定在一起。具体来说:
    • 127.0.0.1:这是主机的回环地址(localhost),表示端口只在本地主机上可用,不会暴露在外部网络中。
    • 第一个3000:这是主机上的端口号,你可以通过访问127.0.0.1:3000来访问容器服务。
    • 第二个3000:这是容器内部的端口号,应用程序在容器内监听的端口。
  • getting-started,这是你要运行的Docker镜像的名称。在这个例子中,getting-started是一个已经构建好的Docker镜像的名称。

我们访问端口http://localhost:3000/,即可看到

Image

3. 停止容器运行和移除容器

查看当前正在运行的容器的信息

docker ps
  • -a--all:显示所有容器(包括停止的容器)。
  • -q--quiet:只显示容器ID。
  • --format:自定义输出格式。
  • --filter:根据条件过滤显示的容器。
    通过查找显示的ID,我们可以停止该容器的运行
docker stop <the-container-id>	# 停止容器运行

对已经停止了的容器,我们可以对其进行重启

docker start <container_id_or_name>

一旦容器重启了,容器内部的状态会恢复到上次停止时的状态。运行在容器内的应用程序也会从头开始运行。

一旦容器停止了,我们就可以对其进行删除

docker rm <the-container-id>	# 删除容器

比如,我这里就删除了之前已经结束运行的一个容器

Image

…后面还有内容待补充,暂时写到这里…

常用CLI

更多相关命令请参考CLI Reference

  • docker ps 查看当前运行中的容器
  • docker images 查看镜像列表
  • docker rm container-id 删除指定 id 的容器
  • docker stop/start container-id 停止/启动指定 id 的容器
  • docker rmi image-id 删除指定 id 的镜像
  • docker volume ls 查看 volume 列表
  • docker network ls 查看网络列表

其他问题

1. Ubuntu运行docker 权限问题Got permission denied

如果使用docker命令行的时候遇到了问题

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json": dial unix /var/run/docker.sock: connect: permission denied
See 'docker run --help'.

这是因为docker进程使用的是Unix socket而不是tcp端口,而默认情况下Unix socket需要root用户权限使用。

所以我们有两种解决方式,第一种是每次使用docker命令的时候都手动添加sudo赋给root权限,第二种把用户加入到docker用户组,这里推荐使用第二种方式

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用
Image

还有一些别的解决方式

  • 更改Docker守护进程的组所有权
sudo chown root:docker /var/run/docker.sock
  • 更改Docker守护进程的访问权限
sudo chmod 666 /var/run/docker.sock

2. 添加Docker Hub镜像加速

镜像加速器镜像加速器地址
Docker 中国官方镜像https://registry.docker-cn.com
DaoCloud 镜像站http://f1361db2.m.daocloud.io
Azure 中国镜像https://dockerhub.azk8s.cn
科大镜像站https://docker.mirrors.ustc.edu.cn
阿里云https://ud6340vz.mirror.aliyuncs.com
七牛云https://reg-mirror.qiniu.com
网易云https://hub-mirror.c.163.com
腾讯云https://mirror.ccs.tencentyun.com

创建或者修改/etc/docker/daemon.json

sudo gedit /etc/docker/daemon.json

选择你想使用的镜像源

{
    "registry-mirrors": [
        "https://ustc-edu-cn.mirror.aliyuncs.com",
    ]
}

然后重启docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

查看配置是否正确

docker info

3. Docker的卸载

# 卸载 Docker Engine、CLI、Containerd 和 Docker Compose 软件包
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 删除所有镜像、容器和卷
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 删除docker配置文件
sudo rm -rf ~/.docker

Reference

[1]Docker get started
[2]Docker 快速入门
[3]Install Docker Engine on Ubuntu
[4]Install Docker Desktop on Ubuntu
[5]Ubuntu运行docker 权限问题Got permission denied

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手写mybatis-预编译后sql语句

sql表 mybatis数据库中的gxa_user表 /*Navicat Premium Data TransferSource Server : rootSource Server Type : MySQLSource Server Version : 80028Source Host : localhost:3306Source Schema : mybatisTarget Server Type : MySQLTarget…

苹果警告部分 iPhone 用户称他们遭到雇佣间谍软件攻击

苹果警告部分 iPhone 用户称他们遭到“雇佣间谍软件攻击 苹果正在提醒用户注意针对 iPhone 的新一轮已识别雇佣间谍软件攻击。可能的受害者已经收到来自苹果的电子邮件&#xff0c;其中描述了该攻击如何“远程破坏 iPhone”。据路透社报道&#xff0c;印度和其他 91 个国家的受…

前端图片在切换暗黑模式时太亮该怎么办?

通过css中的filter属性来实现&#xff0c;进行图片的色系反转、亮度、对比度调整等 1、invert 反转输入图像&#xff0c;值为 100% 则图像完全反转&#xff0c;值为 0% 则图像无变化 filter: invert(1); 2、blur 给元素应用高斯模糊效果。 filter: blur(5px); 3、brightnes…

港中文斯坦福提出SD加速模型PCM,一步即可生成图像和视频,可直接与SD1.5,SDXL,AnimateLCM结合!

又有新的SD加速模型可以用了&#xff0c;PCM解决了原来LCM模型的各种问题。并且对 AnimateLCM 也做了优化&#xff0c;用PCM直接生成动画也可以保证质量了。 PCM从这三个角度说明了LCM的设计空间是有限的并很好地解决了这些限制。 PCM主要改善了三个LCM原有的问题&#xff1a;…

SpringBoot Redis读写与数据序列化 RedisTemplate 与 StringRedisTemplate 防转字节

介绍 RedisTemplate 对象在底层默认会转成字节&#xff0c;造成了内存的开销很大&#xff0c;这是他底层进行处理的,造成可读性差&#xff0c;如需要转成简单的字符串存储需要进行序列化的配置。 RedisTemplate 配置类 Configuration public class RedisConfig {Beanpublic …

文本数据预处理

1.定义 数据预处理:在数据分析之前&#xff0c;对数据进行初步处理 缺失值填写噪声处理不一致数据修正中文分词等 2. 文本数据预处理相关操作 2.1. 中文分词 安装相关库pip install jiaba2.1.1 相关使用 全模式 一段文本种所有可能出现地词语都扫描出来&#xff0c;一段文…

基于pytorch的车牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、导入数据 from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datase…

微服务第二轮

学习文档 背景 由于每个微服务都有不同的地址或端口&#xff0c;入口不同 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址&#xff0c;麻烦 前端无法调用nacos&#xff0c;无法实时更新服务列表 单体架构时我们只需要完成一次用户登录、身份校验&#xff…

【十大排序算法】选择排序

选择就像是在谱曲&#xff0c;每个决定就是一个音符&#xff0c;只有将它们有序地安排在一起&#xff0c;才能奏响美妙的乐章。 文章目录 一、选择排序的思想二、选择排序的发展历程三、选择排序具象化四、选择排序算法实现五、选择排序的特性推荐阅读 一、选择排序的思想 选…

[STM32]定位器与PWM的LED控制

目录 1. 深入了解STM32定时器原理&#xff0c;掌握脉宽调制pwm生成方法。 (1)STM32定时器原理 原理概述 STM32定时器的常见模式 使用步骤 (2)脉宽调制pwm生成方法。 2. 实验 (1)LED亮灭 代码 测试效果 (2)呼吸灯 代码 测试效果 3.总结 1. 深入了解STM32定时器原…

绿联云NAS一些探索(1):SSH、包管理器探测、安装docker-compose等

绿联云NAS一些探索SSH、包管理器探测、安装docker-compose等 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

git报错解决方法error: remote origin already exists.

有时想添加远程本地仓库和远程公司仓库&#xff0c;但git remote的时候发现关联的是一样的&#xff0c;你再去关联时会报错&#xff0c;这时候你应该清除你想关联的远程仓库&#xff0c;再次连接就可以了 下面这个错误提示是远程源已经存在 现在你可以这样做 1、查看远程库的信…

Jenkins工作流程原理

持续集成&#xff1a;自动部署打包发布代码 Jenkins工作流程 项目已经基于Jenkins实现了持续集成&#xff0c;每当我们push代码时&#xff0c;就会触发项目完成自动编译和打包。而需要运行某个微服务时&#xff0c;我们只需要经过两步&#xff1a; 第一步&#xff0c;访问je…

双网卡配置IP和路由总结

1.在网络适配器属性IPv4中设置默认网关&#xff08;记网关地址为A&#xff09;&#xff0c;将会在本地路由标中新增一条记录&#xff1a; 网络号子网掩码网关地址0.0.0.00.0.0.0A 2.如果有两个网卡&#xff08;假设一个连接内网&#xff0c;一个连接互联网&#xff09;&#…

muse-ui的select下拉框没有出现在底部

这个是muse-ui的官网文档 Muse-UI 如果进不去的&#xff0c;可以试着翻墙用外网看看&#xff0c;这里很奇怪&#xff0c;我前几天进不去&#xff0c;然后翻墙可以进&#xff0c;这两天不翻墙也能正常进去了 说一下问题&#xff0c;就是当我们使用 muse-ui的下拉框的时候&…

碰撞问题和单调栈的结合-735. 小行星碰撞【有小坑】

题目链接及描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/asteroid-collision/description/?envTypestudy-plan…

SpringBoot+Vue在线考试答题系统【附:资料➕文档】

前言&#xff1a;我是源码分享交流Coding&#xff0c;专注JavaVue领域&#xff0c;专业提供程序设计开发、源码分享、 技术指导讲解、各类项目免费分享&#xff0c;定制和毕业设计服务&#xff01; 免费获取方式--->>文章末尾处&#xff01; 项目介绍016&#xff1a; 本…

ubuntu20.04 安装OpenSSL 1.0.2o (借助腾讯AI完全OK)

文章目录 ubuntu20.04安装openssl-1.0.2o安装后看不到版本信息如何解决 腾讯云 AI 代码助手: 要确认 Linux 开发板的 CPU 是多少位的&#xff0c;可以使用以下方法&#xff1a; 打开终端。输入以下命令&#xff0c;然后按回车键&#xff1a; cat /proc/cpuinfo这将显示关于 CP…

李廉洋:6.6黄金原油怎么看?今日行情分析及最新策略。

黄金消息面分析&#xff1a;美指走强未能抑制金价升势。黄金价格大幅上涨&#xff0c;在美国公布喜忧参半的经济数据后&#xff0c;金价与周二的走势发生180度大转弯&#xff0c;这些数据可能保证美联储设定的借贷成本降低。美国10年期基准国债收益率下跌3个基点&#xff0c;至…

PCA算法

PCA算法 原创 小王搬运工 时序课堂 2024-06-06 19:16 四川 1. PCA算法 PCA算法称为主成分分析&#xff0c;是一种无监督学习算法&#xff0c;主要用于数据降维和特征提取。 PCA是一种数据降维模型&#xff0c;它的基本模型是通过线性变换将数据转换到新的空间&#xff0c;这…