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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker从入门到实践笔记(一)

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker从入门到实践笔记(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

1. 修改已有鏡像

先使用下載的鏡像啟動容器。

$ sudo docker run -t -i training/sinatra /bin/bash root@0b2616b0e5a8:/#

在容器中添加 json 和 gem 兩個應用。

root@0b2616b0e5a8:/# gem install json

當結束后,我們使用 exit 來退出,現在我們的容器已經被我們改變了,使用docker commit命令來提交更新后的副本。

$ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c

其中,-m來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a可以指定更新的用戶信息;之后是用來創建鏡像的容器的 ID;最后指定目標鏡像的倉庫名和 tag 信息。創建成功后會返回這個鏡像的 ID 信息。

使用docker images來查看新創建的鏡像。

$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE training/sinatra latest 5bc342fa0b91 10 hours ago 446.7 MB ouruser/sinatra v2 3c59e02ddd1a 10 hours ago 446.7 MB ouruser/sinatra latest 5db5f8471261 10 hours ago 446.7 MB

之后,可以使用新的鏡像來啟動容器

$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash root@78e82f680994:/#

2. 利用 Dockerfile 來創建鏡像

使用docker commit來擴展一個鏡像比較簡單,但是不方便在一個團隊中分享。我們可以使用docker build來創建一個新的鏡像。為此,首先需要創建一個 Dockerfile,包含一些如何創建鏡像的指令。

新建一個目錄和一個 Dockerfile

$ mkdir sinatra $ cd sinatra $ touch Dockerfile

Dockerfile 中每一條指令都創建鏡像的一層,例如:

# This is a comment FROM ubuntu:14.04 MAINTAINER Docker Newbee <newbee@docker.com> RUN apt-get -qq update RUN apt-get -qqy install ruby ruby-dev RUN gem install sinatra

Dockerfile 基本的語法是

  • 使用#來注釋
  • FROM指令告訴 Docker 使用哪個鏡像作為基礎
  • 接著是維護者的信息
  • RUN開頭的指令會在創建中運行,比如安裝一個軟件包,在這里使用 apt-get 來安裝了一些軟件

編寫完成 Dockerfile 后可以使用docker build來生成鏡像。

$ sudo docker build -t="ouruser/sinatra:v2" . 其中-t標記來添加 tag,指定新的鏡像的用戶信息。 “.” 是 Dockerfile 所在的路徑(當前目錄),也可以替換為一個具體的 Dockerfile 的路徑。

*注意一個鏡像不能超過 127 層

此外,還可以利用ADD命令復制本地文件到鏡像;用EXPOSE命令來向外部開放端口;用CMD命令來描述容器啟動后運行的程序等。例如

# put my local web site in myApp folder to /var/www ADD myApp /var/www # expose httpd port EXPOSE 80 # the command to run CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

現在可以利用新創建的鏡像來啟動一個容器。

$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash root@8196968dac35:/#

還可以用docker tag命令來修改鏡像的標簽。

$ sudo docker tag 5db5f8471261 ouruser/sinatra:devel $ sudo docker images ouruser/sinatra REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 MB

*注:更多用法,請參考 Dockerfile 章節。

3. 存出鏡像

如果要導出鏡像到本地文件,可以使用docker save命令。

$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 c4ff7513909d 5 weeks ago 225.4 MB ... $sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

4. 載入鏡像

可以使用docker load從導出的本地文件中再導入到本地鏡像庫,例如

$ sudo docker load --input ubuntu_14.04.tar

$ sudo docker load < ubuntu_14.04.tar

這將導入鏡像以及其相關的元數據信息(包括標簽等)。

5. 移除本地鏡像

如果要移除本地的鏡像,可以使用docker rmi命令。注意docker rm命令是移除容器。

$ sudo docker rmi training/sinatra

*注意:在刪除鏡像之前要先用docker rm刪掉依賴于這個鏡像的所有容器。

6. 新建并啟動

所需要的命令主要為docker run。

$ sudo docker run -t -i ubuntu:14.04 /bin/bash root@af8bae53bdd3:/#

其中,-t選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上,-i則讓容器的標準輸入保持打開。

當利用docker run來創建容器時,Docker 在后臺運行的標準操作包括:

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像創建并啟動一個容器
  • 分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層
  • 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
  • 從地址池配置一個 ip 地址給容器
  • 執行用戶指定的應用程序
  • 執行完畢后容器被終止

7. 啟動已終止容器

可以利用docker start命令,直接將一個已經終止的容器啟動運行。

容器的核心為所執行的應用程序,所需要的資源都是應用程序運行所必需的。除此之外,并沒有其它的資源。可以在偽終端中利用ps或top來查看進程信息。

root@ba267838cc1b:/# psPID TTY TIME CMD1 ? 00:00:00 bash11 ? 00:00:00 ps

可見,容器中僅運行了指定的 bash 應用。這種特點使得 Docker 對資源的利用率極高,是貨真價實的輕量級虛擬化。

8. 守護態運行

更多的時候,需要讓 Docker 容器在后臺以守護態(Daemonized)形式運行。此時,可以通過添加-d參數來實現。

例如下面的命令會在后臺運行容器。

$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147

容器啟動后會返回一個唯一的 id,也可以通過docker ps命令來查看容器信息。

$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e5535038e28 ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage

要獲取容器的輸出信息,可以通過docker logs命令。

$ sudo docker logs insane_babbage hello world hello world hello world . . .

9. 終止容器

可以使用docker stop來終止一個運行中的容器。

此外,當Docker容器中指定的應用終結時,容器也自動終止。 例如對于上一章節中只啟動了一個終端的容器,用戶通過exit命令或Ctrl+d來退出終端時,所創建的容器立刻終止。

終止狀態的容器可以用docker ps -a命令看到。例如

sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba267838cc1b ubuntu:14.04 "/bin/bash" 30 minutes ago Exited (0) About a minute ago trusting_newton 98e5efa7d997 training/webapp:latest "python app.py" About an hour ago Exited (0) 34 minutes ago backstabbing_pike

處于終止狀態的容器,可以通過docker start命令來重新啟動。

此外,docker restart命令會將一個運行態的容器終止,然后再重新啟動它。

10. attach 命令進入容器

docker attach是Docker自帶的命令。下面示例如何使用該命令。

$ sudo docker run -idt ubuntu 243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia $sudo docker attach nostalgic_hypatia root@243c32535da7:/#

但是使用attach命令有時候并不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執行操作了。

11. 導出和導入容器

導出容器

如果要導出本地某個容器,可以使用docker export命令。

$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7691a814370e ubuntu:14.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test $ sudo docker export 7691a814370e > ubuntu.tar

這樣將導出容器快照到本地文件。

導入容器快照

可以使用docker import從容器快照文件中再導入為鏡像,例如

$ cat ubuntu.tar | sudo docker import - test/buntu:v1.0 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB

此外,也可以通過指定 URL 或者某個目錄來導入,例如

$sudo docker import http://example.com/exampleimage.tgz example/imagerepo

*注:用戶既可以使用docker load來導入鏡像存儲文件到本地鏡像庫,也可以使用docker import來導入一個容器快照到本地鏡像庫。這兩者的區別在于容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數據信息。

12. 刪除容器

可以使用docker rm來刪除一個處于終止狀態的容器。 例如

$sudo docker rm trusting_newton trusting_newton

如果要刪除一個運行中的容器,可以添加-f參數。Docker 會發送SIGKILL信號給容器。

轉載于:https://my.oschina.net/renguijiayi/blog/353835

總結

以上是生活随笔為你收集整理的Docker从入门到实践笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 疯狂伦交 | 欧美天天影院 | 国产美女无遮挡永久免费观看 | 91天天色| 伊人色播 | 午夜性 | 8x8ⅹ国产精品一区二区二区 | 免费黄色网址视频 | 久草中文在线 | 免费性情网站 | 黄色av影视 | 日本一区二区三区成人 | 日夜夜操 | www.一区| 成人毛片大全 | 精品久久伊人 | 中文在线永久免费观看 | 国产精品一区2区 | 992tv人人草 国产第6页 | 国产在线青青草 | 毛片啪啪啪 | 爽爽视频在线观看 | 欧美日韩亚洲二区 | 亚洲伦理久久 | 午夜两性视频 | www.久久爱| 亚洲欧美第一视频 | 黄色av免费观看 | 日韩第三页| 免费色网| 我爱av好色 | 日本精品黄| 韩国女同性做爰三级 | 亚洲黄视频| 黄色录像三级 | 精品动漫一区二区三区的观看方式 | 黄色xxxxxx| 这里只有精品999 | 6080成人| 久久婷婷六月 | www.玖玖玖 | 亚洲国产精品无码专区 | 色综合视频在线 | 国产伦精品一区二区三区照片91 | 日韩欧美手机在线 | 日韩毛片在线观看 | 樱花视频在线免费观看 | 奇米影视狠狠干 | 精品一区二区久久久 | 亚洲AV无码精品久久一区二区 | 久久久精品日本 | 久久一道本 | 黄色第一网站 | 日韩美女一级片 | 国产suv精品一区二区33 | 少妇精品偷拍高潮白浆 | 日韩高清一二三区 | 亚洲黄色在线播放 | 91香蕉视频黄色 | 黄色片xxxx| 亚洲人成无码网站久久99热国产 | 日韩免费影视 | 美女色av| 国产精品久久久免费视频 | 成人毛片18女人毛片 | 操女人免费视频 | 99久久毛片 | 秋霞精品一区二区三区 | 日韩三级中文字幕 | 狠狠干2024| 美女脱衣服一干二净 | 久久精品电影 | 一级黄色片在线播放 | 狠狠爱欧美 | 欧美精品一区二区三区在线播放 | 欧美粉嫩videosex极品 | 亚洲一区在线不卡 | 国产欧美精品一区二区色综合朱莉 | 久久国产精品区 | 高潮毛片无遮挡 | 国产视频三级 | 精品丰满人妻无套内射 | av黄色国产 | 麻豆影视网站 | 俄罗斯av在线 | 午夜美女福利视频 | 国产欧美日韩综合精品一区二区 | 在线观看不卡av | 高清av一区二区 | 免费观看黄色一级视频 | 麻豆久久久久久久久久 | 国产a级片 | 国产男男gay体育生网站 | www.伊人网 | 日本免费一区二区三区四区五六区 | 午夜99 | 久久偷看各类女兵18女厕嘘嘘 | 夜夜艹| 日韩亚洲欧美中文字幕 |