Docker基础2

如需转载,标记出处


本次我们将下载一个 Docker 镜像,从镜像中启动容器

上一章,安装 Docker 时,获得两个主要组件:

  • Docker 客户端

  • Docker 守护进程(有时称为“服务器”或“引擎”)

守护进程实现 Docker Remote API。 在默认的 Linux 安装中,客户端通过位于 /var/run/docker.sock 的本地 IPC/Unix 套接字与守护进程通信。

docker version 命令测试客户端和守护进程是否正在运行并可以相互通信

从远处拉取镜像,使用容器

映像包含足够的操作系统 (OS),以及运行其设计的任何应用程序所需的所有代码和依赖项。

从Docker Hub 拉取最新版本的 ubuntu 镜像到本地

将镜像(一般在github上)放到 Docker 主机(本地这边)称为“拉取”。

其实就是下载

docker pull ubuntu:latest

(如果拉取失败是十有八九是没设置 Docker 的代理,看下面第一个问题集)

运行 docker image ls 命令以查看刚刚拉取的映像

docker container run 命令从中启动容器。

docker container run -it ubuntu:latest /bin/bash
root@d08b290c8882:/# 

shell 提示都发生了变化

因为 shell 现在连接了新容器 shell 上

按下 Ctrl-PQ 退出容器

docker container ls查看容器状态

docker container ls
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
db489e5f4d94   ubuntu:latest   "/bin/bash"   40 seconds ago   Up 40 seconds             wizardly_jackson
d08b290c8882   ubuntu:latest   "/bin/bash"   7 minutes ago    Up 7 minutes              festive_shannon

前面步骤中的容器仍在运行,用 docker container exec 命令将 shell 连接到正在运行的容器。

docker container exec -it wizardly_jackson bash

使用 docker container stopdocker container rm 命令停止容器/关闭容器

比如:

admin123@admin-virtual-machine:~$ docker container kill wizardly_jackson
wizardly_jackson

从github上拉取到本地,手动构建容器

上面一部分和这部分有区别吗

肯定的

Docker hub是专门的 容器镜像仓库,里面的镜像是 预先构建好的,由官方或社区成员提前创建、打包好并上传,可以直接用

从 Git 仓库克隆一个应用程序,检查其 Dockerfile,容器化,然后将其作为容器运行

git clone https://github.com/nigelpoulton/psweb.git

(如果报错看问题集4)

admin123@admin-virtual-machine:~/learn$ ls
psweb
admin123@admin-virtual-machine:~/learn$ cd psweb
admin123@admin-virtual-machine:~/learn/psweb$ ls
app.js  Dockerfile  package.json  README.md  views

cd 进入目录需要保证 ls 后出现 Dockerfile,Dockerfile 是一个纯文本文档,描述了如何构建 Docker 镜像。 使用 docker image build 命令,按照 Dockerfile 中的说明创建新的映像

admin123@admin-virtual-machine:~/learn/psweb$ cat Dockerfile
# Test web-app to use with Pluralsight courses and Docker Deep Dive book
FROM alpine
​
LABEL maintainer="nigelpoulton@hotmail.com"
​
# Install Node and NPM
RUN apk add --update nodejs npm curl
​
# Copy app to /src
COPY . /src
​
WORKDIR /src
​
# Install dependencies
RUN npm install
​
EXPOSE 8080

构建一个名字叫 test 的容器

docker image build -t test:latest .

上面的不行换这个

docker buildx build --build-arg http_proxy=http://你的代理ip:端口号\--build-arg https_proxy=你的代理ip:端口号 \-t test:latest .

运行容器

 docker container run -d \--name web1 \-p 8080:8080 \test:latest

访问 http://127.0.0.1:8080/

就可以看到

Hello Docker learners!!!
Check out my other books
Quick Start KubernetesThe Kubernetes BookAI ExplainedBe careful. The last time I updated the packages in this app was Dec 2024.

BUG报错问题集

1.Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

网络问题,输入ifconfig在ens33这个网卡下面没有看到ipv4地址,说明网卡掉了

sudo ifconfig ens33 down
sudo ifconfig ens33 up

我也不知道为啥虚拟机的网卡掉线是家常便饭,不过我的问题还是没解决又碰到了下面的报错

4.6补充:如果你一直在这边卡着,网络问题也解决了,剩下的问题就是代理问题了,我昨天写到这里排查半天,查了两本教程书籍,不同种拉取镜像的方法都不行,今天除了代理的问题解决的,

我自己的ubuntu虚拟机的代理不知道啥时候也掉线了

1.永久设置代理(如果已经有这一步跳过即可)

编辑 ~/.bashrc~/.zshrc 文件:

sudo vim  ~/.bashrc

在文件末尾添加:(这个只是 参考我也不知道你用的哪个代理,如果是nat用的是主机的ip,桥接就是ifcomfig查虚拟机自己的ip,端口号看使用的哪个软件用的)

唯一需要注意的是下面不是我打错,没有https://

除了ip和端口号需要根据自身情况改其他的不用

export http_proxy="http://127.0.0.1:xxxx"
export https_proxy="http://127.0.0.1:xxxx"

保存后运行:

source ~/.bashrc

虚拟机的代理配置好,docker的也要配置

配置过程如下:

2.创建docker代理配置文件

编辑 http-proxy.conf 文件:

sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

在文件中加入代理环境变量:(这里还要细分你的虚拟机时)

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:xxxx/"
Environment="HTTPS_PROXY=http://127.0.0.1:xxxx/"

2.Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

解决方案

检查 Docker 配置文件中的 --registry-mirror 设置: 如果你希望使用镜像源,可以将该配置项移到 /etc/docker/daemon.json 中,而不是通过命令行启动时设置。这样可以避免与命令行启动参数冲突。

打开 /etc/docker/daemon.json 并添加以下内容:

{"registry-mirrors": ["https://mirrors.ustc.edu.cn"]
}

清除命令行中的 --registry-mirror 参数: 修改完 /etc/docker/daemon.json 后,删除或注释掉启动时使用的 --registry-mirror 参数。

你可以编辑 Docker 服务文件来移除这个启动参数:

sudo systemctl edit docker

在打开的编辑器中删除或注释掉 --registry-mirror 参数(如果存在),保存并退出。

重载并重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

3.*启动docker失败 Active: failed *

按照经验,一般都是在配置文件里面写的参数有问题,把改的东西还原回来再重启就行了

上面的话还是不行,再看下面的一种法子

查看日志:

sudo journalctl -u docker.service -n 50

其中有一句:

unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file.

分析:

错误的根本原因是 /etc/docker/daemon.json 配置文件中有一些选项是重复定义的,既通过配置文件设置,又通过命令行参数传递。这导致了 Docker 启动失败。

把文件中的内容全部删除,日志还是显示说重复了,最初能正常运行的时候这个文件就是空白的。

查看 Docker 服务的启动参数:

ps aux | grep dockerd

我的显示结果是这样的:

admin123@admin-virtual-machine:~$ ps aux | grep dockerdroot 11349 0.1 0.4 1895628 69920 ? Ssl 19:02 0:00 /usr/bin/dockerd --registry-mirror=https://mirrors.ustc.edu.cn
admin123 11613 0.0 0.0 12000 720 pts/0 S+ 19:03 0:00 grep --color=auto dockerd

dockerd 启动时包含了 --registry-mirror=https://mirrors.ustc.edu.cn 参数。这意味着在启动 Docker 时通过命令行显式指定了 --registry-mirror 参数,可能与 daemon.json 文件中的配置发生了冲突。

解决方案:

将该配置项移至 /etc/docker/daemon.json

{"registry-mirrors": ["https://mirrors.ustc.edu.cn"]
}

然后清除命令行中的 --registry-mirror 参数:

sudo systemctl edit docker

删除掉 --registry-mirror 参数,保存并退出。

重新加载 Docker 服务并重启:

sudo systemctl daemon-reload
sudo systemctl restart docker

4.fatal: 无法访问 'https://github.com/nigelpoulton/psweb.git/':Couldn't connect to server

Git 无法连接到 GitHub,最常见原因是 没有正确配置代理

git config --global http.proxy http://127.0.0.1:xxxx

git config --global https.proxy http://127.0.0.1:xxxx

如果还是不行ifconfig看网卡掉线没,这个bug老朋友了,是不是来一下

sudo git clone https://github.com/nigelpoulton/psweb.git
正克隆到 'psweb'...
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (39/39), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 85 (delta 28), reused 21 (delta 19), pack-reused 46 (from 2)
展开对象中: 100% (85/85), 17.12 KiB | 922.00 KiB/s, 完成.

5. ERROR: failed to solve: process "/bin/sh -c apk add --update nodejs npm curl" did not complete successfully: exit code: 3

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

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

相关文章

Rocketmq2

一、生产者端防丢失 1. 发送方式选择 同步发送:使用 send() 方法,等待 Broker 确认响应(SendResult),确保消息已成功发送。异步发送:使用 sendAsync() 方法并设置回调函数,处理发送成功 / 失败…

RabbitMQ详解,RabbitMQ是什么?架构是怎样的?

目录 一,RabbitMQ是什么? 二,RabbitMQ架构 2.1 首先我们来看下RabbitMQ里面的心概念Queue是什么? 2.2 交换器Exchange 2.3 RabbitMQ是什么? 2.4 重点看下优先级队列是什么? 三,RabbitMQ集群 3.1 普通集群模式 3.2 镜像队列集群 一,RabbitMQ是什么? 假设我们程序…

【一步步开发AI运动APP】六、运动计时计数能调用

之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运动领域市场,今…

MySQL——DQL的多表查询

一、交叉连接 标准语法:select * from 表1 cross join 表2 where 表1.公共列 表2.公共列; 简单语法:select * from 表1 , 表2 where 表1.公共列 表2.公共列; 公共列:两张表具有相同含义的列,不是列名一样。 …

【Linux内核】如何更加优雅阅读Linux内核源码(vscode)

1. 前言 因为已经习惯在Ubuntu下进行嵌入式工作开发,但Linux源码在Source Insight下进行阅读,一直很苦恼Linux/Windows来回切换的开发方式,当前发现可以通过 vscode clangd(扩展组件) 方式进行更好的内核源码阅读。 2. 环境 操作系统&…

21.OpenCV获取图像轮廓信息

OpenCV获取图像轮廓信息 在计算机视觉领域,识别和分析图像中的对象形状是一项基本任务。OpenCV 库提供了一个强大的工具——轮廓检测(Contour Detection),它能够帮助我们精确地定位对象的边界。这篇博文将带你入门 OpenCV 的轮廓…

LETTERS(DFS)

【题目描述】 给出一个rowcolrowcol的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。 【输入】 第一行,输入字母矩阵行数RR和列数SS,1≤R,S≤…

Day2-2:前端项目uniapp壁纸实战

再在wallpaper新建一个目录components 在components下新建组件common-title 记得点击创建同名目录 在index加 <view class"select"><common-title></common-title></view> 图片换了下&#xff0c;原来的有点丑&#xff0c;图片可按自己喜欢…

其他 vector 操作详解(四十)

介绍 除去向 vector 添加元素&#xff08;如 push_back&#xff09;之外&#xff0c;vector 还提供了许多其他操作&#xff0c;这些操作大多与 string 的操作类似。通过掌握这些操作&#xff0c;我们可以方便地查询、修改和比较 vector 中的元素&#xff0c;从而构建灵活、高效…

【Leetcode 每日一题】368. 最大整除子集

问题背景 给你一个由 无重复 正整数组成的集合 n u m s nums nums&#xff0c;请你找出并返回其中最大的整除子集 a n s w e r answer answer&#xff0c;子集中每一元素对 ( a n s w e r [ i ] , a n s w e r [ j ] ) (answer[i], answer[j]) (answer[i],answer[j]) 都应当…

python基础-13-处理excel电子表格

文章目录 【README】【13】处理Excel电子表格【13.1】Excel文档【13.2】安装openpyxl模块【13.3】读取Excel文档【13.3.1】使用openpyxl模块打开excel文档【13.3.2】从工作簿取得工作表【13.3.3】从工作表sheet获取单元格cell【13.3.5】从表中获取行和列【13.3.6】工作簿、工作…

ABS函数c++

简介&#xff1a; abs 函数用于计算一个数的绝对值&#xff0c;在 C 中它继承自 C 语言的标准库&#xff0c;其历史可以追溯到早期的 C 语言发展历程&#xff0c;以下是详细介绍&#xff1a; 早期编程语言的需求 在计算机编程的早期阶段&#xff0c;处理数学运算就是一项基本…

闭环SOTA!北航DiffAD:基于扩散模型实现端到端自动驾驶「多任务闭环统一」

端到端自动驾驶目前是有望实现完全自动驾驶的一条有前景的途径。然而&#xff0c;现有的端到端自动驾驶系统通常采用主干网络与多任务头结合的方式&#xff0c;但是它们存在任务协调和系统复杂度高的问题。为此&#xff0c;本文提出了DiffAD&#xff0c;它统一了各种驾驶目标并…

整车CAN网络和CANoe

车载网络中主要包含有Can网络,Lin网络,FlexRay,Most,以太网。 500kbps:500波特率,表示的数据传输的速度。表示的是最大的网速传输速度。也就是每秒 500kb BodyCan车身Can InfoCan娱乐信息Can 车身CAN主要连接的是ESB电动安全带 ADB自适应远光灯等 PTCan动力Can 底盘Can

实战设计模式之迭代器模式

概述 与上一篇介绍的解释器模式一样&#xff0c;迭代器模式也是一种行为设计模式。它提供了一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而无需暴露该对象的内部表示。简而言之&#xff0c;迭代器模式允许我们遍历集合数据结构中的元素&#xff0c;而不必了解这些集…

JVM 垃圾回收器是如何判断一个对象是否要回收?

JVM 垃圾回收器&#xff08;Garbage Collector&#xff09;需要判断哪些对象是“垃圾”&#xff0c;即不再被程序使用的对象&#xff0c;以便回收它们占用的内存。JVM 主要使用以下两种方法来判断对象是否是垃圾&#xff1a; 1. 引用计数算法 (Reference Counting): 原理&…

kali——httrack

目录 前言 使用教程 前言 HTTrack 是一款运行于 Kali Linux 系统中的开源网站镜像工具&#xff0c;它能将网站的页面、图片、链接等资源完整地下载到本地&#xff0c;构建出一个和原网站结构相似的离线副本。 使用教程 apt install httrack //安装httrack工具 httrac…

kotlin函数类型

一 函数类型定义 1 定义 函数类型就是 (Int, Int) -> Int 函数类型其实就是将函数的 “参数类型” 和 “返回值类型” 抽象出来 2 示例 &#xff1a; (Int, Int) -> Int 表示接收两个 Int 参数并返回 Int 的函数类型&#xff1b; (String) -> Unit 表示接收 Strin…

C# Winform 入门(9)之如何封装并调用dll

封装dll 首先创建 .Net平台 类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _09.Encapsulation_dll {public class Program{/// <summary>/// 求两个double类型的数值的和/// &l…

前后端分离下,Spring Boot 请求从发起到响应的完整执行流程

以下是前后端分离架构下&#xff0c;Spring Boot 请求从发起到响应的完整执行流程&#xff0c;结合你提出的所有问题&#xff0c;按真实执行顺序和职责链条重新整理所有核心概念、结构、关键类、数据转换点和典型代码示例&#xff1a; 一、前端发起请求&#xff08;步骤1-2&…