docker latest版本怎么設(shè)置 jellyfin服務(wù)器怎么設(shè)置?
jellyfin服務(wù)器怎么設(shè)置?jellyfin服務(wù)器設(shè)置方法如下:1首先進(jìn)入到docker里面,鏡像管理,鏡像倉(cāng)庫(kù)搜索鏡像-Jellyfin點(diǎn)擊下載。2安裝程序選擇版本,默認(rèn)選擇latest就好。3
jellyfin服務(wù)器怎么設(shè)置?
jellyfin服務(wù)器設(shè)置方法如下:
1首先進(jìn)入到docker里面,鏡像管理,鏡像倉(cāng)庫(kù)搜索鏡像-Jellyfin點(diǎn)擊下載。
2安裝程序選擇版本,默認(rèn)選擇latest就好。
3拉取程序數(shù)據(jù),可以選擇后臺(tái)下載, 安裝有一段時(shí)間,等待以下提示 安裝完成。
4這個(gè)時(shí)候可以到 容器管理 添加容器。
如何用Docker成為更高效的數(shù)據(jù)科學(xué)家?
使用 Docker 容器來(lái)開(kāi)發(fā)機(jī)器學(xué)習(xí)模型的好處有很多。近日,GitHub 的資深機(jī)器學(xué)習(xí)科學(xué)家 Hamel Husain 在 Towards Data Science 上發(fā)表了一篇入門級(jí)的 Docker 容器教程,文章從基本的概念談起,清楚明白地介紹了 Docker 容器的一些基本的操作和注意事項(xiàng)。機(jī)器之心對(duì)本文進(jìn)行了編譯介紹。本文所涉及的所有相關(guān)代碼請(qǐng)?jiān)L問(wèn):_Tutorial
過(guò)去五年來(lái),Docker 容器已然成了一個(gè)熱門詞匯,似乎我的所有軟件工程師朋友都在使用它們來(lái)開(kāi)發(fā)應(yīng)用。我想搞清楚這種技術(shù)可以如何讓我更有效率,但我發(fā)現(xiàn)我在網(wǎng)上找到的教程要么過(guò)于注重細(xì)節(jié)(解釋了一些我作為數(shù)據(jù)科學(xué)家絕不會(huì)使用的功能),要么就過(guò)于淺顯(沒(méi)有足夠的信息幫助我理解如何快速有效地使用 Docker)。
所以我寫(xiě)了這篇快速入門,這樣你不必自己去網(wǎng)上篩選信息就能學(xué)習(xí)到快速上手 Docker 所需要的一切。
Docker 是什么?
你可以把 Docker 看作是輕量級(jí)的虛擬機(jī)——包含你運(yùn)行應(yīng)用所需要的一切。Docker 容器可以獲取你的系統(tǒng)的狀態(tài)的快照,這樣其他人就可以使用這個(gè)快照快速重建你的計(jì)算環(huán)境。對(duì)于本教程而言,這就是你需要了解的一切。更多詳細(xì)介紹可參閱:
為什么要使用 Docker?
1.重現(xiàn)性:作為專業(yè)的數(shù)據(jù)科學(xué)家,讓你的結(jié)果能夠重現(xiàn)是非常重要的。重現(xiàn)性不僅有助于同行評(píng)議,而且可以確保你創(chuàng)建的模型、應(yīng)用或分析可以無(wú)障礙地運(yùn)行,這能讓你交付的成果更穩(wěn)健,更能經(jīng)受時(shí)間的考驗(yàn)。舉個(gè)例子,假如你用 Python 創(chuàng)建了一個(gè)模型,只是運(yùn)行 pip freeze 并將結(jié)果得到的 requirements.txt 文件發(fā)送給你的同事是不夠的,因?yàn)槠渲兄话囟ㄓ?Python 的依賴條件——而實(shí)際上的依賴條件不只有 Python,還有操作系統(tǒng)、編譯器、驅(qū)動(dòng)程序、配置文件以及你的代碼成功運(yùn)行所需的其它數(shù)據(jù)。就算你只分享 Python 依賴條件也能成功,將所有東西都封裝到一個(gè) Docker 容器中還是能減輕其他人重建你的環(huán)境的負(fù)擔(dān),并讓他們能更輕松地訪問(wèn)你的成果。
2.計(jì)算環(huán)境的可移植性:作為一位數(shù)據(jù)科學(xué)家,尤其是機(jī)器學(xué)習(xí)領(lǐng)域內(nèi)的數(shù)據(jù)科學(xué)家,快速改變你的計(jì)算環(huán)境的能力能夠極大地影響你的生產(chǎn)力。數(shù)據(jù)科學(xué)的開(kāi)始工作常常是原型設(shè)計(jì)、探索和研究——這些工作并不一定立即就需要特定的計(jì)算資源。這個(gè)工作往往是在筆記本電腦或個(gè)人計(jì)算機(jī)上完成的。但是在后面某個(gè)時(shí)候,你往往會(huì)需要不同的計(jì)算資源來(lái)顯著加速你的工作流程——比如使用更多 CPU 或強(qiáng)大的 GPU 來(lái)執(zhí)行深度學(xué)習(xí)等任務(wù)。我看到很多數(shù)據(jù)科學(xué)家由于感受到了在遠(yuǎn)程機(jī)器上重建他們的本地環(huán)境的困難,就將自己局限在了本地計(jì)算環(huán)境內(nèi)。而 Docker 能讓你的環(huán)境(你的所有庫(kù)和文件等等)的移植非常簡(jiǎn)單。在 Kaggle 競(jìng)賽中,快速移植計(jì)算環(huán)境也是一個(gè)巨大的競(jìng)爭(zhēng)優(yōu)勢(shì),因?yàn)槟憧梢猿杀靖咝У乩?AWS 的寶貴計(jì)算資源。最后,創(chuàng)建 Docker 文件讓你能移植很多你喜歡的本地環(huán)境配置——比如 bash 別名或 vim 插件。
3.強(qiáng)化你的工程能力:熟練使用 Docker 讓你能將模型或分析部署成應(yīng)用(比如用作提供預(yù)測(cè)的 REST API),從而讓其他人也能使用你的成果。此外,你在數(shù)據(jù)科學(xué)工作流程中可能需要與存在于 Docker 容器中的其它應(yīng)用進(jìn)行交互,比如數(shù)據(jù)庫(kù)。
Docker 術(shù)語(yǔ)
在我們繼續(xù)深入之前,熟悉一下 Docker 的術(shù)語(yǔ)會(huì)很有幫助:
·鏡像(image):是你想要?jiǎng)?chuàng)建的東西的藍(lán)圖。比如:Ubuntu TensorFlow,帶有英偉達(dá)驅(qū)動(dòng)程序和一個(gè)運(yùn)行的 Jupyter 服務(wù)器。
·容器(container):是你實(shí)現(xiàn)的運(yùn)行的鏡像的實(shí)例化。你可以運(yùn)行同一個(gè)鏡像的多個(gè)副本。分清鏡像和容器之間的差異非常重要,因?yàn)檫@是新入門者常?;煜膬蓚€(gè)概念。如果你不清楚鏡像和容器的差別,停下來(lái)再讀一次。
·Dockerfile:用于創(chuàng)建鏡像的配方。Dockerfile 包含特殊的 Docker 語(yǔ)法。官方文檔說(shuō):Dockerfile 是一個(gè)文本文檔,其中包含了用戶可以在命令行調(diào)用的用來(lái)組裝成鏡像的所有命令。
·commit:和 git 類似,Docker 容器提供了版本控制。通過(guò) commit 發(fā)生的改變,你在任何時(shí)間都可以將你的 Docker 容器的狀態(tài)保存為一個(gè)新鏡像。
·DockerHub/Image Registry:人們可以發(fā)布公開(kāi)(或私人)Docker 鏡像的地方,用于促進(jìn)合作與共享。
·層(layer):對(duì)已有鏡像的修改,由 Dockerfile 中的一個(gè)指令表示。層按次序應(yīng)用到基礎(chǔ)鏡像上,以創(chuàng)建出最終的鏡像。
本文將使用這些術(shù)語(yǔ),如果你在閱讀時(shí)忘記了,一定要回來(lái)查看!這些術(shù)語(yǔ)很容易混淆,尤其是在鏡像和容器之間——所以你在閱讀時(shí)要保持警惕!
安裝 Docker
你可以免費(fèi)下載安裝 Docker 社區(qū)版(Docker Community Edition),地址:
創(chuàng)建你的第一個(gè) Docker 鏡像
在創(chuàng)建 Docker 容器之前,創(chuàng)建一個(gè)將用于定義鏡像的 Dockerfile 會(huì)很有用。我們先慢慢解讀一下下面的 Dockerfile。你也可以在與本教程關(guān)聯(lián)的 GitHub 庫(kù)中找到這個(gè)文件:
# reference: _/ubuntu/
FROM ubuntu:16.04
# Adds metadata to the image as a key value pair example LABEL version1.0
LABEL maintainerHamel Husain
##Set environment variables
ENV.UTF-8 LC_ALLC.UTF-8
RUN apt-get update --fix-missing ampamp apt-get install -y wget bzip2 ca-certificates
build-essential
byobu
curl
git-core
htop
pkg-config
python3-dev
python-pip
python-setuptools
python-virtualenv
unzip
ampamp
apt-get clean ampamp
rm -rf /var/lib/apt/lists/*
RUN echo export PATH/opt/conda/bin:$PATH gt ampamp
wget --quiet _ -O ~ ampamp
/bin/bash ~ -b -p /opt/conda ampamp
rm ~
ENV PATH /opt/conda/bin:$PATH
RUN pip --no-cache-dir install --upgrade
multiprocessing
sklearn-pandas
# Open Ports for Jupyter
EXPOSE 7745
#Setup File System
RUN mkdir ds
ENV HOME/ds
ENV SHELL/bin/bash
VOLUME /ds
WORKDIR /ds
ADD run_ /ds/run_
RUN chmod x /ds/run_
# Run the shell
CMD [./run_]
FROM 語(yǔ)句
FROM ubuntu:16.04
FROM 語(yǔ)句包含了 Docker 最神奇的部分。這個(gè)語(yǔ)句指定了你想在上面進(jìn)行創(chuàng)建的基礎(chǔ)鏡像。通過(guò)使用 FROM 指定一個(gè)基礎(chǔ)鏡像,Docker 將會(huì)在你的本地環(huán)境中尋找名為 ubuntu:16.04 的鏡像——如果它沒(méi)有找到,它就會(huì)搜索你指定的 Docker Registry,默認(rèn)是 DockerHub:。如果你需要經(jīng)常在你的 Ubuntu 等操作系統(tǒng)上安裝程序,那么這種分層機(jī)制就非常方便。你不必費(fèi)心從頭開(kāi)始安裝 Ubuntu,而是可以直接在官方的 Ubuntu 鏡像上開(kāi)發(fā)!DockerHub 上托管著種類繁多的鏡像,包括那些不只是提供了一個(gè)操作系統(tǒng)的鏡像,比如如果你想要一個(gè)已經(jīng)安裝了 Anaconda 的容器,你可以選擇在官方的 Anaconda Docker 鏡像上開(kāi)發(fā),地址:。最重要的是,你也可以隨時(shí)發(fā)布你構(gòu)建的鏡像,即使該鏡像是通過(guò)在其它鏡像上加層得到的!這有無(wú)盡的可能性。
在這個(gè)案例中,我們指定基礎(chǔ)鏡像為 ubuntu:16.04,它會(huì)搜索名叫 ubuntu 的 DockerHub 庫(kù)(_/ubuntu/)。鏡像名之后的部分 16.04 是指定了你想要安裝的基礎(chǔ)鏡像的版本的標(biāo)簽(tag)。如果你檢索一下 Ubuntu DockerHub 庫(kù),你會(huì)注意到不同版本的 Ubuntu 對(duì)應(yīng)于不同的 tag:
2017 年 12 月的官方 Ubuntu DockerHub 庫(kù)截屏
比如,ubuntu:16.04、ubuntu:xenial-20171201、ubuntu:xenial 和 ubuntu:latest 全都是指 16.04 版的 Ubuntu,它們?nèi)际峭粋€(gè)鏡像的別名。此外,這里提供的鏈接指向了對(duì)應(yīng)的 Dockerfile,可用于構(gòu)建每個(gè)版本的鏡像。有時(shí)候你無(wú)法在 DockerHub 中找到 Dockerfile,因?yàn)榫S護(hù)者可以自己選擇是否將關(guān)于這些鏡像的創(chuàng)建的 Dockerfile 包含進(jìn)來(lái)。我個(gè)人覺(jué)得閱讀一些 Dockerfile 有助于更好地理解 Dockerfile。(但不要急,讀完這篇教程再說(shuō)?。?/p>
你需要特別注意一個(gè)標(biāo)簽,即 :latest 標(biāo)簽。這也是你在不為 FROM 語(yǔ)句指定標(biāo)簽時(shí)默認(rèn) pull 的鏡像。比如說(shuō)如果你的 FROM 語(yǔ)句是這樣:
FROM ubuntu
然后你就將 pull ubuntu:16.04 鏡像。為什么?——仔細(xì)看上面,你可以看到 :latest 關(guān)聯(lián)的是 16.04.
關(guān)于 Docker 鏡像最后需要注意的一點(diǎn):在從 DockerHub pull 隨機(jī)的 Docker 鏡像時(shí)要做出明智的判斷。有惡意的人創(chuàng)建的鏡像有可能會(huì)包含惡意軟件。
LABEL 語(yǔ)句
這個(gè)語(yǔ)句會(huì)為你的鏡像添加元數(shù)據(jù),而且是完全可選的。我增加這個(gè)語(yǔ)句的目的是為了讓別人知道可以聯(lián)系誰(shuí),同時(shí)也方便我搜索我的 Docker 容器,尤其是在一個(gè)服務(wù)器上同時(shí)運(yùn)行著很多容器時(shí)。
LABEL maintainerHamel Husain ltyouremailgt
ENV 語(yǔ)句
ENV.UTF-8 LC_ALLC.UTF-8
這讓你可以修改環(huán)境變量,而且相當(dāng)直接,相關(guān)情況請(qǐng)參閱:
RUN 語(yǔ)句
這通常是最需要花功夫的地方,給出了你構(gòu)建該 Docker 鏡像所想要完成的任務(wù)。你可以運(yùn)行 apt-get 和 pip install 等任意的 shell 命令來(lái)安裝你需要的軟件包和依賴包。
RUN apt-get update --fix-missing ampamp apt-get install -y wget bzip2
build-essential
ca-certificates
git-core
...
在這里我安裝了一些我喜歡的實(shí)用工具,比如 curl、htop、byobu,然后安裝了 Anaconda,之后還安裝了一些基礎(chǔ) Anaconda 中沒(méi)有的其它庫(kù)(你可以在完整的 Dockerfile 中查看其它 RUN 語(yǔ)句)。
RUN 語(yǔ)句后的命令與 Docker 沒(méi)什么關(guān)系,只是一些你在安裝這些軟件包時(shí)需要運(yùn)行的正常 Linux 命令,所以就算你不熟悉這些軟件包或 Linux 命令也不要擔(dān)心。另外,再給一個(gè)建議:當(dāng)我最早開(kāi)始學(xué)習(xí) Docker 時(shí),我查看了 GitHub 或 DockerHub 上的其它 Dockerfile,然后將我需要的部分復(fù)制粘貼到了我的 Dockerfile。
你可能注意到了 RUN 語(yǔ)句的格式。每個(gè)庫(kù)或軟件包都整齊地進(jìn)行了縮進(jìn),而且為了可讀性還按字母進(jìn)行了排序。這是 Dockerfile 的普遍慣例,所以我建議你也這樣做以便合作。
EXPOSE 語(yǔ)句
如果你想公開(kāi)一個(gè)端口,這個(gè)語(yǔ)句會(huì)很有用——比如,如果你從該容器或某個(gè)網(wǎng)絡(luò)服務(wù)內(nèi)實(shí)施一個(gè) Jupyter Notebook。Docker 的文檔相當(dāng)好地解釋了 EXPOSE 語(yǔ)句:
EXPOSE 指令實(shí)際上并沒(méi)有發(fā)布該端口。它的功能是作為創(chuàng)建該鏡像的人和運(yùn)行該容器的人之間的一類文檔,內(nèi)容是關(guān)于打算發(fā)布的端口。要實(shí)際發(fā)布該端口,就要在運(yùn)行該容器時(shí)在 docker run 上使用 -p 標(biāo)志并且映射一個(gè)或多個(gè)端口,或者也可以使用 -P 標(biāo)志發(fā)布所有端口并將它們映射到高階端口。
VOLUME 語(yǔ)句
VOLUME /ds
這個(gè)語(yǔ)句讓你可以在 Docker 容器和主機(jī)計(jì)算機(jī)之間共享數(shù)據(jù)。VOLUME 語(yǔ)句讓你可以安裝外部安裝的卷。主機(jī)目錄只有在容器運(yùn)行時(shí)才聲明(因?yàn)槟憧赡茉诓煌挠?jì)算機(jī)上運(yùn)行該容器),而不會(huì)在定義鏡像時(shí)聲明*。目前你只指定了 Docker 容器內(nèi)你想與主機(jī)容器共享的文件夾的名稱。
Docker 用戶指南解釋說(shuō):
主機(jī)目錄是在容器運(yùn)行時(shí)聲明的:主機(jī)目錄(掛載點(diǎn))本質(zhì)上取決于主機(jī)。這是為了保證鏡像的可移植性,因?yàn)橐粋€(gè)給定的主機(jī)目錄無(wú)法保證在所有主機(jī)上都可用。由于這個(gè)原因,你不能在 Dockerfile 中掛載主機(jī)目錄。VOLUME 指令不支持指定 host-dir 參數(shù)。你必須在創(chuàng)建或運(yùn)行容器時(shí)指定掛載點(diǎn)。
此外,這些卷的目的是將數(shù)據(jù)保存到容器的文件系統(tǒng)之外,當(dāng)你要操作大量數(shù)據(jù)而且不希望你的鏡像膨脹得很大時(shí),這會(huì)很有用。當(dāng)你保存一個(gè) Docker 鏡像時(shí),在這個(gè) VOLUME 目錄中的任何數(shù)據(jù)都不會(huì)被保存為該鏡像的一部分,但是在這個(gè)容器目錄之外的數(shù)據(jù)會(huì)被保存。
WORKDIR 語(yǔ)句
WORKDIR /ds
這個(gè)語(yǔ)句設(shè)置了工作目錄,以便你在另一條命令中可以無(wú)需使用絕對(duì)路徑就能索引特定的文件。例如這個(gè) Dockerfile 中的最后一條語(yǔ)句是:
CMD [“./run_”]
該語(yǔ)句就默認(rèn)假設(shè)工作目錄是 /ds
ADD 語(yǔ)句
ADD run_ /ds/run_
這條命令讓你可以在 Docker 容器運(yùn)行時(shí)將文件從主機(jī)計(jì)算機(jī)復(fù)制到該 Docker 容器。我使用這個(gè)命令來(lái)執(zhí)行 bash 腳本以及將 .bachrc 文件等有用東西導(dǎo)入到容器中。
注意這里的主機(jī)容器的路徑并沒(méi)有完全指定,因?yàn)槠渲鳈C(jī)路徑是你在該容器運(yùn)行時(shí)指定的背景路徑(context directory)的相對(duì)路徑(后面會(huì)討論)。
在我運(yùn)行這個(gè)容器時(shí),run_ 正好在背景路徑的根目錄內(nèi),所以在該源文件之前沒(méi)有路徑。
用戶指南中介紹說(shuō):
ADD ltsrcgt... ltdestgt
ADD 指令從 ltsrcgt 復(fù)制新文件、目錄或遠(yuǎn)程文件 URL 并將它們添加到路徑 ltdestgt 的鏡像的文件系統(tǒng)中。
CMD 語(yǔ)句
Docker 容器的設(shè)計(jì)思想是這些容器是短暫的,能保證運(yùn)行完你想運(yùn)行的應(yīng)用就行了。但在數(shù)據(jù)科學(xué)方面,我們往往希望保持這些容器一直運(yùn)行,即使它們之中并沒(méi)有主動(dòng)地運(yùn)行著什么。很多人都通過(guò)運(yùn)行 bash shell 來(lái)實(shí)現(xiàn)這一點(diǎn)(除非你終止它,否則它就不會(huì)停止)。
CMD [“./run_”]
在上面的命令中,我運(yùn)行了一個(gè)實(shí)例化一個(gè) Jupyter Notebook 服務(wù)器的 shell 腳本。但是,如果你沒(méi)有什么要運(yùn)行的特定應(yīng)用而只是想保持你的容器運(yùn)行(而不退出),你可以直接運(yùn)行 bash shell,只不過(guò)使用以下命令:
CMD [/bin/bash]
這種方法是有效的,因?yàn)槌悄阃顺?,否則 bash shell 就不會(huì)終止;因此該容器會(huì)一直保持運(yùn)行。
用戶指南中介紹說(shuō):
在一個(gè) Dockerfile 中只能有一個(gè) CMD 指令。如果你列出了不止一個(gè) CMD,那么只有最后一個(gè)才有效。
CMD 的主要目的是為正在執(zhí)行的容器提供默認(rèn)配置。這些默認(rèn)配置可能包含一個(gè)可執(zhí)行文件,或者也可以省略可執(zhí)行文件,在這種情況下你還必須指定一個(gè) ENTRYPOINT 指令。
創(chuàng)建你的 Docker 鏡像Dockerfile 中的信息可真夠多的。不要擔(dān)心,后面的內(nèi)容就相對(duì)很簡(jiǎn)單了。現(xiàn)在我們已經(jīng)在 Dockerfile 中創(chuàng)建了我們的配方,是時(shí)候創(chuàng)造鏡像了。你可以通過(guò)以下命令完成:
GitHub 上也有:_Tutorial/blob/master/basic_tutorial/build_
這會(huì)創(chuàng)建一個(gè) Docker 鏡像(而不是容器;如果你不記得這兩者之間的差異,請(qǐng)查閱文章前面的術(shù)語(yǔ)介紹),你可以在后面運(yùn)行這個(gè)鏡像。
從你的 Docker 鏡像創(chuàng)建和運(yùn)行容器 現(xiàn)在你已經(jīng)準(zhǔn)備好讓這一切工作起來(lái)了!我們可以通過(guò)執(zhí)行以下命令來(lái)調(diào)出環(huán)境:
同樣 GitHub 也有:_Tutorial/blob/master/basic_tutorial/run_
運(yùn)行完這個(gè)命令之后,你的容器就運(yùn)行起來(lái)了!Jupyter 服務(wù)器也運(yùn)行起來(lái)了,因?yàn)樵谠?Dockerfile 最后有這個(gè)命令:
CMD [“./run_”]
現(xiàn)在你應(yīng)該可以通過(guò)其使用的端口訪問(wèn)你的 Jupyter Notebook 了——在這個(gè)案例中可通過(guò) :7745/ 訪問(wèn),密碼是 tutorial。如果你是通過(guò)遠(yuǎn)程的運(yùn)行這個(gè) Docker 容器,你還必須設(shè)置本地端口轉(zhuǎn)發(fā),這樣你才能通過(guò)你的瀏覽器訪問(wèn)你的 Jupyter 服務(wù)器。端口轉(zhuǎn)發(fā)介紹:
與你的容器交互 一旦容器設(shè)置完成并運(yùn)行起來(lái),下面這些命令就有用了:
·為容器附加一個(gè)新的終端會(huì)話。如果你需要安裝一些新軟件或使用 shell,這會(huì)很有用。
·將你的容器的狀態(tài)保存為新鏡像。即使你一開(kāi)始就在 Dockerfile 中配置了你想安裝的所有庫(kù),隨著時(shí)間的推移,你也可能還是需要對(duì)容器的狀態(tài)進(jìn)行很大的調(diào)整——通過(guò)交互來(lái)增加更多庫(kù)和軟件包。將你的容器的狀態(tài)保存為鏡像是很有用的,你后面可以將其分享出去或在上面加層。你可以使用 docker commit CLI 命令將容器狀態(tài)保存為新鏡像:
docker commit ltcontainer_namegt new_image_name:tag_name(可選的)
比如說(shuō),如果我想將名為 container1 的容器的狀態(tài)保存為名為 hamelsmu/tutorial:v2 的鏡像,我可以直接運(yùn)行這個(gè)命令:
docker commit container_1 hamelsmu/tutorial:v2
你可能會(huì)疑惑鏡像名之前的 hamelsmu/ 是什么——這只是為了讓之后將該容器推送到 DockerHub 的工作更輕松,因?yàn)?hamelsmu 是我的 DockerHub 用戶名(后面會(huì)再談這個(gè)問(wèn)題)。如果你的工作要使用 Docker,那么你的公司很可能有一個(gè)內(nèi)部私有的 Docker 庫(kù),你也可以將你的 Docker 推送到那里。
·列出運(yùn)行中的容器。當(dāng)我忘記現(xiàn)在正在運(yùn)行的容器的名稱時(shí),我就常常使用這個(gè)命令:
docker ps -a -f statusrunning
如果你在使用該命令時(shí)沒(méi)有加上 statusrunning,那么你就會(huì)看到你系統(tǒng)上的所有容器的列表(即使已經(jīng)不再運(yùn)行的容器也在)。這對(duì)查找舊容器而言很有用。
·列出你在本地保存的所有鏡像。
docker images
·將你的鏡像推送到 DockerHub(或其它地方)。如果你想與其他人分享你的工作或?qū)㈢R像保存到云上,這個(gè)命令就會(huì)很有用。注意你在做這件事時(shí)可不要分享任何私人信息(DockerHub 上也有私有庫(kù))。
首先創(chuàng)建一個(gè) DockerHub 庫(kù)并給你的庫(kù)起一個(gè)適當(dāng)?shù)拿Q,參考這里:。然后要運(yùn)行 docker login 命令來(lái)連接到你在 DockerHub 或其它注冊(cè)位置的賬戶。比如,要推送一個(gè)鏡像到這個(gè)容器(),我首先必須將我的本地鏡像命令為 hamelsmu/tutorial(我可以選擇任意標(biāo)簽名)。比如說(shuō),這個(gè) CLI 命令就為:
docker push hamelsmu/tutorial:v2
將之前提到的 Docker 鏡像推送到這個(gè)庫(kù),其標(biāo)簽為 v2,參考:。需要指出:如果你公開(kāi)了你的鏡像,那么其他人就可以直接在你的鏡像上加層,就像本教程中我們?cè)?ubuntu 鏡像上加層一樣。對(duì)于想要重現(xiàn)或延展你的研究的其他人來(lái)說(shuō),這非常有用。
你已經(jīng)掌握了現(xiàn)在你知道如何操作 Docker 了,你可以執(zhí)行以下任務(wù):
·與同事和朋友共享可重現(xiàn)的研究。
·通過(guò)將你的代碼暫時(shí)遷移到所需的更大的計(jì)算環(huán)境中,無(wú)中斷地贏得 Kaggle 競(jìng)賽。
·在你的筆記本電腦上的 Docker 容器內(nèi)進(jìn)行本地的原型開(kāi)發(fā),然后毫不費(fèi)力地將同樣的計(jì)算過(guò)程無(wú)縫遷移到服務(wù)器上,同時(shí)還能保留你喜歡的本地環(huán)境配置(你的別名、vim 插件、bash 腳本、自定義提示等)。
·使用 Nvidia-Docker 在 GPU 計(jì)算機(jī)上快速實(shí)例化運(yùn)行 TensorFlow、PyTorch 或其它深度學(xué)習(xí)庫(kù)所需的所有依賴包。(如果你從頭開(kāi)始做,這個(gè)過(guò)程將非常艱辛。)參閱后面的彩蛋。
·將你的模型作為應(yīng)用發(fā)布,比如用作從 Docker 容器提供預(yù)測(cè)的 REST API。當(dāng)你的應(yīng)用 Docker 化了以后,就可以按照需要輕松地隨意復(fù)制。
進(jìn)階閱讀到這里我們也只學(xué)到了 Docker 的一點(diǎn)皮毛,前面還有很多東西值得掌握。我很關(guān)注 Docker 領(lǐng)域,我認(rèn)為數(shù)據(jù)科學(xué)家會(huì)常常遇到它,希望這篇文章能讓你有足夠的信心開(kāi)始使用它。下面這些資源曾在我的 Docker 之旅中為我提供過(guò)幫助:
·有用的 Docker 命令:_docker_containers/
·更有用的 Docker 命令:
·Dockerfile 參考:
·如何創(chuàng)建和推送到 DockerHub 上的庫(kù):
彩蛋:Nvidia-Docker我學(xué)習(xí) Docker 最早的原因是要在單個(gè) GPU 上做深度學(xué)習(xí)模型的原型開(kāi)發(fā),然后在我需要更多計(jì)算資源時(shí)再遷移到 AWS 上。我當(dāng)時(shí)也在學(xué)習(xí) Jeremy Howard 的出色的 課程(),并且希望與其他人分享我的原型設(shè)計(jì)。
但是,要將英偉達(dá) GPU 的驅(qū)動(dòng)程序等所有依賴包都包含以來(lái),你不能使用 Docker,而是要用 Nvidia-Docker()。這比使用 vanilla Docker 要多花一些功夫,但只要你理解了 Docker,做起來(lái)就很簡(jiǎn)單。
我將我的 Nvidia-Docker 設(shè)置放在這里:_Tutorial/tree/master/gpu_tutorial,你可以用這個(gè)來(lái)進(jìn)行練習(xí)。