日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker -v 文件夹下没有数据_详细!快速入门指南!Docker

發(fā)布時(shí)間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker -v 文件夹下没有数据_详细!快速入门指南!Docker 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什 么 是 容 器?

容器只是實(shí)現(xiàn)隔離的一種方法。與虛擬機(jī)不同,它們不是通過模擬硬件來實(shí)現(xiàn)隔離,而是通過使用現(xiàn)有的Linux內(nèi)核功能來實(shí)現(xiàn)隔離。在典型的Unix/Linux操作系統(tǒng)中,所有進(jìn)程都共享相同的用戶空間,但是隨著Linux 2.6+中新功能的引入,您可以創(chuàng)建一個(gè)進(jìn)程,該進(jìn)程具有自己特定的一組隔離上下文的進(jìn)程,如文件樹、線程等。這些功能與其他內(nèi)核技術(shù)結(jié)合在一起是容器的神奇之處!

◆ ◆ ◆ ◆ ◆

在本文中,我將介紹基本的Docker命令和概念。讀完后,您將能夠采用一些Docker功能來加速和簡(jiǎn)化您的日常工作流程。

安裝Docker

在OS X/Windows中,使用安裝向?qū)О惭bDocker是一項(xiàng)簡(jiǎn)單的任務(wù)。您可以在Docker社區(qū)頁面上找到操作系統(tǒng)的安裝程序。在Linux上,Docker通常在分發(fā)包管理器中可用。

在Fedora中安裝Docker :

sudo dnf install docker

要開始這個(gè)過程:

sudo systemctl start docker

要使Docker進(jìn)程啟動(dòng)和啟動(dòng)時(shí)間:

sudo systemctl enable docker

在使用Systemd的其他Linux發(fā)行版中,這些步驟應(yīng)該類似。

入門

Hello World

完成安裝后,我們應(yīng)該嘗試一個(gè)Hello World!

#sudo is only for Linuxsudo docker run --name hello -it busybox echo "Hello World!" # Hello World!

只有在運(yùn)行某些Linux發(fā)行版時(shí)才需要使用sudo,但請(qǐng)記住,Docker需要管理員權(quán)限創(chuàng)建容器。在OSX和Windows編寫本文時(shí),本文使用了一些基于Linux的虛擬機(jī),因此Docker命令可以在這些系統(tǒng)中沒有特權(quán)用戶的情況下運(yùn)行。

如何運(yùn)行

sudo docker run

run選項(xiàng)創(chuàng)建并運(yùn)行一個(gè)容器,其中一個(gè)屬性是docker將容器的生命綁定到正在運(yùn)行的進(jìn)程(在本例中是linux命令echo),這意味著當(dāng)進(jìn)程完成時(shí),容器將終止。

  • name:我們?cè)O(shè)置容器的名稱,如果您不選擇任何內(nèi)容,Docker將隨機(jī)選擇一個(gè)。
  • it:這意味著交互,它將我們的終端連接到容器虛擬tty的輸出,允許與正在運(yùn)行的進(jìn)程交互。
  • busybox:這是創(chuàng)建容器的基本映像,將其視為zip文件,其中包含運(yùn)行所需應(yīng)用程序所需的文件和文件夾。在Docker Hub中有一個(gè)完整的社區(qū)基礎(chǔ)圖像,我使用BusyBox,因?yàn)樗浅]p,只有715 kb的壓縮空間。
  • echo:正如我們前面提到的,echo是我們?cè)噲D執(zhí)行的命令,它包含在busybox映像中。

如果要檢查busybox中可用的命令,請(qǐng)執(zhí)行以下操作:

sudo docker run -it busybox ls /bin/

列出鏡像

當(dāng)您第一次執(zhí)行docker命令時(shí),您可以使用以下命令檢查本地鏡像:

sudo docker images

在守護(hù)進(jìn)程模式下運(yùn)行

在某些情況下,我們不希望直接與某些應(yīng)用程序(如服務(wù)器)交互,在這種情況下,我們希望生成進(jìn)程并返回我們的終端繼續(xù)執(zhí)行一些工作,Docker為我們提供了一種在守護(hù)進(jìn)程模式下執(zhí)行進(jìn)程的方法像這樣的-d參數(shù):

sudo docker run - d - name snooze busybox sleep 15

此過程將在后臺(tái)運(yùn)行15秒,然后退出。

列出后臺(tái)運(yùn)行容器

容器在后臺(tái)運(yùn)行后,您可以使用ps檢查其狀態(tài):

sudo docker ps

殺死運(yùn)行容器

停止容器很簡(jiǎn)單:

sudo docker stop [name of your container]#examplesudo docker stop snooze

此命令將停止正在運(yùn)行的容器,但Docker服務(wù)將保留您創(chuàng)建的容器,包括其關(guān)聯(lián)的命令緩存在磁盤中。如果需要重新啟動(dòng),只需執(zhí)行:

sudo docker start snooze

如果想要更改配置并重新使用容器名稱,則需要停止并刪除容器,假設(shè)我們要更改休眠容器,使其休眠10秒而不是15秒:

# stop & cleansudo docker stop snoozesudo docker rm snooze# re-createsudo docker run -d --name snooze busybox sleep 10

安裝

-v參數(shù)將使我們能夠掛載/從一個(gè)文件夾映射主機(jī)(我們的電腦)到容器內(nèi)的文件夾中。

我們來創(chuàng)建一個(gè)文件:

echo 'Hello World' > hello

現(xiàn)在我們要使用busybox中提供的隔離文本編輯器打開文件:

# Opening the file with our contained VIMsudo docker run -it busybox vi hello

沒有任何反應(yīng),這是因?yàn)槲覀冋{(diào)用的vi進(jìn)程是隔離的,無法訪問包含區(qū)域之外的文件。要解決這個(gè)問題,我們需要掛載文件夾,以便我們的編輯器能夠找到該文件。

#the :z in /app:z -> is for SELinux, non-Linux can ignore this.sudo docker run -it -v "$(pwd)":/app:z busybox vi app/text

這會(huì)將實(shí)際文件夾$(pwd)裝入容器中的文件夾/應(yīng)用程序。如果文件夾中不存在,那么將創(chuàng)建它,然后使用vi并傳遞掛載文件夾vi app/hello的文件位置。

一些觀察結(jié)果:

  • 該v將覆蓋容器中以前的任何文件夾。如果存在,它將替換為提供的文件夾。
  • 這個(gè)命令實(shí)際上是掛載文件夾,所以一旦容器被殺死,容器對(duì)這個(gè)文件夾所做的每一個(gè)更改都將被持久化,如果您希望數(shù)據(jù)庫在容器生命周期之外持久化其數(shù)據(jù),這是一個(gè)好主意。
  • 容器將可以訪問您的系統(tǒng)資源(共享文件夾),因此請(qǐng)小心。

聯(lián)網(wǎng)

-p允許我們公開一個(gè)隔離端口并將其傳遞給特定的主機(jī)端口。

為了說明網(wǎng)絡(luò)如何與容器一起工作,首先讓我們開始編寫一個(gè)簡(jiǎn)單的Javascript腳本來啟動(dòng)服務(wù)器。我們將在本地機(jī)器上執(zhí)行此操作,所以讓我們編寫一些代碼。

require('http') .createServer((req, res) => { res.end('Hello World!') }).listen(8080)

我們將調(diào)用這個(gè)文件index.js,它基本上創(chuàng)建了一個(gè)在端口8080中等待連接的服務(wù)器。當(dāng)有人連接時(shí),它會(huì)發(fā)送一個(gè)Hello World!

下一步是在容器中運(yùn)行腳本。我們可以通過編寫以下命令來完成此操作:

sudo docker run - it - v “$(pwd)”:/ app:z - name myserver mhart / alpine - node node app / index。JS

這里的新東西是mhart / alpine-node的基本鏡像,它將拉出一個(gè)Node.JS容器,然后將像我們之前那樣使用-v掛載文件夾,然后執(zhí)行隔離節(jié)點(diǎn)app / index.js進(jìn)程。

讓我們看看我們的服務(wù)器是否正常工作:

sudo docker exec -it myserver wget -qO- localhost:8080# Hello World%

這個(gè)命令測(cè)試我們的服務(wù)器在容器中工作,我們應(yīng)該返回hello world%。現(xiàn)在,讓我們嘗試從主機(jī)連接,打開一個(gè)新終端,然后寫:Hello World%

curl http://localhost:8080#curl: (7) Failed to connect to localhost port 8080: Connection refused

我們無法連接,因?yàn)槿萜骶W(wǎng)絡(luò)是孤立的; 我們需要拉取之前的端口:

# stopping our containersudo docker stop myserver sudo docker rm myserversudo docker run -it -v "$(pwd)":/app:z -p 8080:8080 --name myserver mhart/alpine-node node app/index.js

現(xiàn)在嘗試在瀏覽器中打開http:// locahost:8080,你應(yīng)該看到一個(gè) hello world!

恭喜!你已經(jīng)編寫了一個(gè)很好的NodeJS應(yīng)用程序。最大的優(yōu)勢(shì)之一是您可以在不安裝NodeJS的情況下執(zhí)行此操作,并且可以使用此功能來安裝其他類型的軟件,如數(shù)據(jù)庫,其他微服務(wù)等。

一些快速提示

在我的日常工作中,我總是需要與MongoDB和Redis集成,但是安裝它們通常是一個(gè)痛苦的過程,我通過在.zshrc中創(chuàng)建一些bash腳本來解決這個(gè)問題。

function new_mongo { docker run -d --name mongodb -p 27017:27017 mongo}# the : here means image tag, usually if the image is done correctly # like in this case tag version match the Redis versionfunction new_redis { docker run -d --name redis -p 6379:6379 redis:3.2}function stop_mongo { docker stop mongodb docker rm mongodb}function stop_redis { docker stop redis docker rm redis}new_mongo # it will spin up a new mongodb instance. new_redis # it will spin up a new redis instance. # to stop this containers stop_mongostop_redis

現(xiàn)在,您將能夠按需配置部署本地MongoDB或Redis實(shí)例,并且一個(gè)優(yōu)點(diǎn)(至少在我看來)是這些實(shí)例中的數(shù)據(jù)是短暫的,這意味著當(dāng)您終止容器時(shí)它將重置數(shù)據(jù)庫也是如此,釋放占用的空間。

linux安全性

如果您在Fedora中使用-v參數(shù)執(zhí)行掛載文件夾,可能會(huì)收到此錯(cuò)誤:

sudo docker run -it -v "$(pwd)":/app busybox ls app/text#ls: can't open '.': Permission denied

這是因?yàn)镾ELinux默認(rèn)策略將保護(hù)主機(jī)中的任何讀/寫,以防攻擊者離開容器,SELinux將通過在內(nèi)核級(jí)強(qiáng)制執(zhí)行安全規(guī)則來阻止您。

要在SELinux感知機(jī)器中安裝文件夾,您需要傳遞z參數(shù),這將更改SELinux上下文并允許容器執(zhí)行安裝。

# "$(pwd)" will get the actual directory, is equivalent to do pwddocker run -it -v "$(pwd)":/app:z busybox /bin/sh

另一種方法(但不建議這樣做)是暫時(shí)禁用此保護(hù):

su -c "setenforce 0"

完成后,您可以通過以下操作啟用它:

su - c “setenforce 1”

總結(jié)

以上是生活随笔為你收集整理的docker -v 文件夹下没有数据_详细!快速入门指南!Docker的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。