介紹
Docker是一個(gè)應(yīng)用程序,它使得在容器中運(yùn)行應(yīng)用程序進(jìn)程變得簡(jiǎn)單和容易,這類應(yīng)用程序就像虛擬機(jī),只有更便攜,更加資源友好,更依賴于主機(jī)操作系統(tǒng)。 有關(guān)詳細(xì)介紹Docker容器的不同組件,請(qǐng)Docker生態(tài)系統(tǒng):介紹公共組件 。
在Ubuntu 16.04上安裝Docker有兩種方法。 一種方法包括將其安裝在操作系統(tǒng)的現(xiàn)有安裝上。 其他涉及紡了一個(gè)名為工具的服務(wù)器Docker機(jī)即自動(dòng)安裝Docker就可以了。
在本教程中,您將學(xué)習(xí)如何在現(xiàn)有安裝的Ubuntu 16.04上安裝和使用它。
先決條件
要遵循本教程,您需要以下內(nèi)容:
64位Ubuntu 16.04 Droplet
使用sudo特權(quán)的非root用戶初始設(shè)置指南的Ubuntu 16.04將介紹如何設(shè)置起來。)
注意:Docker需要的Ubuntu 64位版本,以及一個(gè)內(nèi)核版本等于或大于3.10以上。
默認(rèn)的64位Ubuntu 16.04 Droplet滿足這些要求。
本教程中的所有命令都應(yīng)以非root用戶身份運(yùn)行。 如果需要該命令的root訪問權(quán)限,它會(huì)在前面加sudo 。 初始設(shè)置指南的Ubuntu 16.04解釋了如何添加用戶,并給他們sudo訪問。
第1步 – 安裝Docker
官方Ubuntu 16.04存儲(chǔ)庫(kù)中提供的Docker安裝包可能不是最新版本。 要獲得最新和最好的版本,請(qǐng)從官方Docker倉(cāng)庫(kù)安裝Docker。 本節(jié)向您展示如何做到這一點(diǎn)。
但首先,讓我們更新包數(shù)據(jù)庫(kù):
1
|
sudo apt -get update |
現(xiàn)在讓我們安裝Docker。 將官方Docker資源庫(kù)的GPG密鑰添加到系統(tǒng):
1
|
sudo apt -key adv - -keyserver hkp://p80.pool.sks -keyservers .net:80 - -recv -keys 58118E89F3A912897C070ADBF76221572C52609D |
將Docker存儲(chǔ)庫(kù)添加到APT源:
1
|
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list |
使用新添加的軟件包中的Docker軟件包更新軟件包數(shù)據(jù)庫(kù):
1
|
sudo apt -get update |
確保你將要從Docker repo而不是默認(rèn)的Ubuntu 16.04 repo安裝:
1
|
apt -cache policy docker -engine |
您應(yīng)該看到類似以下的輸出:
apt-cache策略的輸出docker-engine
1
2
3
4
5
6
7
8
|
docker -engine : Installed: (none) Candidate: 1.11.1-0~xenial Version table: 1.11.1-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu -xenial /main amd64 Packages 1.11.0-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu -xenial /main amd64 Packages |
請(qǐng)注意, docker-engine沒有安裝,但安裝的候選人是從Docker庫(kù)中的Ubuntu 16.04。 該docker-engine版本號(hào)可能會(huì)不同。
最后,安裝Docker:
1
|
sudo apt -get install -y docker -engine |
現(xiàn)在應(yīng)該安裝Docker,啟動(dòng)守護(hù)進(jìn)程,啟動(dòng)進(jìn)程啟動(dòng)。 檢查它是否正在運(yùn)行:
1
|
sudo systemctl status docker |
輸出應(yīng)類似于以下內(nèi)容,顯示服務(wù)是活動(dòng)的并正在運(yùn)行:
1
2
3
4
5
6
|
Output ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago Docs: https://docs.docker.com Main PID: 749 (docker) |
安裝Docker現(xiàn)在給你不只是Docker服務(wù)(守護(hù)進(jìn)程),而且docker命令行實(shí)用程序或Docker客戶端。 我們將探討如何使用docker在本教程后面的命令。
第2步 – 執(zhí)行沒有Sudo的Docker命令(可選)
默認(rèn)情況下,在運(yùn)行docker命令需要root權(quán)限-也就是說,你必須前綴命令sudo 。 它也可以由搬運(yùn)工組,它是在安裝Docker期間自動(dòng)創(chuàng)建中的用戶運(yùn)行。 如果你嘗試運(yùn)行docker沒有用前綴它命令sudo或不Docker組之中,你會(huì)得到這樣的輸出:
1
2
3
|
Output docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help' . |
如果你想避免打字sudo只要您運(yùn)行的docker命令,您的用戶名添加到Docker組:
1
|
sudo usermod -aG docker $(whoami) |
您將需要注銷Droplet并作為同一用戶重新啟用以啟用此更改。
如果需要添加用戶到docker ,你沒有作為登錄組,明確宣布用戶名使用:
1
|
sudo usermod -aG docker username |
本文的其余部分假定您運(yùn)行的docker作為Docker的用戶組中的用戶命令。 如果您選擇不,請(qǐng)前面加上命令sudo 。
第3步 – 使用Docker命令
隨著Docker的安裝和工作,現(xiàn)在是時(shí)候熟悉命令行實(shí)用程序。 使用docker由它傳遞的選項(xiàng)和命令后跟參數(shù)的鏈條。 語法采用以下形式:
1
|
docker [option] [command] [arguments] |
要查看所有可用的子命令,請(qǐng)鍵入:
docker
從Docker 1.11.1開始,可用子命令的完整列表包括:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
Output attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system -wide information inspect Return low -level information on a container or image kill Kill a running container load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container network Manage Docker networks pause Pause all processes within a container port List port mappings or a specific mapping for the CONTAINER ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart a container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop a running container tag Tag an image into a repository top Display the running processes of a container unpause Unpause all processes within a container update Update configuration of one or more containers version Show the Docker version information volume Manage Docker volumes wait Block until a container stops, then print its exit code |
要查看特定命令可用的開關(guān),請(qǐng)鍵入:
1
|
docker docker -subcommand - -help |
要查看有關(guān)Docker的系統(tǒng)范圍的信息,請(qǐng)使用:
1
|
docker info |
第4步 – 使用Docker鏡像
Docker容器是從Docker鏡像運(yùn)行的。 默認(rèn)情況下,它從Docker Hub(一個(gè)由Docker項(xiàng)目管理的Docker注冊(cè)中心)提取這些鏡像。 任何人都可以在Docker Hub上構(gòu)建和托管Docker鏡像,所以大多數(shù)應(yīng)用程序和Linux發(fā)行版都需要運(yùn)行Docker容器,這些鏡像托管在Docker Hub上。
要檢查是否可以從Docker Hub訪問和下載圖像,請(qǐng)鍵入:
1
|
docker run hello -world |
輸出,應(yīng)該包括以下內(nèi)容,應(yīng)該表明Docker正常工作:
1
2
3
4
|
Output Hello from Docker. This message shows that your installation appears to be working correctly. ... |
您可以通過搜索有關(guān)Docker Hub可用圖像docker用命令search子命令。 例如,要搜索Ubuntu映像,請(qǐng)鍵入:
1
|
docker search ubuntu |
該腳本將抓取Docker Hub并返回其名稱與搜索字符串匹配的所有圖像的列表。 在這種情況下,輸出將類似于:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Output NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian -based Linux operating s... 3808 [OK] ubuntu -upstart Upstart is an event -based replacement for ... 61 [OK] torusware/speedus -ubuntu Always updated official Ubuntu docker imag... 25 [OK] rastasheep/ubuntu -sshd Dockerized SSH service, built on top of of... 24 [OK] ubuntu -debootstrap debootstrap - -variant =minbase - -components ... 23 [OK] nickistre/ubuntu -lamp LAMP server on Ubuntu 6 [OK] nickistre/ubuntu -lamp -wordpress LAMP on Ubuntu with wp -cli installed 5 [OK] nuagebec/ubuntu Simple always updated Ubuntu docker images... 4 [OK] nimmis/ubuntu This is a docker images different LTS vers... 4 [OK] maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK] admiringworm/ubuntu Base ubuntu images based on the official u... 1 [OK] ... |
在正式列,OK表示建造和項(xiàng)目背后的公司支持的圖像。 一旦你確定你想使用的圖像,你可以用它下載到你的電腦pull子,就像這樣:
1
|
docker pull ubuntu |
圖像下載后,您可以使用下載的圖像與當(dāng)時(shí)運(yùn)行的容器run命令。 如果圖像尚未下載時(shí), docker與執(zhí)行run命令后,Docker客戶端將首先下載的圖像,然后使用它運(yùn)行一個(gè)容器:
1
|
docker run ubuntu |
要查看已下載到您的計(jì)算機(jī)的圖像,請(qǐng)鍵入:
1
|
docker images |
輸出應(yīng)類似于以下內(nèi)容:
1
2
3
4
|
Output REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB hello -world latest 94df4f0ce8a4 2 weeks ago 967 B |
正如您將在本教程中,你用來運(yùn)行容器的圖像可以修改和用于產(chǎn)生新的圖像,然后可以上傳后面看到( 推是技術(shù)術(shù)語),以Docker集線器或其他Docker登記。
第5步 – 運(yùn)行Docker容器
該hello-world你在前面跑容器是運(yùn)行和退出,散發(fā)出測(cè)試消息后的容器的一個(gè)例子。 然而,容器可以比這更有用,它們可以是交互式的。 畢竟,它們類似于虛擬機(jī),只是更加資源友好。
例如,讓我們使用Ubuntu的最新鏡像運(yùn)行一個(gè)容器。 -i和-t參數(shù)的組合為您提供了交互shell訪問到容器中:
1
|
docker run -it ubuntu |
您的命令提示符應(yīng)該更改以反映您現(xiàn)在在容器內(nèi)工作的事實(shí),并應(yīng)采取以下形式:
1
2
|
Output root@d9b100f2f636:/ # |
重要提示:請(qǐng)注意,在命令提示符容器ID。 在上面的例子中,它是d9b100f2f636 。
現(xiàn)在你可以在容器中運(yùn)行任何命令。 例如,讓我們更新容器中的包數(shù)據(jù)庫(kù)。 無需前綴任何命令sudo ,因?yàn)槟憔哂衦oot權(quán)限的容器內(nèi)工作:
1
|
apt -get update |
然后在其中安裝任何應(yīng)用程序。 讓我們安裝NodeJS,例如。
1
|
apt -get install -y nodejs |
第6步 – 將容器中的更改提交到Docker鏡像
默認(rèn)情況下Docker文件系統(tǒng)是臨時(shí)的。 如果啟動(dòng)Docker鏡像,您可以像虛擬機(jī)一樣創(chuàng)建,修改和刪除文件。 但是,如果您停止容器并重新啟動(dòng),所有更改將會(huì)丟失:之前刪除的所有文件現(xiàn)在都將恢復(fù),并且您創(chuàng)建的所有新文件或修改都不會(huì)出現(xiàn)。 這是因?yàn)镈ocker鏡像比標(biāo)準(zhǔn)虛擬化世界中的圖像更像模板。
要了解如何讓他們持續(xù)通過容器的重啟保留在容器內(nèi)這些變化,你需要使用Docker的數(shù)據(jù)量。 請(qǐng)參閱如何在Ubuntu 14.04與Docker的數(shù)據(jù)量工作的詳細(xì)信息。
本節(jié)介紹如何將容器的狀態(tài)保存為新的Docker鏡像。
在Ubuntu容器中安裝nodejs之后,現(xiàn)在有一個(gè)容器運(yùn)行一個(gè)映像,但容器不同于用來創(chuàng)建它的映像。
要將容器的狀態(tài)保存為新圖像,請(qǐng)先退出該容器:
exit
然后使用以下命令將更改提交到新的Docker映像實(shí)例。 -m開關(guān)是提交信息,可以幫助您和其他人知道你做什么樣的變化,而-a用于指定的作者。 容器ID是您在啟動(dòng)交互式docker會(huì)話時(shí)在教程中前面提到的那個(gè)。 除非在Docker Hub上創(chuàng)建了其他存儲(chǔ)庫(kù),否則該存儲(chǔ)庫(kù)通常是您的Docker Hub用戶名:
1
|
docker commit -m "What did you do to the image" -a "Author Name" container -id repository/new_image_name |
例如:
1
|
docker commit -m "added node.js" -a "Sunday Ogwu-Chinuwa" d9b100f2f636 finid/ubuntu -nodejs |
注意:當(dāng)你提交圖像時(shí),新的圖像保存在本地,也就是您的計(jì)算機(jī)上。
在本教程的后面,您將學(xué)習(xí)如何將圖像推送到Docker注冊(cè)表(如Docker Hub),以便您和其他人評(píng)估和使用它。
在該操作完成后,列出Docker圖像現(xiàn)在在您的計(jì)算機(jī)上應(yīng)該顯示新的圖像,以及它的舊圖像,它派生自:
docker images
輸出應(yīng)類似于:
1
2
3
4
|
Output finid/ubuntu -nodejs latest 62359544c9ba 50 seconds ago 206.6 MB ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB hello -world latest 94df4f0ce8a4 2 weeks ago 967 B |
在上面的例子中,Ubuntu的的NodeJS是新的圖像,將其從Docker集線器現(xiàn)有的ubuntu圖像而得。 大小差異反映了所做的更改。 在這個(gè)例子中,更改是NodeJS已安裝。 所以,下次你需要運(yùn)行一個(gè)容器使用Ubuntu的NodeJS預(yù)安裝,你可以只使用新的形象。 圖像也可以從所謂的Dockerfile構(gòu)建。 但是這是一個(gè)非常復(fù)雜的過程,完全超出了本文的范圍。
第7步 – 列出Docker容器
使用Docker一段時(shí)間后,您的計(jì)算機(jī)上將有許多活動(dòng)(正在運(yùn)行)和不活動(dòng)的容器。 要查看活躍的 ,使用方法:
docker ps
您將看到類似于以下內(nèi)容的輸出:
1
2
3
|
Output CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7c79cc556dd ubuntu "/bin/bash" 3 hours ago Up 3 hours silly_spence |
要查看所有的容器-活動(dòng)和非活動(dòng),它傳遞-a開關(guān):
1
|
docker ps -a |
要查看您所創(chuàng)建的最新的容器,它傳遞-l開關(guān):
1
|
docker ps -l |
停止正在運(yùn)行或活動(dòng)的容器就像輸入:
1
|
docker stop container -id |
該container-id可以從輸出中發(fā)現(xiàn), docker ps命令。
第8步 – 將Docker映像推送到Docker存儲(chǔ)庫(kù)
從現(xiàn)有映像創(chuàng)建新映像后的下一個(gè)邏輯步驟是與您選擇的幾個(gè)朋友,Docker Hub的整個(gè)世界或您可以訪問的其他Docker注冊(cè)表共享它。 要將映像推送到Docker Hub或任何其他Docker注冊(cè)表,您必須有一個(gè)帳戶。
本節(jié)介紹如何將Docker鏡像推送到Docker Hub。 要了解如何創(chuàng)建自己的私人Docker注冊(cè)表,看看如何建立一個(gè)私人Docker登記在Ubuntu 14.04 。
要?jiǎng)?chuàng)建Docker Hub帳戶,注冊(cè)在Docker Hub 。 之后,要推送您的映像,首先登錄到Docker Hub。 系統(tǒng)會(huì)提示您驗(yàn)證:
1
|
docker login -u docker -registry -username |
如果指定了正確的密碼,身份驗(yàn)證應(yīng)該會(huì)成功。 然后您可以使用以下方式推送您自己的圖片:
1
|
docker push docker -registry -username /docker -image -name |
它需要一段時(shí)間來完成,當(dāng)完成后,輸出將類似于以下內(nèi)容:
1
2
3
4
5
6
7
8
9
|
Output The push refers to a repository [docker.io/finid/ubuntu -nodejs ] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed .. |
將圖片推送到注冊(cè)表后,應(yīng)將其列在您帳戶的信息中心上,如下圖所示。
如果推送嘗試導(dǎo)致此類錯(cuò)誤,則可能未登錄:
1
2
3
4
5
6
7
8
9
|
Output The push refers to a repository [docker.io/finid/ubuntu -nodejs ] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required |
登錄,然后重復(fù)推送嘗試。
結(jié)論
Docker比這篇文章有更多的東西,但這應(yīng)該足以讓你開始使用它在Ubuntu 16.04。 像大多數(shù)開源項(xiàng)目,Docker從一個(gè)快速發(fā)展的代碼庫(kù)建成,所以請(qǐng)?jiān)L問這個(gè)項(xiàng)目的的習(xí)慣, 博客頁(yè)面 ,了解最新信息。
原文鏈接:http://www.howtoing.com/how-to-install-and-use-docker-on-ubuntu-16-04/