Docker鏡像和容器的簡單操作

1.鏡像管理

搜索鏡像:
? ? 這種方法只能用于官方鏡像庫
? ? 搜索基于 centos 操作系統的鏡像
? ? # docker search centos
? ? 按星級搜索鏡像: ? ? ? ?
? ? 查找 star 數至少為 100 的鏡像,默認不加 s 選項找出所有相關 ubuntu 鏡像: ? ? ? ??
? ? # docker search ubuntu -f stars=100 ? ?
拉取鏡像:
? ? # docker pull centos
查看本地鏡像: ?
? ? # docker image list
查看鏡像詳情:
? ? # docker image inspect 鏡像id
刪除鏡像:
? ? 刪除一個或多個,多個之間用空格隔開,可以使用鏡像名稱或id
? ? # docker rmi daocloud.io/library/mysql
? ? 強制刪除:--force
? ? 如果鏡像正在被使用中可以使用--force強制刪除 ? ?18.07后不支持強制刪除
? ? # docker rmi docker.io/ubuntu:latest --force
? ? 刪除所有鏡像:
? ? # docker rmi $(docker images -q)
只查看所有鏡像的id:
? ? # docker images -q?
查看鏡像制作的過程:
? ? 相當于dockfile
? ? # docker history daocloud.io/ubuntu
? ? dive docker_image_id/docker_image_name

2.容器管理

創建新容器但不啟動:
# docker create -it daocloud.io/library/centos:5 /bin/bash
創建并運行一個新Docker 容器:
? ? 同一個鏡像可以啟動多個容器,每次執行run子命令都會運行一個全新的容器
? ? # docker run -it --restart=always centos:7 /bin/bash
? ? 如果執行成功,說明CentOS 容器已經被啟動,并且應該已經得到了 bash 提示符。
? ? -i ??
? ? ? ? 捕獲標準輸入輸出
? ? -t ??
? ? ? ? 分配一個終端或控制臺
? ? --restart=always ??
? ? ? ? 容器隨docker engine自啟動,因為在重啟docker的時候默認容器都會被關閉 ??
? ? ? ? 也適用于create選項
? ? --rm
? ? ? ? 默認情況下,每個容器在退出時,它的文件系統也會保存下來,這樣一方面調試會方便些,因為你可以通過查看日志等方式來確定最終狀態。另一方面,也可以保存容器所產生的數據。但是當你僅僅需要短暫的運行一個容器,并且這些數據不需要保存,你可能就希望Docker能在容器結束時自動清理其所產生的數據。這個時候就需要--rm參數了。注意:--rm 和 -d不能共用
若要斷開與容器的連接,并且關閉容器:
? ?容器內部執行如下命令
? ? [root@d33c4e8c51f8 /]#exit
如果只想斷開和容器的連接而不關閉容器:
? ? 快捷鍵:ctrl+p+q
查看容器:
? ? 只查看運行狀態的容器:
? ? #docker ps
? ? #docker ps -a
? ? -a ?查看所有容器
? ? 只查看所有容器id:
? ? # docker ps -a -q
? ? 列出最近一次啟動的容器
? ? # docker ps -l ??
查看容器詳細信息:
inspect ? Return low-level information on a container or image
用于查看容器的配置信息,包含容器名、環境變量、運行命令、主機配置、網絡配置和數據卷配置等。
目標:
查找某一個運行中容器的id,然后使用docker inspect命令查看容器的信息。
提示:
可以使用鏡像id的前面部分,不需要完整的id。
[root@master ~]# docker inspect d95 ? ?//d95是我機器上運行的一個容器ID的前3個字符
[
? ? {
? ? ? ? "Id": "d95a220a498e352cbfbc098c949fc528dbf5a5c911710b108ea3a9b4aa3a4761",
? ? ? ? "Created": "2017-07-08T03:59:16.18225183Z",
? ? ? ? "Path": "bash",
? ? ? ? "Args": [],
? ? ? ? "State": {
? ? ? ? ? ? "Status": "exited",
? ? ? ? ? ? "Running": false,
? ? ? ? ? ? "Paused": false,
? ? ? ? ? ? "Restarting": false,
? ? ? ? ? ? "OOMKilled": false,
? ? ? ? ? ? "Dead": false,
? ? ? ? ? ? "Pid": 0,
容器信息很多,這里只粘貼了一部分
比如:容器里在安裝ip或ifconfig命令之前,查看網卡IP顯示容器IP地址和端口號,如果輸出是空的說明沒有配置IP地址(不同的Docker容器可以通過此IP地址互相訪問)
# docker inspect --format='{{.NetworkSettings.IPAddress}}' ?容器id
列出所有綁定的端口:
# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} ->?
{{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
# docker inspect --format='{{range $p,?
$conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}'?
b220fabf815a
22/tcp -> 20020
找出特殊的端口映射:
比如找出容器里22端口所映射的docker本機的端口:
# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp")?
0).HostPort}}' $INSTANCE_ID
[root@localhost ~]# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/
tcp") 0).HostPort}}' b220fabf815a
20020
http://note.youdao.com/noteshare?id=4ee7884b3d25c16850d78cfdec276add
啟動容器:
# docker start ?name
關閉容器:
# docker stop ?name
# docker kill ? ?name ? ? ?--強制終止容器
殺死所有running狀態的容器
# docker kill $(docker ps ?-q) ?
stop和kill的區別:
? ? docker stop命令給容器中的進程發送SIGTERM信號,默認行為是會導致容器退出,當然,容器內程序可以捕獲該信號并自行處理,例如可以選擇忽略。而docker kill則是給容器的進程發送SIGKILL信號,該信號將會使容器必然退出。?
刪除容器:
? ? # docker rm 容器id或名稱
? ? 要刪除一個運行中的容器,添加 -f 參數
? ? 根據格式刪除所有容器:
? ? # docker rm $(docker ps -qf status=exited) ? ?
重啟容器:
#docker restart name
暫停容器:
pause ? --暫停容器內的所有進程,
? ? 通過docker stats可以觀察到此時的資源使用情況是固定不變的,通過docker logs -f也觀察不到日志的進一步輸出。
恢復容器:
unpause ?--恢復容器內暫停的進程,與pause參數相對應
# docker start infallible_ramanujan ?//這里的名字是狀態里面NAMES列列出的名字,這種方式同樣會讓容器運行在后臺
讓容器運行在后臺:
如果在docker run后面追加-d=true或者-d,那么容器將會運行在后臺模式。此時所有I/O數據只能通過網絡資源或者共享卷組來進行交互。因為容器不再監聽你執行docker run的這個終端命令行窗口。但你可以通過執行
docker attach來重新附著到該容器的回話中。注意,容器運行在后臺模式下,是不能使用--rm選項的
#docker run -d IMAGE[:TAG] 命令
#docker logs container_id ? #打印該容器的輸出
# docker run -it -d --name mytest docker.io/centos:7 /bin/sh -c "while true; do echo hello world; sleep 2; done"
37738fe3d6f9ef26152cb25018df9528a89e7a07355493020e72f147a291cd17
[root@localhost ~]# docker logs mytest
hello world
hello world
docker attach container_id #附加該容器的標準輸出到當前命令行
[root@localhost ~]# docker attach mytest
hello world
hello world
.......
此時,ctrl+d等同于exit命令,按ctrl+p+q可以退出到宿主機,而保持container仍然在運行
rename?
? ? Rename a container
stats ? ??
? ? Display a live stream of container(s) resource usage statistics ? ?
? ? --動態顯示容器的資源消耗情況,包括:CPU、內存、網絡I/O ??
port ? ?
? ? List port mappings or a specific mapping for the CONTAINER
? ? ?--輸出容器端口與宿主機端口的映射情況
? ? # docker port blog
? ? ? ? 80/tcp -> 0.0.0.0:80
? ? ?容器blog的內部端口80映射到宿主機的80端口,這樣可通過宿主機的80端口查看容器blog提供的服務
連接容器: ? ?
方法1.attach
# docker attach 容器id ? //前提是容器創建時必須指定了交互shell
方法2.exec ? ? ?
? ? 通過exec命令可以創建兩種任務:后臺型任務和交互型任務
? ? 交互型任務:
? ? ? ? # docker exec -it ?容器id ?/bin/bash
? ? ? ? root@68656158eb8e:/# ls ? ??
? ? 后臺型任務:
? ? ? ? # docker exec 容器id touch /testfile
監控容器的運行:
可以使用logs、top、events、wait這些子命令
? ? logs:
? ? ? ? 使用logs命令查看守護式容器
? ? ? ? 可以通過使用docker logs命令來查看容器的運行日志,其中--tail選項可以指定查看最后幾條日志,而-t選項則可以對日志條目附加時間戳。使用-f選項可以跟蹤日志的輸出,直到手動停止。
? ? ? ? # docker logs ? ?App_Container ? //不同終端操作
? ? ? ? # docker logs -f App_Container
? ? top:
? ? ? ? 顯示一個運行的容器里面的進程信息
? ? ? ? # docker top birdben/ubuntu:v1
? ? events ? ?
? ? ? ? Get real time events from the server
? ? ? ? 實時輸出Docker服務器端的事件,包括容器的創建,啟動,關閉等。
? ? ? ? # docker start loving_meninsky
? ? ? ? loving_meninsky
? ? ? ? # docker events ?//不同終端操作
? ? ? ? 2017-07-08T16:39:23.177664994+08:00 network connect ?
? ? ? ? df15746d60ffaad2d15db0854a696d6e49fdfcedc7cfd8504a8aac51a43de6d4?
? ? ? ? (container=50a0449d7729f94046baf0fe5a1ce2119742261bb3ce8c3c98f35c80458e3e7a,?
? ? ? ? name=bridge, type=bridge)
? ? ? ? 2017-07-08T16:39:23.356162529+08:00 container start?
? ? ? ? 50a0449d7729f94046baf0fe5a1ce2119742261bb3ce8c3c98f35c80458e3e7a (image=ubuntu,?
? ? ? ? name=loving_meninsky)
? ? wait ? ? ?
? ? ? ? Block until a container stops, then print its exit code ??
? ? ? ? --捕捉容器停止時的退出碼
? ? ? ? 執行此命令后,該命令會"hang"在當前終端,直到容器停止,此時,會打印出容器的退出碼
? ? ? ? # docker wait 01d8aa ?//不同終端操作
? ? ? ? ? ?137
? ? diff
? ? ? ? 查看容器內發生改變的文件,以elated_lovelace容器為例
? ? ? ? root@68656158eb8e:/# touch c.txt
? ? ? ? 用diff查看:
? ? ? ? 包括文件的創建、刪除和文件內容的改變都能看到?
? ? ? ? [root@master ~]# docker diff ?容器名稱
? ? ? ? A /c.txt
? ? ? ? C對應的文件內容的改變,A對應的均是文件或者目錄的創建刪除
? ? ? ? [root@docker ~]# docker diff 7287
? ? ? ? A /a.txt
? ? ? ? C /etc
? ? ? ? C /etc/passwd
? ? ? ? A /run
? ? ? ? A /run/secrets ?
宿主機和容器之間相互COPY文件
? ? cp的用法如下:
? ? Usage: ? ?docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
? ? ? ? ? ? ? ? ? ?docker cp [OPTIONS] LOCALPATH CONTAINER:PATH
? ? 如:容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主機
? ? # ?docker cp mysql:/usr/local/bin/docker-entrypoint.sh ? /root
? ? 修改完畢后,將該文件重新copy回容器
? ? # docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/ ??

?3.容器打包

將容器的文件系統打包成tar文件,也就是把正在運行的容器直接導出為tar包的鏡像文件
export ? ?
? ? Export a container's filesystem as a tar archive
有兩種方式(elated_lovelace為容器名):
第一種:
? ? [root@master ~]# docker export -o elated_lovelace.tar elated_lovelace

第二種:
? ? [root@master ~]# docker export 容器名稱 > 鏡像.tar

導入鏡像歸檔文件到其他宿主機:
import ? ?
? ? Import the contents from a tarball to create a filesystem image
? ? # docker import elated_lovelace.tar ?elated_lovelace:v1 ?

4.?鏡像遷移

保存一臺宿主機上的鏡像為tar文件,然后可以導入到其他的宿主機上:
save ? ? ?
? ? Save an image(s) to a tar archive
? ? 將鏡像打包,與下面的load命令相對應
? ? #docker save -o nginx.tar nginx:tag

load ? ? ?
? ? Load an image from a tar archive or STDIN
? ? 與上面的save命令相對應,將上面sava命令打包的鏡像通過load命令導入
? ? #docker load < nginx.tar
? ??
容器的遷移 ?
docker export b25f3cb2bf1f ?| gzip > mynginx123.tar
zcat mynginx123.tar | docker import ?- mynginx123

5.?鏡像、容器深度操作

# 顯示鏡像摘要
docker images --digests?
# 過濾鏡像
docker images [-f|--filter] "key=value"
支持:
dangling:顯示標記為空的鏡像,值只有true和false
label:這個是根據標簽進行過濾,其中lable的值,是docker在編譯的時候配置的或者在Dockerfile中配置的
before:這個是根據時間來進行過濾,其中before的value表示某個鏡像構建時間之前的鏡像列表
since:跟before正好相反,表示的是在某個鏡像構建之后構建的鏡像
reference:添加正則進行匹配
# 鏡像格式化輸出
docker images --format "{{.ID}}\t{{.Repository}}"
.ID?? ?鏡像ID
.Repository?? ?鏡像倉庫
.Tag 鏡像標簽[版本]
.Digest?? ?鏡像hash值
.CreatedSince 創建鏡像后的時間
.CreatedAt?? ?創建鏡像的時間
.Size 鏡像大小
# 容器格式化輸出
docker ps --format "{{.ID}}\t{{.Command}}"
.ID?? ?容器ID
.Image?? ?鏡像ID
.Command?? ?執行的命令
.CreatedAt?? ?容器創建時間
.RunningFor?? ?運行時長
.Ports?? ?暴露的端口
.Status?? ?容器狀態
.Names?? ?容器名稱
.Label?? ?分配給容器的所有標簽
.Mounts?? ?容器掛載的卷
.Networks?? ?容器所用的網絡名稱

6.代碼演示?

#!/bin/bashsave(){if [ ! -d "./images" ]; thenmkdir imagesficd imagesdocker images --format "{{.ID}} {{.Repository}}:{{.Tag}} {{.Size}}" > images_pull.txtwhile read linedoimage_id=`echo $line | awk '{print $1}'`image_repository=`echo $line | awk '{print $2}'`image_size=`echo $line | awk '{print $3}'`docker save -o $image_id.tar $image_repository && \echo "Image $image_repository saved, size $image_size"done < images_pull.txt
}load(){cd imageswhile read linedoimage_id=`echo $line | awk '{print $1}'`image_repository=`echo $line | awk '{print $2}'`docker load -i $image_id.tar && \echo "Image $image_repository loaded"done < images_pull.txt
}
if [ -z "$1" ]; thenecho "Usage: image_operation.sh [save|load]"
fieval $1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211033.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211033.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211033.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為 setTimeout 或 setInterval 提供一個字符串作為第一個參數(js的問題)

首先&#xff0c;需要知道的是為 setTimeout 或 setInterval 提供一個字符串作為第一個參數&#xff0c;這本身并不是一個錯誤。它是完全合法的JavaScript代碼。這里的問題更多的是性能和效率的問題。很少有人解釋的是&#xff0c;如果你把字符串作為setTimeout或setInterval的…

46.0/基本的 HTML 標簽(詳細版)

目錄 46.1 標題 46.2 段落 Paragraph, 46.3 換行 46.4 HTML 注釋 46.5 空格 46.6 水平線 46.7 控制網頁中文字的標記 46.8 居中標記 46.9 預格式化文本 46.10 網頁背景 46.1 標題 標記解釋 標題使用 <h1> 至 <h6> 標簽進行定義。 <h1> 定…

uniapp如何制作一個收縮通訊錄(布局篇)

html&#xff1a; <view class"search"><view class"search_padding"><u-search change"search" placeholder"請輸入成員名稱" v-model"keyword"></u-search></view></view> <view…

C語言有哪些預處理操作?

C語言的預處理是在編譯之前對源代碼進行處理的階段&#xff0c;它主要由預處理器完成。預處理器是一個獨立的程序&#xff0c;它負責對源代碼進行一些文本替換和處理&#xff0c;生成經過預處理的代碼。以下是C語言預處理的一些重要特性&#xff1a; 1&#xff0c;頭文件包含 #…

Ansible中執行流控制

1.ansible中的迭代循環 創建目錄和文件 vim createfile.yaml - name: create file playbook hosts: all tasks: - name: create file file: path: "/mnt/{{item[name]}}" state: …

Unity 自定義窗口

放在Editor文件夾下&#xff1b; #if UNITY_EDITORusing System; using UnityEditor; using UnityEngine;namespace EditorCustumTool {/// <summary>/// 自定義窗口/// </summary>public class CustomWindow : EditorWindow{public enum FlagType{Flag1 101,Fl…

前端知識筆記(三十六)———HTTP 緩存機制

一、強制緩存 只要瀏覽器判斷緩存沒有過期&#xff0c;則直接使用瀏覽器的本地緩存而無需再請求服務器。 強制緩存是利用下面這兩個 HTTP 響應頭部&#xff08;Response Header&#xff09;字段實現的&#xff0c;它們都用來表示資源在客戶端緩存的有效期&#xff1a; Cache-…

java中對象和Map互相轉換的幾種方式

在Java中&#xff0c;將對象和Map相互轉換是常見的操作&#xff0c;可以通過不同的方式實現這種轉換。以下是幾種常見的方法以及示例說明&#xff1a; 1. 使用Hutool工具類 Hutool是一個優秀的Java工具包&#xff0c;提供了豐富的工具方法&#xff0c;其中就包括對象和Map之間…

【基于ESP32無線藍牙上傳電腦Excel透傳數據】

【基于ESP32無線藍牙上傳電腦透傳數據】 1. 引言2. 環境搭建2.1 硬件準備:2.2 軟件準備:2.3. 配置Excel端口接收功能3. 測試代碼4. 連接電腦和 ESP324.1 燒錄程序4.2 啟動藍牙服務4.3 測試數據透傳5. 總結1. 引言 隨著物聯網技術的發展,越來越多的設備開始支持無線通信,其…

fl studio2024官方體驗版如何破解?

fl studio2024全稱Fruity Loops Studio2024&#xff0c;這款軟件也被人們親切的稱之為水果&#xff0c;它是一款功能強大的音樂創作編輯軟件&#xff0c;擁有全功能的錄音室&#xff0c;大混音盤以及先進的音樂制作工具&#xff0c;用戶通過使用該軟件&#xff0c;就可以輕松制…

輕量封裝WebGPU渲染系統示例<43>- 材質組裝流水線(MaterialPipeline)之燈光和陰影(源碼)

目標: 數據化&#xff0c;模塊化&#xff0c;自動化 備注: 從這個節點開始整體設計往系統規范的方向靠攏。之前的都算作是若干準備。所以會和之前的版本實現有些差異。 當前示例源碼github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sa…

redis過期提醒

redis過期提醒 有一次看redis的配置文件發現一個notify-keyspace-events配置&#xff0c;注釋里邊長篇大論的&#xff0c;那我得看看這是干啥的&#xff0c;看完注釋內容&#xff0c;發現不得了了&#xff0c;redis竟然還有過期提醒的功能 接下來得大家解釋一下&#xff1a; 首…

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2020)

文章目錄 -Abstract1. Introductiondiss former methodour method 2. Related Work3. Compound Model Scaling3.1. 問題公式化3.2. Scaling Dimensions3.3. Compound Scaling 4. EfficientNet Architecture5. Experiments6. Discussion7. Conclusion 原文鏈接 源代碼 - 本文中…

LeNet

概念 代碼 model import torch.nn as nn import torch.nn.functional as Fclass LeNet(nn.Module):def __init__(self):super(LeNet, self).__init__() # super()繼承父類的構造函數self.conv1 nn.Conv2d(3, 16, 5)self.pool1 nn.MaxPool2d(2, 2)self.conv2 nn.Conv2d(16…

Bash腳本處理ogg、flac格式到mp3格式的批量轉換

現在下載的許多音樂文件是flac和ogg格式的&#xff0c;QQ音樂上下載的就是這樣的&#xff0c;這些文件尺寸比較大&#xff0c;在某些場合使用不便&#xff0c;比如在車機上播放還是mp3格式合適&#xff0c;音質這些在車機上播放足夠了&#xff0c;要求不高。比如本人就喜歡下載…

軟件接口安全設計規范

《軟件項目接口安全設計規范》 1.token授權機制 2.https傳輸加密 3.接口調用防濫用 4.日志審計里監控 5.開發測試環境隔離&#xff0c;脫敏處理 6.數據庫運維監控審計

卷王開啟驗證碼后無法登陸問題解決

問題描述 使用 docker 部署&#xff0c;后臺設置開啟驗證&#xff0c;重啟服務器之后&#xff0c;docker重啟&#xff0c;再次訪問系統&#xff0c;驗證碼獲取失敗&#xff0c;導致無法進行驗證&#xff0c;也就無法登陸系統。 如果不了解卷王的&#xff0c;可以去官網看下。…

飛天使-linux操作的一些技巧與知識點3

http工作原理 http1.0 協議 使用的是短連接&#xff0c;建立一次tcp連接&#xff0c;發起一次http的請求&#xff0c;結束&#xff0c;tcp斷開 http1.1 協議使用的是長連接&#xff0c;建立一次tcp的連接&#xff0c;發起多次http的請求&#xff0c;結束&#xff0c;tcp斷開ngi…

ky10 server x86 設置網卡開機自啟

輸入命令查看網卡名稱 ip a 輸入命令編輯網卡信息 vi /etc/sysconfig/network-scripts/*33改成yes 按ESC鍵&#xff0c;輸入:wq&#xff0c;保存

Aloha 機械臂的學習記錄2——AWE:AWE + ACT

繼續下一個階段&#xff1a; Train policy python act/imitate_episodes.py \ --task_name [TASK] \ --ckpt_dir data/outputs/act_ckpt/[TASK]_waypoint \ --policy_class ACT --kl_weight 10 --chunk_size 50 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 \ --n…