Docker踩坑指南1:Docker的基本使用

Docker現(xiàn)在是一門非常流行的技術(shù),其實(shí)之前就一直想學(xué)卡乾,不過一是沒什么時(shí)間翼悴;二是沒有結(jié)合實(shí)踐,官方文檔又介紹的不是很清楚幔妨,導(dǎo)致其中很多命令都看不懂抄瓦,于是就沒有繼續(xù)下去了。
而這次我接了一個(gè)外包項(xiàng)目陶冷,實(shí)踐Docker的時(shí)候終于到了8奇ⅰ!埂伦!讓我們開始吧煞额。

一、Docker的介紹

Docker是一種虛擬化技術(shù)沾谜,用于解決開發(fā)環(huán)境的配置難題膊毁。可以把Docker就理解成一種虛擬機(jī)基跑,不過比VirtualBox和VMware等的虛擬機(jī)要輕量很多婚温,它沒有圖像化界面,并且與系統(tǒng)深度融合媳否,運(yùn)行效率非常高栅螟,可以說在使用它的時(shí)候幾乎察覺不出是虛擬機(jī),和真機(jī)體驗(yàn)很相似篱竭。
為什么要用Docker力图?很多服務(wù)端軟件的運(yùn)行環(huán)境配置起來非常麻煩,而最好的辦法就是把配置好的環(huán)境存起來掺逼,保存成一個(gè)類似操作系統(tǒng)鏡像的東西吃媒,同時(shí)在需要運(yùn)行這些軟件的地方運(yùn)行這個(gè)虛擬機(jī)鏡像,再在這個(gè)虛擬機(jī)里運(yùn)行這些服務(wù)端軟件,從而就避免了配置運(yùn)行環(huán)境的麻煩赘那。其次刑桑,它還封裝好了裝好tomcat、mysql等常用開發(fā)環(huán)境的鏡像募舟,使用起來方便很多祠斧。

Docker有兩個(gè)核心概念,Image和Container胃珍。Image就是類似操作系統(tǒng)鏡像一樣的東西梁肿,是靜態(tài)的蜓陌,可以對Image進(jìn)行啟動(dòng)和刪除觅彰。而Container則是正在運(yùn)行的Image,是動(dòng)態(tài)的钮热,可以對Container進(jìn)行停止填抬、繼續(xù)和刪除。同樣可以把Image和Container理解成面向?qū)ο笾械念惡蛯ο蟆?/p>


二隧期、Docker的安裝

Windows和Mac的Docker安裝起來都比較簡單飒责,有圖形化界面,用起來很簡單仆潮,這里就直接跳過宏蛉,不過安裝后記得配置國內(nèi)鏡像源,不然下載鏡像的速度會非常慢性置。
至于鏡像源地址的話拾并,登錄阿里云,搜索容器鏡像服務(wù)鹏浅,進(jìn)入鏡像加速器嗅义,就可以看到給每個(gè)用戶分配的鏡像加速器

阿里云鏡像加速器

Linux的Docker安裝起來則比較麻煩,這里只介紹服務(wù)端常用Linux發(fā)行版CentOS如何安裝Docker隐砸。

常規(guī)安裝流程

  1. 設(shè)置 repository
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  1. 安裝Docker Community
$ sudo yum install docker-ce docker-ce-cli containerd.io
  1. 開啟服務(wù)并試運(yùn)行
$ sudo systemctl start docker
$ sudo docker run hello-world

可能遇到的坑

本來按照上面的步驟是照著官網(wǎng)教程來的之碗,應(yīng)該是沒什么問題的,但我在運(yùn)行下面這句的時(shí)候卻報(bào)錯(cuò)了

$ sudo systemctl start docker
Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details.

但我按照提示輸入systemctl status docker.servicejournalctl -xe只看到提示異常退出季希,但沒有說具體是什么問題褪那,把輸出內(nèi)容在百度和谷歌上都也都沒什么用,好幾天都沒解決這個(gè)問題式塌。

后來不知道哪天看到有條命令武通,journalctl --since "2019-12-12 13:12:00"可以看系統(tǒng)某個(gè)時(shí)刻之后的所有日志,我這才找到了錯(cuò)誤原因I翰蟆冶忱!

Apr  4 22:09:06 localhost_02 dockerd: time="2019-04-04T22:09:06.128742412+08:00" level=info msg="Creating filesystem xfs on device docker-8:3-67789151-base, mkfs args: [-m crc=0,finobt=0 /dev/mapper/docker-8:3-67789151-base]" storage-driver=devicemapper
Apr  4 22:09:06 localhost_02 dockerd: time="2019-04-04T22:09:06.131080987+08:00" level=info msg="Error while creating filesystem xfs on device docker-8:3-67789151-base: exit status 1" storage-driver=devicemapper
Apr  4 22:09:06 localhost_02 dockerd: time="2019-04-04T22:09:06.131103910+08:00" level=error msg="[graphdriver] prior storage driver devicemapper failed: exit status 1"

核心錯(cuò)誤就是這個(gè)Error while creating filesystem xfs on device docker-8:3-67789151-base: exit status 1

然后在谷歌上一搜,果然找到了解決方案,具體看這個(gè)鏈接https://my.oschina.net/yuanhaohao/blog/3032396就可以解決囚枪,真是太激動(dòng)了派诬!

最后重新運(yùn)行docker服務(wù):

$ sudo systemctl daemon-reload
$ sudo systemctl start docker.service

三、Docker的常用命令

在命令行輸入docker --help就可以查看所有docker命令

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  ...

Commands:
  attach      Attach local standard input, output, and error streams 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 to files or directories 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
  ...

是不是有點(diǎn)眼花撩亂链沼?沒事默赂,我們慢慢來。

首先常用的命令有兩大類括勺,分別是針對Image和針對Container的缆八。

Docker Image命令

$ docker image build xxx

這個(gè)用于根據(jù)xxx目錄下的Dockerfile生成鏡像,下面一節(jié)會講解Dockerfile是什么疾捍,現(xiàn)在只需要認(rèn)為是一個(gè)自動(dòng)執(zhí)行腳本奈辰,可以根據(jù)需求自動(dòng)生成Docker鏡像文件

$ docker image ls

這條命令則用來查看所有鏡像的信息

參數(shù)名稱 解釋
倉庫位置 就像我前面幾個(gè)鏡像,是把我的鏡像存儲在阿里云上乱豆,后面沒有域名地址的則是來則Docker Hub官方倉庫
標(biāo)簽 就像軟件有不同的版本一樣奖恰,鏡像也有不同的版本,區(qū)分他們的就是鏡像標(biāo)簽
鏡像ID 每個(gè)鏡像獨(dú)有的ID
創(chuàng)建時(shí)間
鏡像大小



最后是一些比較簡單的命令:

$ docker image rm 鏡像ID或鏡像名
  刪除鏡像
$ docker image tag 源鏡像名 目標(biāo)鏡像名
  重新已經(jīng)存在的鏡像指定一個(gè)重名
$ docker image push 鏡像ID或鏡像名
  將鏡像上傳到云端(如果沒指定域名就默認(rèn)是官方的Docker Hub)
$ docker image pull 鏡像名
  從云端下載鏡像

PS:上面說的鏡像名都是指“倉庫位置:標(biāo)簽”


Docker Container命令

$ docker container run xxxx

這個(gè)命令比較復(fù)雜宛裕,直接用一個(gè)例子來介紹:
  • 紅色:docker run是docker container run的同義詞瑟啃,后面部分會介紹
  • 橙色:每個(gè)容器基本都會指定一個(gè)需要運(yùn)行的命令,用來開啟某個(gè)服務(wù)揩尸,而容器和這條命令是同生共死的蛹屿,而這個(gè)參數(shù)就是表示讓這條命令可以后臺運(yùn)行,也就是讓容器能夠后臺運(yùn)行岩榆。
  • 綠色:由于Docker類似于虛擬機(jī)错负,容器與外部之間是默認(rèn)不共享端口的,需要開放什么端口需要指定朗恳,格式是"外部端口:容器內(nèi)端口"
  • 藍(lán)色:設(shè)置容器內(nèi)的環(huán)境變量湿颅,我這里是設(shè)置MySql數(shù)據(jù)庫的root密碼以及默認(rèn)創(chuàng)建的數(shù)據(jù)庫名稱
  • 紫色:運(yùn)行的鏡像名,沒有指定標(biāo)簽的話默認(rèn)就是latest

還有很多其他參數(shù)粥诫,可以輸入docker container run --help查看幫助

$ docker container ls

它的用途是查看所有容器的信息

參數(shù)名稱 解釋
容器ID 與鏡像ID差不多油航,每個(gè)容器都獨(dú)一無二
來源的鏡像名
運(yùn)行的指令 這個(gè)在后面的Dockerfile里會介紹
創(chuàng)建時(shí)間
容器狀態(tài) 開啟還是暫停還是運(yùn)行結(jié)束
開放的端口 容器開放給外部的端口
容器名 不設(shè)置容器名稱的話系統(tǒng)會隨機(jī)給你一個(gè)

上面參數(shù)中的-a表示顯示所有容器,包括停止運(yùn)行的容器怀浆,而不加這個(gè)只會顯示正在運(yùn)行的和暫停的容器

$ docker container exec [OPTIONS] 容器ID或容器名 命令

這條命令則是用于在已經(jīng)運(yùn)行的容器中運(yùn)行某條命令

[OPTIONS]有很多谊囚,這里只介紹兩個(gè)最常用的:

  • -d:表示在后臺運(yùn)行命令,與上面的類似

  • -it:表示會開啟一個(gè)交互式終端执赡,我一般用下面的命令來進(jìn)入容器內(nèi)部的終端:docker container exec -it 容器ID bash


    最后是一些比較簡單的命令:

$ docker container commit 容器ID或容器名 鏡像名
  將運(yùn)行中的容器保存成鏡像
$ docker container rm 容器ID或容器名
  刪除已經(jīng)停止的容器(注意此命令不能刪除正在運(yùn)行的容器)
$ docker container kill 容器ID或容器名
  強(qiáng)行停止正在運(yùn)行的容器
$ docker container start/pause/restart 容器ID或容器名
  這些一看就知道是什么意思就不解釋了


真正常用的命令

真正常用的命令镰踏?難道意思是前面的都不常用?沙合?

對的奠伪,前面這些命令都太長了,我們一般都用它們的簡寫,替換規(guī)則如下:

docker run = docker container run
docker ps = docker container ls
docker commit = docker container commit
docker images = docker image ls
docker pull = docker image pull
docker push = docker image push
docker build = docker image build
docker rm = docker container rm
docker rmi = docker image rm
...

OK了绊率,Docker的基本使用到此告一段落谨敛,下一篇博客將介紹Dockerfile和Docker Compose等工具的使用!滤否!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脸狸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子藐俺,更是在濱河造成了極大的恐慌炊甲,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欲芹,死亡現(xiàn)場離奇詭異卿啡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耀石,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門牵囤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爸黄,“玉大人滞伟,你說我怎么就攤上這事】还螅” “怎么了梆奈?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長称开。 經(jīng)常有香客問我亩钟,道長,這世上最難降的妖魔是什么鳖轰? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任清酥,我火速辦了婚禮,結(jié)果婚禮上蕴侣,老公的妹妹穿的比我還像新娘焰轻。我一直安慰自己,他們只是感情好昆雀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布辱志。 她就那樣靜靜地躺著,像睡著了一般狞膘。 火紅的嫁衣襯著肌膚如雪揩懒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天挽封,我揣著相機(jī)與錄音已球,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛智亮,可吹牛的內(nèi)容都是我干的退疫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸽素,長吁一口氣:“原來是場噩夢啊……” “哼褒繁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起馍忽,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤棒坏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后遭笋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坝冕,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年瓦呼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喂窟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡央串,死狀恐怖磨澡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情质和,我是刑警寧澤稳摄,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站饲宿,受9級特大地震影響厦酬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瘫想,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一仗阅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧国夜,春花似錦减噪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至礼搁,卻和暖如春饶碘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馒吴。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工扎运, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瑟曲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓豪治,卻偏偏與公主長得像洞拨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子负拟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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

  • 一烦衣、Docker 簡介 Docker 兩個(gè)主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,388評論 0 27
  • 0x01 核心概念 Docker鏡像類似于虛擬機(jī)鏡像,可以理解為一個(gè)面向Docker引擎的只讀模板掩浙,包含了文件系統(tǒng)...
    閑云逸心閱讀 4,719評論 0 9
  • Docker簡介Docker是一個(gè)由GO語言寫的程序運(yùn)行的“容器”花吟; 目前云服務(wù)的基石是操作系統(tǒng)級別的隔離,在同一...
    gakiww閱讀 543評論 0 0
  • 1. 摘要 本文是輝哥Docker入門的一些摘要和資源分享,涉及DOCKER入門谬墙,框架原理,鏡像制作和資源列表等內(nèi)...
    筆名輝哥閱讀 4,572評論 0 74
  • 我回來了今布,同學(xué)們,這周我拉下好多課拭抬,三天沒去上課啦部默,突然做起作業(yè)時(shí)才發(fā)現(xiàn)我 居然不會做啦,玖喘,甩牺, 我著急了蘑志,對媽媽說...
    李博一黃金分割率閱讀 111評論 0 0