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.pswp.cn/pingmian/75750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75750.shtml
英文地址,請注明出處:http://en.pswp.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&…