日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker入门,看了不理解,假一赔命

發(fā)布時間:2025/3/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker入门,看了不理解,假一赔命 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面

  • 這篇博客適合誰?

    • 對于Docker并不了解,只是有一點(diǎn)模糊的感覺,覺得Docker可以當(dāng)成虛擬機(jī)用之類的

    • 只是下載了Docker軟件,對于怎么配置,怎么玩,第一步干什么,完全一無所知

    • 其二,我從對Docker只有及其模糊(真的是模糊,我除了知道Docker是跟虛擬系統(tǒng)有關(guān)其他啥都不知道),到現(xiàn)在起碼一問一不知(對應(yīng)一問三不知)的狀態(tài),大概花了8個小時。

      這期間全靠我從網(wǎng)絡(luò)上搜索到的資料。

      現(xiàn)在用我的話寫出來,我覺得對于跟我相同開始情況的小白用戶,能省不少時間,所以我要寫。

    • 其次,確實(shí),現(xiàn)在Docker相關(guān)的文章真的太多了,那我為什么還要寫呢?

    這篇文章主要是哪方面的Docker文章,純?nèi)腴T?

    • 你做了哪些工作?

    • 首先,我一直都很好奇Docker這個東西,但從來沒有機(jī)會去使用它。

      但是,這學(xué)期OS課的lab,純Linux系統(tǒng)編程,雖然使用雙系統(tǒng)或者虛擬機(jī)都是純小學(xué)生的難易程度了,也不麻煩,但我想,為什么不用Docker呢?

      用雙系統(tǒng)或者虛擬機(jī)也太過小兒科!

      所以,我就這樣接觸了Docker

    • 那么我使用Docker實(shí)現(xiàn)了什么?

      在lab中,我們需要用到的是純終端下的gcc工具鏈還有vim等,那么這就是我需要的全部軟件了!

      于是我在Docker中實(shí)現(xiàn)了「gcc+gdb+vim」環(huán)境,并push到了hub中。

    • 首先對于Docker的概念作出我的解釋,盡量通俗易懂

    • 接著針對我用Docker的目的,從最開始的軟件下載,到最后push一個自己的鏡像到hub,整個過程以白話的形式描述出來,降低入門門檻,節(jié)省你的學(xué)習(xí)時間

    • 很高興你問了我這個問題。

入門Docker,你要下載什么?注冊什么?

Docker for mac,這個你肯定要下載:點(diǎn)我下載Docker for mac and Windows的社區(qū)免費(fèi)版本(https://www.docker.com/products/docker-desktop)

注冊Docker官方賬號,你需要它,像github一樣你可以使用git把項(xiàng)目上傳到上面!

注冊一個Docker的官方賬號,有利而無害,相信我!點(diǎn)我注冊Docker Cloud官方賬號

Docker安裝好,賬號也注冊后,點(diǎn)擊桌面頂欄的Docker圖標(biāo),點(diǎn)擊sign in,登陸你的Docker賬號。

注冊DaoCloud賬號,獲取加速服務(wù)!

不可否認(rèn),有時直接從Docker官方往本地pull鏡像會十分緩慢。。。這時我們可以通過國內(nèi)的Docker服務(wù)提供商免費(fèi)獲取加速pull鏡像服務(wù),阿里網(wǎng)易好像都有這種服務(wù),我選擇的是DaoCloud:點(diǎn)我注冊DaoCloud賬號

注冊后登陸DaoCloud,找到這個按鈕:

Docker加服務(wù)記得自行注冊!

Docker的理解:

Docker,可以說是一個終端命令行的虛擬機(jī),但更準(zhǔn)確的說法,其實(shí)應(yīng)該是一個虛擬環(huán)境。比如,你想要在PC上無縫使用Linux么?那么虛擬機(jī)并不是你唯一的出路,你還有Docker!我更愿意稱Docker為一個容器,當(dāng)然這只是Docker的一個狹義解釋,Docker不止是一個容器,Docker包含3個重要概念:

  • 鏡像(Image)

    鏡像是靜態(tài)的、可以被用戶互相分享的文件。

    我們玩過雙系統(tǒng)和虛擬機(jī)的人都知道,首先你需要一個.iso鏡像,才能安裝系統(tǒng)。

    Docker中的鏡像也是這個東西,鏡像是靜態(tài)的,你不能對他操作,只能pull別人的鏡像或者push自己的鏡像。

  • 容器(Container)

    前面說過,鏡像是靜態(tài)不可操作的,只能被分享和下載,那什么是能被操作的呢?

    就是容器里!

    容器可以理解為鏡像的動態(tài)狀態(tài),也就是我們虛擬機(jī)中系統(tǒng)裝好后的狀態(tài),其實(shí)這么說是不對的,容器最符合的描述應(yīng)該是Linux的iso文件的Live CD模式,比如我們玩雙系統(tǒng)時都進(jìn)入過Live CD模式,不安裝系統(tǒng)而直接進(jìn)入系統(tǒng),很神奇是吧,Docker的容器就是這個概念,只不過更加輕量更加迅速便捷。

    但是Live CD的害處就是你關(guān)機(jī)后作出的修改安裝的軟件全部gg,容器也是一樣,一旦被直接推出,之前安裝的gcc啊vim啊啥的就會全部gg掉。

    如果要保存修改,就需要將當(dāng)前容器封裝成一個新的鏡像,這樣下次啟動這個新的鏡像后之前作出的修改還都在。

  • 倉庫(Repository)

    各位在前面看到我寫的pull和push什么的,有沒有暈?

    不知道各位對于git熟悉不熟悉,Docker中的倉庫很像git的代碼倉庫,你可以pull自己之前push到自己倉庫的鏡像到本地,也可以pull別人push到公共倉庫的鏡像到自己本地。

    說白了就是百度云盤,你可以上傳(push)自己做好環(huán)境的Docker上去,也可以下載(pull)自己云端的鏡像到本地。

    同時,我們知道百度云最大的特點(diǎn)就是分享(你懂的嘿嘿嘿),類比Docker,如果你得到百度云分享鏈接(別人的鏡像名字、標(biāo)簽和別人的用戶名),你還可以下載(pull)別人分享的鏡像到自己的本地,別人也可以下載(pull)你的鏡像,因?yàn)镈ocker倉庫都是公共的。

    當(dāng)然,每個免費(fèi)用戶有一個名額把自己的一個鏡像設(shè)為私有。

這些概念如果你,使用Github就超級好理解了

實(shí)際操作下

查看Docker版本信息

終端輸入:docker?version

顯示的我的版本信息

~$ docker versionClient: Version: 17.06.2-ce API version: 1.30 Go version: go1.8.3 Git commit: cec0b72 Built: Tue Sep 5 20:12:06 2017?OS/Arch:??????darwin/amd64

當(dāng)然如果你需要簡單的信息可以使用docker -v

如何Pull你的第一個鏡像?

Docker安裝好后是不會自帶鏡像的,你需要從倉庫自己pull一個鏡像下來,自己制作自己的鏡像也是一個道理,你可以通過在已有的鏡像基礎(chǔ)上生成自己的鏡像或者:隨便百度的如何創(chuàng)建自己Docker鏡像得到的教程

Docker鏡像官方好像只提供Linux

搜索ubuntu的Docker鏡像docker search ubuntu,或者你想要的任何一個版本號的linux:

~$ docker search ubuntuNAME DESCRIPTION STARS OFFICIAL AUTOMATEDubuntu Ubuntu is a Debian-based Linux operating s... 6636 [OK]dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 131 [OK]rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 105 [OK]ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 86 [OK]ubuntu-upstart Upstart is an event-based replacement for ... 80 [OK]neurodebian NeuroDebian provides neuroscience research... 40 [OK]ubuntu-debootstrap?????????????????debootstrap?--variant=minbase?--components...???31??????????????????[OK]

拉取官方最新版的ubuntu鏡像:docker pull ubuntu:latest,其中的latest是一個標(biāo)簽(tag),表示是當(dāng)前最新版本。你應(yīng)該得到的信息,類似這樣的

~$ docker pull ubuntu:latestTrying to pull repository docker.io/library/ubuntu ...latest: Pulling from docker.io/library/ubuntuaed158d74952: Pull complete773ae8273d14: Pull completed1d487w88782: Pull completecd3d6cd6c0cf: Pull complete8d73bu79120c: Pull completeDigest: sha256:35bc48a1ca97c3f74rhf378hj92hd82j29i4hf4hf84nf0dhnsid232de8d8Status: Downloaded newer image for docker.io/ubuntu:latest

你輸入的命令實(shí)際上相當(dāng)于

docker pull registry.hub.docker.com/ubuntu:latest

命令,即從注冊服務(wù)器registry.hub.docker.com中的名為ubuntu的倉庫中下載標(biāo)簽為latest的鏡像。

由于我的lab統(tǒng)一要求,ubuntu需要14.04版本,所以我在hub里面搜了搜,找到了一個用戶分享的14.04 64位純凈鏡像(base image),下面將他的鏡像扒下來

~$ docker pull chug/ubuntu14.04x64 這個用戶還有很多其他版本的ubuntu系統(tǒng),12 13 14的32位64位都有,全是純凈鏡像。


查看你本地的鏡像倉庫!

把初始鏡像拉下來后,就可以啟動它了,不過,可以先使用docker images命令查看你自己的本地鏡像,我隨便找了個例子,你的也應(yīng)該是類似這樣的:

~$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/ubuntu 16.04 e4415b714b62 11 days ago 128.1 MBdocker.io/ubuntu latest e4415b714b62 11 days ago 128.1 MBdocker.io/ubuntu 12.04 aefa163f7a7e 11 days ago 103.5 MBdocker.io/centos latest 0584b3d2cf6d 3 weeks ago 196.5 MB

在列出信息中,可以看到幾個字段信息:

  • 來自于哪個倉庫,比如 ubuntu

  • 鏡像的標(biāo)記,比如 16.04

  • 它的 ID 號(唯一),比如e4415b714b62

  • 創(chuàng)建時間

  • 鏡像大小

其中鏡像的 ID 唯一標(biāo)識了鏡像,注意到 ubuntu:16.04 和 ubuntu:latest具有相同的鏡像 ID ,說明它們實(shí)際上是同一鏡像。TAG 信息用來標(biāo)記來自同一個倉庫的不同鏡像。例如 ubuntu 倉庫中有多個鏡像,通過 TAG 信息來區(qū)分發(fā)行版本,例如10.04 、 12.04 、 12.10 、 13.04 、 14.04 等。例如可以使用docker run -t -i ubuntu:16.04 /bin/bash命令指定使用鏡像ubuntu:16.04來啟動一個容器。如果不指定具體的標(biāo)記,則默認(rèn)使用latest標(biāo)記信息。

啟動鏡像并且安裝軟件

比如:

現(xiàn)在你已經(jīng)有一個初始的鏡像了,注意這個里面是什么都沒有的,連vim都沒裝,是精簡到不能再精簡的鏡像了。

1.首先啟動它:

~$ docker run -it chug/ubuntu14.04x64 /bin/bashroot@aa97ba3292ce:/#

-it 表示運(yùn)行在交互模式,是-i -t的縮寫,也可以兩個連在一起寫-it是兩個參數(shù):-i和-t。前者表示打開并保持stdout,后者表示分配一個終端(pseudo-tty)一般這個模式就是可以啟動bash,然后和容器有命令行的交互

可以看到我們終端的字頭變成root@aa97ba3292ce:/#了,這就意味著我們的鏡像已經(jīng)創(chuàng)建了一個容器實(shí)例。現(xiàn)在我們可以對這個“ubuntu系統(tǒng)”進(jìn)行操作了

比如安裝vim:

root@aa97ba3292ce:/# apt-get install vimReading package lists... DoneBuilding dependency tree... DoneThe following extra packages will be installed: file libexpat1 libffi6 libgpm2 libmagic1 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libsqlite3-0 libssl1.0.0 mime-support vim-common vim-runtimeSuggested packages: gpm ctags vim-doc vim-scriptsThe following NEW packages will be installed: file libexpat1 libffi6 libgpm2 libmagic1 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libsqlite3-0 libssl1.0.0 mime-support vim vim-common vim-runtime0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.Need to get 10.7 MB of archives.After this operation, 50.7 MB of additional disk space will be used.Do you want to continue? [Y/n]

看到我沒有用sudo,是因?yàn)楸緛砭鸵呀?jīng)是超級用戶(root)狀態(tài)了,可以看#代表超級用戶$代表普通用戶這個是Linux的基礎(chǔ)知識不要忘了。

同理也可以更具自己的需求安裝更多的軟件。

想退出容器?很簡單!

如果使用exit,命令退出,則容器的狀態(tài)處于Exit,而不是后臺運(yùn)行。

如果想讓容器一直運(yùn)行,而不是停止,可以使用快捷鍵 ctrl+p或者 ctrl+q 退出。此時容器的狀態(tài)為Up。

查看當(dāng)前正在運(yùn)行的容器:

~$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESaa97ba3292ce??chug/ubuntu14.04x64???"/bin/bash"????7?minutes?ago??Up?7?minutes???relaxed_hoover

這里我們可以看到當(dāng)前有一個ID為aa97ba3292ce的容器

那麼如何控制它呢?

啟動、停止、重啟容器aa97ba3292ce的命令分別是:

~$ docker start aa97ba3292ce~$ docker stop aa97ba3292ce~$ docker restart aa97ba3292ce

后臺啟動一個容器后,如果想進(jìn)入到這個容器,可以使用attach命令:

~$ docker attach aa97ba3292ce

軟件裝完,想保存環(huán)境?commit幫你!你這會是不是想起了git?commit -m“”?沒錯類似。

將容器轉(zhuǎn)化為一個鏡像,即執(zhí)行commit操作,完成后可使用docker images查看

root@aa97ba3292ce:/#exit //先退出容器~$ docker commit -m "ubuntu with vim" -a "sgy" aa97ba3292ce sgy/ubuntu:vim~$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEsgy/ubuntu vim 52166e4475ed 5 seconds ago 358.1 MBchug/ubuntu14.04x64 latest 0584b3d2cf6d 9 days ago

其中,-m指定說明信息;-a指定用戶信息;aa97ba3292ce代表容器的id;sgy/ubuntu:vim指定目標(biāo)鏡像的用戶名、倉庫名和 tag 信息。我這里都是為了瞎編的用戶名,我自己的用戶名也不是sgy。

你運(yùn)行命令的時候使用自己注冊Docker時的用戶名。

此時Docker中就有了我們新建的鏡像sgy/ubuntu:vim,此鏡像和原有的ubuntu鏡像區(qū)別在于多了個vim工具。此時我們利用新鏡像創(chuàng)建的容器,本身就自帶vim了。

啟動新創(chuàng)建的鏡像,可以看到vim已經(jīng)自帶了。

~$ docker run -it sgy/ubuntu:vim /bin/bashroot@520afc596c51:/# vim --versionVIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 4 2017 18:14:54)

利用exit退出容器。此時Docker引擎中就有了兩個容器,可使用docker ps -a查看。

如果你想要刪除鏡像?

如果想刪除容器或者鏡像,可以使用rm命令。

注意:刪除鏡像前必須先刪除以此鏡像為基礎(chǔ)的容器(哪怕是已經(jīng)停止的容器),否則無法刪除該鏡像,會報錯Failed to remove image (e4415b714b62): Error response from daemon: conflict: unable to delete e4415b714b62 (cannot be forced) - image has dependent child images類似這種。

~$ docker rm container_id~$ docker rmi image_id 你要選擇刪除鏡像的ID

有的時候盡管刪除了全部容器,鏡像還是無法刪除,這時點(diǎn)擊mac頂欄中的docker logo,選擇restart,然后再試一次rmi,應(yīng)該就沒問題了。

docker命令圖

官網(wǎng)流傳一次配置到處使用,這個就相當(dāng)于我們做系統(tǒng),首先我們下載一個正版系統(tǒng)然后在里面安裝上我們需要的程序,然后再把它刻錄成iso文件放在u盤上面,等電腦壞了再插上u盤做系統(tǒng)。

如何到處使用呢?“那我們把鏡像放在U盤(docker庫)上面”,那就push到hub上吧!

因?yàn)橹耙呀?jīng)在Docker.app中登陸了Docker賬號,所以現(xiàn)在直接

~$ docker push sgy/ubuntu:vim

就可以了!

下次到了機(jī)房,在ubuntu系統(tǒng)中安裝Docker,配置好加速器,啟動Docker,docker login登陸自己的賬號,然后直接~$ docker pull sgy/ubuntu:vim就可以把你push到hub的已經(jīng)配置好的環(huán)境的鏡像給扒下來。做完實(shí)驗(yàn),再push上去就ok了!

方便大家記憶我這里舉個例子docker就相當(dāng)于給電腦做系統(tǒng)

下載系統(tǒng)-》裝應(yīng)用軟件-》做成鏡像文件-》上傳到U盤-》需要的話隨時下載重裝系統(tǒng)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

最后

Docker目前來說是一個軟件工程師必備的基礎(chǔ)技術(shù),現(xiàn)在參加一些編程大賽都是要求參賽選手把自己的配置打包成一個docker文件與作品一起提交,保證作品的可運(yùn)行,那麼在企業(yè)開發(fā)過程中我們也嘗試用docker k8s進(jìn)行企業(yè)項(xiàng)目的部署應(yīng)用,作為擴(kuò)展內(nèi)容的話還是希望大家了解完docker再了解下docker k8s,因?yàn)槲宜诘牟徽撌请娋W(wǎng),易車等上市公司世界20強(qiáng)企業(yè)都是使用docker k8s進(jìn)行部署。

往期推薦

Java 14 發(fā)布了,不使用"class"也能定義類了?還順手要干掉Lombok!

2020-03-25

太贊了:《Effective Java 第三版》最新中文版開放下載!

2020-03-25

【盤它!】那些讓效率MAX的工具和方法(Mac篇)

2020-03-25

你還不了解Redis的發(fā)布/訂閱功能與Redis的Stream嗎

2020-03-24

有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

歡迎大家關(guān)注Java之道公眾號

好文章,我在看??

總結(jié)

以上是生活随笔為你收集整理的Docker入门,看了不理解,假一赔命的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。