Docker入門學(xué)習(xí)

參考

Docker 入門教程
Docker —— 從入門到實踐

1.Docker是什么

1.1 環(huán)境配置

軟件開發(fā)最大的麻煩事之一登刺,就是環(huán)境配置。用戶計算機(jī)的環(huán)境都不相同嗡呼,你怎么知道自家的軟件纸俭,能在那些機(jī)器跑起來?

用戶必須保證兩件事:操作系統(tǒng)的設(shè)置南窗,各種庫和組件的安裝揍很。只有它們都正確,軟件才能運(yùn)行万伤。舉例來說窒悔,安裝一個 Python 應(yīng)用,計算機(jī)必須有 Python 引擎敌买,還必須有各種依賴简珠,可能還要配置環(huán)境變量。

如果某些老舊的模塊與當(dāng)前環(huán)境不兼容,那就麻煩了聋庵。開發(fā)者常常會說:"它在我的機(jī)器可以跑了"(It works on my machine)膘融,言下之意就是,其他機(jī)器很可能跑不了祭玉。

環(huán)境配置如此麻煩氧映,換一臺機(jī)器,就要重來一次脱货,曠日費時岛都。很多人想到,能不能從根本上解決問題振峻,軟件可以帶環(huán)境安裝疗绣?也就是說,安裝的時候铺韧,把原始環(huán)境一模一樣地復(fù)制過來多矮。

1.2 虛擬機(jī)

虛擬機(jī)(virtual machine)就是帶環(huán)境安裝的一種解決方案。它可以在一種操作系統(tǒng)里面運(yùn)行另一種操作系統(tǒng)哈打,比如在 Windows 系統(tǒng)里面運(yùn)行 Linux 系統(tǒng)塔逃。應(yīng)用程序?qū)Υ撕翢o感知,因為虛擬機(jī)看上去跟真實系統(tǒng)一模一樣料仗,而對于底層系統(tǒng)來說湾盗,虛擬機(jī)就是一個普通文件,不需要了就刪掉立轧,對其他部分毫無影響格粪。

但存在以下問題:

  • 資源占用多;
  • 冗余步驟多氛改;
  • 啟動慢帐萎;

1.3 Linux 容器

由于虛擬機(jī)存在這些缺點,Linux 發(fā)展出了另一種虛擬化技術(shù):Linux 容器(Linux Containers胜卤,縮寫LXC)疆导。
Linux 容器不是模擬一個完整的操作系統(tǒng),而是對進(jìn)程進(jìn)行隔離葛躏〕憾危或者說,在正常進(jìn)程的外面套了一個保護(hù)層舰攒。對于容器里面的進(jìn)程來說败富,它接觸到的各種資源都是虛擬的,從而實現(xiàn)與底層系統(tǒng)的隔離摩窃。

由于容器是進(jìn)程級別的兽叮,相比虛擬機(jī)有很多優(yōu)勢。

  • 啟動快;
  • 資源占用少充择;
  • 體積械旅怠匪蟀;

1.4 Docker主要用途

Docker 的主要用途椎麦,目前有三大類。

  • 提供一次性的環(huán)境材彪。比如观挎,本地測試他人的軟件、持續(xù)集成的時候提供單元測試和構(gòu)建的環(huán)境段化。
  • 提供彈性的云服務(wù)。因為 Docker 容器可以隨開隨關(guān),很適合動態(tài)擴(kuò)容和縮容趁餐。
  • 組建微服務(wù)架構(gòu)俐芯。通過多個容器,一臺機(jī)器可以跑多個服務(wù)喘蟆,因此在本機(jī)就可以模擬出微服務(wù)架構(gòu)缓升。

2.Docker安裝

Docker是一個開源的商業(yè)產(chǎn)品,有兩個版本:社區(qū)版(Community Edition蕴轨,縮寫為 CE)港谊;企業(yè)版(Enterprise Edition,縮寫為 EE)橙弱。企業(yè)版包含了一些收費服務(wù)歧寺。下面列舉是社區(qū)版安裝教程

2.1 檢測是否安裝成功

$ docker version
# 或者
$ docker info
img

2.2 開啟Docker服務(wù)

Docker 是服務(wù)器----客戶端架構(gòu)。命令行運(yùn)行docker命令的時候棘脐,需要本機(jī)有 Docker 服務(wù)斜筐。如果這項服務(wù)沒有啟動,可以用下面的命令啟動

# service 命令的用法
$ sudo service docker start

# systemctl 命令的用法
$ sudo systemctl start docker
img

3.Docker常用命令

3.1 鏡像

獲取鏡像(docker image pull)

Docker Hub 上有大量的高質(zhì)量的鏡像可以用蛀缝,我們可以直接獲取已經(jīng)做好的鏡像文件奴艾。
下面代碼中,docker image pull是抓取 image 文件的命令内斯。library/hello-world是 image 文件在倉庫里面的位置蕴潦,其中l(wèi)ibrary是 image 文件所在的組,hello-world是 image 文件的名字俘闯。

由于 Docker 官方提供的 image 文件潭苞,都放在library組里面,所以它的是默認(rèn)組真朗,可以省略此疹。

$ docker pull --help
$ docker image pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   Suppress verbose output

$ docker image pull library/hello-world
$ docker image pull hello-world
img

列出鏡像(docker image ls)

列表包含了 倉庫名、標(biāo)簽、鏡像 ID蝗碎、創(chuàng)建時間 以及 所占用的空間湖笨。

(base) [12:48:37] root@VM-4-4-centos:~
$ docker image ls
REPOSITORY             TAG       IMAGE ID       CREATED       SIZE
rocker/rstudio         latest    0f828055b20c   3 days ago    1.89GB
hello-world            latest    feb5d9fea6a5   2 weeks ago   13.3kB
codercom/code-server   latest    08823d73807e   3 weeks ago   1.11GB

刪除本地鏡像(docker image rm)

可以通過image_ID 或 鏡像名來刪除

(base) [12:52:04] root@VM-4-4-centos:~
$ docker image rm hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:9ade9cc2e26189a19c2e8854b9c8f1e14829b51c55a630ee675a5a9540ef6ccf
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359

(base) [12:53:39] root@VM-4-4-centos:~
$ docker image ls
REPOSITORY             TAG       IMAGE ID       CREATED       SIZE
rocker/rstudio         latest    0f828055b20c   3 days ago    1.89GB
codercom/code-server   latest    08823d73807e   3 weeks ago   1.11GB

3.2 容器

啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動蹦骑,另外一個是將在終止?fàn)顟B(tài)(exited)的容器重新啟動慈省。

新建并啟動(docker run)

常用的參數(shù):
-i:運(yùn)行容器
-t:容器啟動后會進(jìn)入命令行,將入這兩個參數(shù)后眠菇,容器創(chuàng)建殼登錄進(jìn)去边败,即分配一個偽終端
-d: 后臺運(yùn)行(創(chuàng)建容器后不會自動登錄容器,只加-i-t兩個參數(shù)捎废,創(chuàng)建后會自動進(jìn)入容器)
-v:表示目錄映射關(guān)系笑窜,前者是宿主機(jī)目錄,后者是容器映射目錄登疗。
-p : 標(biāo)識端口映射排截,前者是宿主機(jī)端口,后者是容器映射端口辐益《习粒可使用多個-p做端口映射

如果容器不存在,會自動docker pull 一個最新的image;

(base) [12:56:46] root@VM-4-4-centos:~
$ docker run ubuntu:18.04 /bin/echo 'Hello world'
Unable to find image 'ubuntu:18.04' locally
18.04: Pulling from library/ubuntu
284055322776: Pull complete 
Digest: sha256:bfb4cabd667790ead5c95d9fe341937f0c21118fa79bc768d51c5da9d1dbe917
Status: Downloaded newer image for ubuntu:18.04
Hello world

啟動已終止容器(docker container start)

終止容器(docker container stop)

查看所有容器(docker ps -a)

進(jìn)入容器(docker exec)

在使用 -d 參數(shù)時荷腊,容器啟動后會進(jìn)入后臺艳悔。

某些時候需要進(jìn)入容器進(jìn)行操作,包括使用 docker attach 命令或 docker exec 命令女仰,推薦大家使用 docker exec 命令

舉例:

(base) [13:09:25] root@VM-4-4-centos:~
$ docker exec -it 4791c4f6cd63 bash
root@4791c4f6cd63:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@4791c4f6cd63:/# pwd
/

刪除容器(docker container rm)

比如:需要刪除modest_feistel這個容器猜年,需要先stop->再rm

$ docker container ls
CONTAINER ID   IMAGE                         COMMAND                  CREATED         STATUS         PORTS                    NAMES
4791c4f6cd63   ubuntu                        "bash"                   3 minutes ago   Up 3 minutes                            modest_feistel
4eafd6d919e3   ubuntu                        "bash"                   3 minutes ago   Up 3 minutes                            sharp_wilbur
4dd3572398e8   codercom/code-server:latest   "/usr/bin/entrypoint…"   11 hours ago    Up 11 hours    0.0.0.0:8080->8080/tcp   code-server
2f6ca3b22896   rocker/rstudio                "/init"                  11 hours ago    Up 11 hours    0.0.0.0:8787->8787/tcp   rstuido

$ docker container stop modest_feistel
modest_feistel

$ docker container rm modest_feistel
modest_feistel

$ docker container ls
CONTAINER ID   IMAGE                         COMMAND                  CREATED         STATUS         PORTS                    NAMES
4eafd6d919e3   ubuntu                        "bash"                   4 minutes ago   Up 4 minutes                            sharp_wilbur
4dd3572398e8   codercom/code-server:latest   "/usr/bin/entrypoint…"   11 hours ago    Up 11 hours    0.0.0.0:8080->8080/tcp   code-server
2f6ca3b22896   rocker/rstudio                "/init"                  11 hours ago    Up 11 hours    0.0.0.0:8787->8787/tcp   rstuido

3.3 倉庫

目前 Docker 官方維護(hù)了一個公共倉庫 Docker Hub,其中已經(jīng)包括了數(shù)量超過 2,650,000 的鏡像疾忍。大部分需求都可以通過在 Docker Hub 中直接下載鏡像來實現(xiàn)乔外。

注冊

你可以在 https://hub.docker.com 免費注冊一個 Docker 賬號。

登錄

可以通過執(zhí)行 docker login 命令交互式的輸入用戶名及密碼來完成在命令行界面登錄 Docker Hub一罩。

你可以通過 docker logout 退出登錄杨幼。

搜索鏡像(docker search)

例如以 centos 為關(guān)鍵詞進(jìn)行搜索:

$ docker search centos
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                             The official build of CentOS.                   6449      [OK]
ansible/centos7-ansible            Ansible on Centos7                              132                  [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   126                  [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   117                  [OK]
centos/systemd                     systemd enabled base container.       

4. 其他

4.1 外部訪問容器

容器中可以運(yùn)行一些網(wǎng)絡(luò)應(yīng)用,要讓外部也可以訪問這些應(yīng)用聂渊,可以通過 -P-p 參數(shù)來指定端口映射差购。

  • 當(dāng)使用 -P 標(biāo)記時,Docker 會隨機(jī)映射一個端口到內(nèi)部容器開放的網(wǎng)絡(luò)端口汉嗽。

使用 docker container ls 可以看到欲逃,本地主機(jī)的 32768 被映射到了容器的 80 端口。此時訪問本機(jī)的 32768 端口即可訪問容器內(nèi) NGINX 默認(rèn)頁面饼暑。

$ docker run -d -P nginx:alpine

$ docker container ls -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
fae320d08268        nginx:alpine        "/docker-entrypoint.…"   24 seconds ago      Up 20 seconds       0.0.0.0:32768->80/tcp   bold_mcnulty
  • 當(dāng)使用 -p 則可以指定要映射的端口稳析,并且洗做,在一個指定端口上只可以綁定一個容器。支持的格式有
    ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort.

使用 hostPort:containerPort 格式本地的 80/443 端口映射到容器的 80/443 端口

$ docker run -d \
    -p 80:80 \
    -p 443:443 \
    nginx:alpine

4.2 docker 目錄掛載

比如你使用docker安裝了rstudio彰居,你想將某個宿主目錄設(shè)定為docker-rstudio容器的home目錄诚纸,就需要考慮這個問題,可以用-v參數(shù)指定陈惰;

譬如我要啟動一個centos容器畦徘,宿主機(jī)的/test目錄掛載到容器的/soft目錄,可通過以下方式指定:

docker run -it -v /test:/soft centos /bin/bash

這樣在容器啟動后奴潘,容器內(nèi)會自動創(chuàng)建/soft的目錄旧烧。通過這種方式影钉,我們可以明確一點画髓,即-v參數(shù)中,冒號":"前面的目錄是宿主機(jī)目錄平委,后面的目錄是容器內(nèi)目錄奈虾。

歡迎評論交流~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市廉赔,隨后出現(xiàn)的幾起案子肉微,更是在濱河造成了極大的恐慌,老刑警劉巖蜡塌,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碉纳,死亡現(xiàn)場離奇詭異,居然都是意外死亡馏艾,警方通過查閱死者的電腦和手機(jī)劳曹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琅摩,“玉大人铁孵,你說我怎么就攤上這事》孔剩” “怎么了蜕劝?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轰异。 經(jīng)常有香客問我岖沛,道長,這世上最難降的妖魔是什么搭独? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任婴削,我火速辦了婚禮,結(jié)果婚禮上戳稽,老公的妹妹穿的比我還像新娘馆蠕。我一直安慰自己期升,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布互躬。 她就那樣靜靜地躺著播赁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吼渡。 梳的紋絲不亂的頭發(fā)上容为,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音寺酪,去河邊找鬼坎背。 笑死,一個胖子當(dāng)著我的面吹牛寄雀,可吹牛的內(nèi)容都是我干的得滤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盒犹,長吁一口氣:“原來是場噩夢啊……” “哼懂更!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起急膀,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤沮协,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卓嫂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷暂,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年晨雳,在試婚紗的時候發(fā)現(xiàn)自己被綠了行瑞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悍募,死狀恐怖蘑辑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坠宴,我是刑警寧澤洋魂,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站喜鼓,受9級特大地震影響副砍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庄岖,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一豁翎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隅忿,春花似錦心剥、人聲如沸邦尊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝉揍。三九已至,卻和暖如春畦娄,著一層夾襖步出監(jiān)牢的瞬間又沾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工熙卡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留杖刷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓驳癌,卻偏偏與公主長得像滑燃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喂柒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容