成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

不正宗 docker 入門教程-啟動一個容器(1/3)

YorkChen / 2784人閱讀

摘要:從命名上就知道這是一篇簡單粗暴的新手入門教程,為什么要簡單粗暴我認(rèn)為有自學(xué)能力的人幫他入門就夠了,不能自學(xué)的一時半會兒也教不會,不符合入門教程的初衷,建議出門左拐去找找視頻教程本章目標(biāo)大概了解是個什么玩意知道常用的指令參數(shù)能啟動一個容器不然

從命名上就知道這是一篇簡單粗暴的docker新手入門教程, 為什么要簡單粗暴? 我認(rèn)為有自學(xué)能力的人幫他入門就夠了, 不能自學(xué)的一時半會兒也教不會, 不符合入門教程的初衷, 建議出門左拐去找找視頻教程...
本章目標(biāo)

大概了解 docker 是個什么玩意

知道常用的 docker 指令參數(shù), 能啟動一個容器(不然還想怎么樣? 上天嗎?)

安裝環(huán)境

強(qiáng)烈推薦使用 Docker for MacDocker for Windows, 這兩個工具已經(jīng)將 Kitematicdocker-compose 集成好了, 至于這兩個工具是做什么的咱們后面再說, win10 版本需要專業(yè)版的, 不然開啟不了Hyper-V, win7 就別想了,不支持...

怎么安裝在 阿里云鏡像容器服務(wù) 里面都說的很清楚了, 連國內(nèi)鏡像源都給你安排好了, 咱們就進(jìn)入下一話題

PS: 如果是 CentOS 6 的就需要升級一下系統(tǒng)內(nèi)核了, centOS6.5 安裝docker, 畢竟都 8102 年了, docker 又是個比較新的東西, 對于稍微久一點(diǎn)的系統(tǒng)的支持就不那么友好
運(yùn)行第一個容器

安裝完環(huán)境之后就啟動一個鏡像開開眼兒

docker run -d -p 8080:80 --name local_nginx nginx

然后訪問 http://localhost:8080/ 就能看到 nginx 的初始界面了

中間發(fā)生了什么呢?

docker run 運(yùn)行鏡像的起手式, 詳情查看 docker run --help

-d 啟動 docker 守護(hù)進(jìn)程

-p 8080:80 將本地的 8080 端口綁定到容器的 80 端口上

--name local_nginx 分配一個容器名, 不寫的話會默認(rèn)分配要給, 不過這個還是很有用的

nginx 指定運(yùn)行的鏡像名,如果沒有指定標(biāo)簽則默認(rèn)是 latest, 這里其實(shí)是啟動nginx:latest鏡像

現(xiàn)在可以查看一下本機(jī)都在運(yùn)行著什么鏡像

PS D:docker_study> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
6732fa239270        nginx              "nginx -g "daemon of…"   18 minutes ago      Up 18 minutes       0.0.0.0:8080->80/tcp   local_nginx

docker ps 只能看到正在運(yùn)行中的容器, 想看到全部的就是 docker ps -a

進(jìn)入這個容器的命令:

docker exec -it 6732fa239270 /bin/bash
#或
docker exec -it local_nginx /bin/bash

解釋一下:

docker exec 在容器中執(zhí)行命令

-i 保持stdin打開

-t 分配一個偽終端(tty)

6732fa239270 或 local_nginx 這里你也發(fā)現(xiàn)了, 可以是通過 CONTAINER ID 也可以是 NAMES 這里的 CONTAINER ID分為128位長ID和32位短ID, 不過作用都是一樣的

/bin/bash 運(yùn)行容器中的 /bin/bash 腳本

進(jìn)入容器中感覺其實(shí)和進(jìn)入一個虛擬機(jī)一樣, 但是容器和虛擬機(jī)有點(diǎn)區(qū)別, 這個我們下一小節(jié)會講到

關(guān)閉容器

docker stop 6732fa239270 或 local_nginx
什么是容器?什么是鏡像?

之前我們使用 VirtualBox 裝虛擬機(jī)的時候有裝盤鏡像, 但是啟動后就是一個個的虛擬機(jī)了, 不過在 docker 中和虛擬機(jī)還是有點(diǎn)區(qū)別

就拿上圖來說, container就是鏡像的實(shí)例化, image 是容器的底層支撐, 其實(shí)他們的關(guān)系用代碼中的類Class來比喻是最合適的:

Class 就是我們實(shí)際開發(fā)中寫的一個代碼集合, Object 是 Class 實(shí)例化之后生成的一種資源變量

Image 也是預(yù)先寫好的邏輯, 并存在一個地方, Container 是 Image 啟動之后生成的一個虛擬系統(tǒng)

實(shí)例化出來的 Object 不會影響到 Class 中的內(nèi)容

已經(jīng)啟動的 Container 也不會影響到 Image 中的邏輯

Class 可以繼承別的 Class, 從而繼承它的特性

Image 也是可以繼承別的 Image, 并在它的基礎(chǔ)上構(gòu)建新的鏡像

一個 Object 對應(yīng)著一個 Class, 但是 一個 Class 可以實(shí)例化無數(shù)個 Object

同理, 一份 Image 可以生成無數(shù)個 Container, 這就是方便集群化部署的所在

簡單的說 Container 就是 Image 的兒子, 模樣和 Image 預(yù)想的一樣, 但是 Container 運(yùn)行之后會發(fā)生一些改變, 而且這種改變是可以保存的

常用的運(yùn)行參數(shù)和命令

咱們先不說構(gòu)建鏡像的事兒(那是下一章的話題), 這里先了解一下 docker run 命令中比較常用的參數(shù):

-it 建立一個可在終端交互的容器

比如:

docker run -it --name local_nginx nginx:latest /bin/bash
# 或
docker exec -it local_nginx bin/bash
-p 用于宿主機(jī)和容器的端口綁定

綁定多個端口就設(shè)置多個映射

docker run -d -p 8088:80 -p 4433:443 nginx:latest
# 或    不寫本地端口, docker 將幫你自動分配
docker run -d -p :80 -p :443 nginx:latest
# 或    加上 ip 就綁本地指定的 ip
docker run -d -p 127.0.0.1:8088:80 -p :443 nginx:latest
# 或    照樣不寫本地端口就隨機(jī)分配
docker run -d -p 127.0.0.1::80 -p :443 nginx:latest

通過 docker ps 可以看一下上面兩行命令的執(zhí)行狀態(tài)

?  test docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                           NAMES
57f65b46bd87        nginx:latest        "nginx -g "daemon of…"   1 second ago         Up 3 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   happy_zhukovsky
0c035ebabe44        nginx:latest        "nginx -g "daemon of…"   About a minute ago   Up About a minute   0.0.0.0:8088->80/tcp, 0.0.0.0:4433->443/tcp     ecstatic_haibt
-v 將宿主機(jī)的卷掛載到容器中的指定目錄
docker run -d -p 8088:80 -v /Users/gpf/Documents/docker_study/docker_test/www/:/usr/share/nginx/html/ nginx:latest

這里本地的目錄要寫絕對路徑, 不然會報錯, 這樣一來, 本地的/Users/gpf/Documents/docker_study/docker_test/www/ 就是容器中的/usr/share/nginx/html/, 就可以本地更改代碼, 然后容器中運(yùn)行

-d 后臺運(yùn)行

想查看日志的話就 docker logs [containerID] 就行

docker exec 執(zhí)行 docker 容器中的命令

通常就是用來進(jìn)入容器中搞七搞八的

docker exec -it 57f65b46bd87 /bin/bash
# 或
docker exsec -it local_nginx /bin/bash

這里注意兩點(diǎn):

containerID 在很多情況下都可以用 container Name 來代替, 很多情況是等價的

命令最后的 /bin/bash 不是必須這么填, 而是執(zhí)行的容器中的腳本, 如果你的鏡像是 alpine版的就是 sh, 因?yàn)檫@個版本中就沒有 bash 這個命令

docker ps 容器的運(yùn)行狀態(tài) docker stop [containerID 或 name] 停止容器

目前版本也增加了 docker container stop [containerID 或 name] 其實(shí)作用是一樣的, 不過 docker container 命令底下還有很多別的命令, docker 給各模塊的命令做了細(xì)分

docker rm [containerID 或 name] 刪除指定未運(yùn)行的容器, 一個或多個
docker rm 6dee0a9b5232 582f708af9d3
docker rmi [imageID 或 tag] 刪除宿主機(jī)指定的鏡像

這里要注意如果這個鏡像還有容器在使用就不能刪除掉, 這個時候要先把對應(yīng)的容器刪掉才行
刪除指定鏡像的容器

docker stop $(docker ps | grep "這里寫imageName" | awk "{ print $1}")
docker rm $(docker ps | grep "這里寫imageName" | awk "{ print $1}")

刪除臨時構(gòu)建的鏡像

docker rmi $(docker images | grep "" | awk "{ print $3}")
prune 大殺器

這一手還是慎用,一些情況下可造成 rm -rf /* 的效果

#移除所有未使用的鏡像
docker image prune
#移除所有未運(yùn)行的容器
docker container prune
#移除所有未使用的本地卷
docker volume prune
...
PS: 因?yàn)橛羞@一手, 所以可以看出官方的態(tài)度, 他們貌似也許可能沒準(zhǔn)大概差不多不建議把容器當(dāng)成虛擬機(jī)一樣把所有的東西都堆在一個鏡像里面, 那樣搞不止構(gòu)建出來的鏡像臃腫, 而且維護(hù)性移植性很差, 從目前網(wǎng)上的 docker 鏡像資源來說, 基礎(chǔ)鏡像 alpine > debian > ubuntu > centos, 優(yōu)先使用最小的基礎(chǔ)構(gòu)建, 然后整個 image 只為一個服務(wù)而構(gòu)建, 比如 redis 鏡像里只要 redis, 沒有什么 MySQL, memcache 什么的, 多個獨(dú)立的 service 才組成一個 APP, 里面各個組件替換的話不用考慮其他組件的環(huán)境依賴什么的, 當(dāng)然, 這個也是看業(yè)務(wù)的實(shí)際需要, 不能為了拆分而拆分, 在這之間能找到最合適自己的才是工具給我們帶來的便利
docker network 容器之間的互聯(lián)

如果只是在一個容器里搞來搞去就真的是虛擬機(jī)了, docker 的強(qiáng)大之處就是它內(nèi)部維護(hù)一個網(wǎng)絡(luò), 處在相同網(wǎng)絡(luò)的容器是可以互通的

# 新建一個 docker 網(wǎng)絡(luò), -d bridge 是指定網(wǎng)絡(luò)模式, 當(dāng)前是橋接網(wǎng)絡(luò)
docker network create -d bridge nginx_swarm
# 啟動兩個 nginx 容器, 分別命名 nginx_swarm_a nginx_swarm_b , 兩者都加入了 nginx_swarm 這個網(wǎng)絡(luò)  --rm 是當(dāng)容器停止后自動刪除
docker run -it --rm  --name nginx_swarm_a --network nginx_swarm  nginx /bin/bash
docker run -it --rm  --name nginx_swarm_b --network nginx_swarm  nginx /bin/bash

注意, 我們并沒把接口暴露出去, 現(xiàn)在隨便在一個容器中 ping 另一個容器

# 這是在 nginx_swarm_a 中
# 沒有 ping 命令的先裝一個 ping
# apt-get update && apt-get install -y iputils-ping
root@73d04107780f:/# ping -c 3 nginx_swarm_b
PING nginx_swarm_b (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx_swarm_b.nginx_swarm (172.18.0.3): icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from nginx_swarm_b.nginx_swarm (172.18.0.3): icmp_seq=2 ttl=64 time=0.161 ms
64 bytes from nginx_swarm_b.nginx_swarm (172.18.0.3): icmp_seq=3 ttl=64 time=0.146 ms

--- nginx_swarm_b ping statistics ---

docker 能自動的把 server name 轉(zhuǎn)換成 ip, 我們只需要標(biāo)明請求的是哪個容器, 而不是還要記住它的 ip 地址(當(dāng)然 ip 地址也能設(shè)置)

總結(jié)

弄明白以下幾點(diǎn)啟動一個容器應(yīng)該是沒什么問題了:

國內(nèi)一定要使用國內(nèi)鏡像源, 不然會痛不欲生, 國內(nèi) docker 倉庫鏡像對比

分清鏡像和容器的概念, 容器就是基于鏡像構(gòu)建出來的一個實(shí)例

不要往容器中保存數(shù)據(jù), 容器應(yīng)該是無狀態(tài)的, 需要持久化保存的就docker run -v xx:xx 或者 docker create volume ... 用獨(dú)立的卷來保存

docker 不是虛擬機(jī)

分清楚宿主機(jī)端口和容器端口

處在相同network下的容器才能通過容器明互相訪問

參考資料:
Docker — 從入門到實(shí)踐
nginx 官方鏡像

下一章:
不正宗 docker 入門教程 構(gòu)建一個鏡像(2/3)

相關(guān)

不正宗 Docker 入門教程-啟動一個容器(1/3)

不正宗 Docker 入門教程-構(gòu)建一個鏡像(2/3)

不正宗 Docker 入門教程-使用 Docker-Compose (3/3)

博客原文

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27359.html

相關(guān)文章

  • 正宗 docker 入門教程-使用 docker-compose (3/3)

    摘要:看看它里面的鏡像是怎么寫的還是很有收獲的相關(guān)不正宗入門教程啟動一個容器不正宗入門教程構(gòu)建一個鏡像不正宗入門教程使用博客原文 本章通過一個具體的demo來了解 docker-compose docker-compose 是做什么的 在構(gòu)建一個完整的服務(wù)時,我們通常啟動一個容器, 一旦出現(xiàn)多個容器需要同時啟動的時候手打是下下之策, 因?yàn)闀r間一長難免會忘記細(xì)節(jié),寫腳本也不是不可以,但是大家沒...

    MorePainMoreGain 評論0 收藏0
  • awk刪除docker歷史鏡像

    摘要:初步列了以下方案用實(shí)現(xiàn)擅長,通過重定向?qū)⒌妮敵鰝鹘o,處理完后執(zhí)行系統(tǒng)命令清除鏡像。對鏡像列表進(jìn)行去重操作可以以鏡像名稱為進(jìn)行去重獲取歷史鏡像要保留最近個鏡像清除歷史鏡像,其實(shí)就是保留數(shù)據(jù)前行,有個內(nèi)置變量保存當(dāng)前處理行編號。 背景 雖然對awk早有耳聞,據(jù)說是個很強(qiáng)大的工具,但一直沒機(jī)會去了解和使用,最近碰到一個需求,用awk輕松解決,才真正一窺它的厲害。需求是這樣的,應(yīng)用每次升級都會...

    lentoo 評論0 收藏0
  • 慕課網(wǎng)_《Docker入門》學(xué)習(xí)總結(jié)

    摘要:時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個新的文件層??蛇x指定此鏡像啟動時默認(rèn)執(zhí)行命令。可選用于指定需要暴露的網(wǎng)絡(luò)端口號。可選向鏡像中掛載一個卷組。 時間:2017年09月16日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...

    CoorChice 評論0 收藏0
  • Docker零基礎(chǔ)入門指南(四):Docker容器使用

    摘要:原文地址零基礎(chǔ)入門指南四啟動容器啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止?fàn)顟B(tài)的容器重新啟動。此外,當(dāng)容器中指定的應(yīng)用終結(jié)時,容器也自動終止。命令命令用于進(jìn)入一個正在運(yùn)行的容器。 原文地址:Docker零基礎(chǔ)入門指南(四) 啟動容器 啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動。因?yàn)镈ocke...

    mj 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<