當前位置:首頁 » 編程語言 » c語言程序容器docker
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言程序容器docker

發布時間: 2023-03-28 13:35:24

㈠ DOCKER 總結

Docker 是一個開源的 應用容器引擎 ,讓 開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux或Windows 機器上,也可以實現虛擬化 。容器是完全使用沙箱機制,相互之間不會有任何介面。

由於本地開發好的程序往往都需要部署到伺服器上進行運行,這就導致了程序需要運行在不同的環境上,這通常是一個令人頭痛的事情。在過去,開發團隊需要清楚的告訴運維部署團隊,其所使用的蠢核全部配置文件+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。

於是乎, 虛擬化 技術應運而生。開發團隊將開發好的程序在虛擬機上運行,這樣就能解決運維的問題。但是由於虛擬機技術過重的特性導致了其 資源佔用多、冗餘步驟多以及啟動慢的缺陷 。而這個時候 一種新的虛擬化技術搭配上容器化的思想 的產品便出現了,而它就是Docker。

下圖是虛擬機技術和容器化技術架構的對比。我們可以得出以下總結:

[圖片上傳失敗...(image-efadd2-1643314980201)]
]( https://upload-images.jianshu.io/upload_images/646931-4b1431b77887632f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )

於是乎相沒襲比於虛擬機技術,容器化技術具有以下 優勢:

相關網站

如下圖所示,Docker使用客戶端-伺服器(C/S)架構模式,使用遠程API來管理和創建Docker容器。伺服器端分為Docker daemon, Image和Container三個部分。此外還有Docker Registry。

下面首先來介紹一下Docker中的主要概念

Docker的運行原理如下:客戶端可以將docker命令發送到伺服器端的Docker daemon上,再由Docker damon根據指令創建、選擇或者從Docker倉庫中拉取(pull)鏡像。接著客戶端可以通過鏡像創建容器。當我們需要使用程序時,運行相應的容器即可。

小結

需要正確的理解倉儲/鏡像/容器這幾個概念 :

在外面使用容器的時候,我們不希望容器中的數據在容器被刪除後也一並刪除了,這時候我們就可以 通過使用容器數據卷,將數據儲存在本地並用Docker將其掛載到容器中,這樣我們即使刪除了容器,數據也依舊存在伺服器中,也就實現了數據持久化。

特點

容器數據卷掛載命令(-v)

Dockerfile 掛載容器數據卷

我們除了可以從倉庫中拉取鏡像以外,我們也可以 自己創建鏡像 ,這就要用到Docerfile。

dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本

構建步驟:

基礎知識:

流程:

說明帶察掘:

在實際場景中,我們會遇到 多個Container之間通訊 的問題。而Docker網路就是用於解決此問題的技術。docker會給每個容器都分配一個ip,且容器和容器之間是可以互相訪問的。

Docker網路原理

每一個安裝了Docker的linux主機都有一個docker0的虛擬網卡。這是個橋接網卡,使用了 veth-pair 技術 。Docker使用Linux橋接,在宿主機虛擬一個Docker容器網橋(docker0),Docker啟動一個容器時會根據 Docker網橋的網段分配給容器一個IP地址,稱為Container-IP,同時Docker網橋是每個容器的默認網 關。因為在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠通過容器的Container-IP直接通信。

Docker容器網路就很好的利用了Linux虛擬網路技術,在本地主機和容器內分別創建一個虛擬介面,並 讓他們彼此聯通(這樣一對介面叫veth pair);

Docker中的網路介面默認都是虛擬的介面。虛擬介面的優勢就是轉發效率極高(因為Linux是在內核中 進行數據的復制來實現虛擬介面之間的數據轉發,無需通過外部的網路設備交換),對於本地系統和容 器系統來說,虛擬介面跟一個正常的乙太網卡相比並沒有區別,只是他的速度快很多。

[圖片上傳中...(image-41d42a-1642627027452-2)]

Docker Compose是一個用於定義並運行多容器應用的工具

Docker Compose的 步驟如下

NOTE: Compose :重要的概念。

docker-compose.yml編寫

Note: docker-compose會自動為多容器之間創建網路,保證通訊。

Docker Swarm 是Docker 的集群管理工具。 它將 Docker 主機池轉變為單個虛擬 Docker 主機。 Docker Swarm 提供了標準的 Docker API,所有任何已經與 Docker 守護程序通信的工具都可以使用 Swarm 輕松地擴展到多個主機。

Docker 是一個開源的 應用容器引擎 ,它的出現大大簡化了運維的難度,提高了運維效率。過去我們需要在伺服器上安裝程序所需要的所有依賴,而如今我們只需要編寫好docker-compose和Dockefile的腳本,就可以使程序一鍵跑通。在企業級的應用中,我們必然會驚顫使用到Docker和容器化技術。

狂神說

㈡ 10. Docker 安裝與配置

Docker 是一個開源的應用容器引擎,基於LXC(Linux Container)內核虛擬化技術實現,提供一系列更強的功能,比如鏡像、 Dockerfile等;Docker理念是將應用及依賴包打包到一個可移植的容器中,可發布到任意Linux發行版Docker引擎上。使用沙箱機制運行高陵罩程序, 程序之間相互隔離;

容器是在linux上本機運行,並與其他容器共享主機的內核,它運行的一個獨立的進程,不佔用其他任何可執行文戚鬧件的內存,非常輕量、高效、快速。

虛擬機運行的是一個完成的操作系統,通過虛擬機管理程序對主機資源進行虛擬訪問,相比之下需要的資源更多。

參考: https://www.cnblogs.com/codingbit/p/install-docker-in-ubuntu.html

Linux版本CentOS7

使用加速器可以提升獲取Docker官方鏡像的速度,下面使用 阿里雲鏡像 進行加速。
通過修改daemon配置文件 /etc/docker/daemon.json 來使用加速器

Docker 守護進程綁定在 Unix socket 而不是 TCP 埠。默認情況下 Unix socket 歸屬於 root 用戶,其他用戶只能通過 sudo 命令訪問。所以 Docker 守護進程總是以 root 用戶來運行。

如果你不希望每次運行 docker 命令時在前面加上 sudo,你可以創建一個 docker 用戶組並把用戶加進去。當 Docker 守護進程啟動時,會創建一個 Unix socket 供 docker 用戶組成員訪問

創建 docker 用戶組並添加你的用戶

https://hub.docker.com/
什麼是 DockerHub 以及為什麼它很重要?DockerHub 是一個由 Docker 公司運行和管理的基於雲的存儲庫。它是一個在線存儲庫,Docker 鏡像可以由其他用戶發布和使用。
有兩種庫:公共存儲庫和私有存儲庫 。如果你是一家公司,你可以在你自己的組織內擁有一個私有存儲庫,而公共鏡像可以被任何人使用。

鏡像層和容器層

Docker 服務端是Docker 所有後台服務的統稱 。其中dockerd 是一個非常重要的後台管理進程,它負責響應汪伏和處理來自Docker 客戶端的請求,然後將客戶端的請求轉化為Docker 的具體操作。

例如:鏡像、容器、網路和掛載卷等具體對象的操作和管理。

Docker 從誕生到現在,服務端經歷了多次架構重構。起初,服務端的組件是全部集成在docker 二進制里。但是從 1.11 版本開始, dockerd 已經成了獨立的二進制,此時的容器也不是直接由dockerd 來啟動了,而是集成了containerd、runC 等多個組件。

雖然 Docker 的架構在不停重構,但是各個模塊的基本功能和定位並沒有變化。它和一般的 C/S 架構系統一樣,Docker 服務端模塊負責和 Docker 客戶端交互,並管理Docker 的容器、鏡像、網路等資源。

Docker 有兩個至關重要的組件: runC和containerd。
runC 是Docker 官方按照OCI 容器運行時標準的一個實現。通俗地講,runC 是一個用來運行容器的輕量級工具,是真正用來運行容器的。

containerd 是Docker 服務端的一個核心組件,它是從dockerd 中剝離出來的 ,它的誕生完全遵循OCI 標准,是容器標准化後的產物。containerd通過containerd-shim 啟動並管理runC,可以說containerd真正管理了容器的生命周期。

1. 容器中長期運行 程序
有兩種方式:

2. 容器 開啟和停止 程序
有兩種方式

3. 進入容器
有2種方法

想要web部署在互聯網上 或者 在Web上訪問 應用;

個人電腦處於 私網 中; IP地址處於 IPV4 和 IPV6

安裝appium

排錯,困難

https://hub.docker.com/r/appium/appium

測試adb

改變TCPIP連接方式

查看appium運行日誌
容器埠號為 4723

開啟nginx,就可以在web訪問 192.168.0.100;

Dockerfile其實可以看做一個命令集 。每行均為一條命令。每行的第一個單詞,就是命令command。後面的字元串是該命令所要接收的參數。比如ENTRYPOINT /bin/bash。ENTRYPOINT命令的作用就是將後面的參數設置為鏡像的entrypoint。至於現有命令的含義,這里不再詳述。DockOne上有很多的介紹。

FROM 指令用於指定其後構建新鏡像所使用的基礎鏡像。FROM 指令必是 Dockerfile 文件中的首條命令,啟動構建流程後,Docker 將會基於該鏡像構建新鏡像,FROM 後的命令也會基於這個基礎鏡像。

在鏡像的構建過程中執行特定的命令,並生成一個中間鏡像。格式:

最多127層,不是寫shell ;