Docker 學習筆記合集第一季 —— image container 基本操做

Docker 學習筆記合集第一季 —— image container 基本操做

Docker · chenhengjie123 · 於 1 年前發佈 · 最後由 sanlengjingvv 於 1 年前回復 · 2262 次閱讀node

605

 本帖已被設爲精華帖!python

學習 docker 也有數週時間了,一直在 學基礎->手癢想實踐->實踐->卡住->回去學習基礎 的過程當中掙扎,總算是把 docker 的對 image,container 的基本操做都過了一遍(其實最基本的早就會了,只是一些相對用得很少的沒有用過)。所以把到目前爲止的一些學習筆記放在這裏分享一下(內容真心水,你們輕拍)。linux

Docker 學習筆記(1)– 在 mac 上配置環境
Docker 學習筆記(2)– docker 化(Dockerizing)應用: Hello-world
Docker 學習筆記(3)– Docker container
Docker 學習筆記(4)– Docker imagegit

最後在這裏簡單總結一下這些基本命令及基本概念,也做爲之後的一個速查表:程序員

基本概念:

  • container

容器。能夠把每一個 container 看作是一個獨立的主機。 container 的建立一般有一個 image 做爲其模板。類比成虛擬機的話能夠理解爲 image 就是虛擬機的鏡像,而 container 就是一個個正在運行的虛擬機。一個虛擬機鏡像能夠建立出多個運行的虛擬主機且相互獨立。 注意:container 一旦建立若是沒有用 rm 命令移除,將會一直存在。因此用完後記得刪除哦。github

  • image

鏡像。image 至關於 container 的模板,container 建立后里面有什麼軟件徹底取決於它使用什麼 image 。image 能夠經過 container 建立(至關於把此時 container 的狀態保存成快照),也能夠經過 Dockerfile (一個文本文件,裏面使用 docker 規定的一些寫法)來建立。其中經過 Dockerfile 建立的方法能讓環境配置和代碼一塊兒被版本庫一塊兒管理。web

  • registry

存放鏡像的倉庫。只要能鏈接到 registry 每一個人均可以很方便地經過 pull 命令從倉庫中獲取鏡像。docker 默認使用的倉庫是 docker hub,國內可使用 DaoCloud 來創建 Mirror 鏈接到 docker hub,進而加快獲取 image 的速度。docker

  • boot2docker

一個輕量級 linux 虛擬機,主要是爲了讓非 linux 系統也能用上 docker 。它實質上是一個 virtualbox 虛擬主機+一個能管理這個虛擬主機的命令行工具。因爲這個虛擬主機的存在,在非 linux 系統上 container 須要獲取一些物理系統資源(如 usb 設備)時不只須要配置 docker 命令,還須要配置 boot2docker 這個虛擬主機的資源配置。ubuntu

經常使用命令表

通用:windows

操做 命令 示例
查看 docker 版本 docker version docker version
查看 docker 信息 docker info docker info
查看某命令 help 信息 docker help [command] docker help attach
查看 docker help 信息 docker --help docker --help
  • container 相關:
操做 命令 示例
建立 container docker create docker create chenhengjie123/xwalkdriver
建立並運行 container docker run docker run chenhengjie123/xwalkdriver /bin/bash
建立並運行 container 後進入其 bash 控制檯 docker run -t -i image /bin/bash docker run -t -i ubuntu /bin/bash
建立並運行 container 並讓其在後臺運行,並端口映射 docker run -p [port in container]:[port in physical system] -d [image] [command] docker run -p 5000:5000 -d training/webapp python app.py
查看正在運行的全部 container 信息 docker ps docker ps
查看最後建立的 container docker ps -l docker ps -l
查看全部 container ,包括正在運行和已經關閉的 docker ps -a docker ps -a
輸出指定 container 的 stdout 信息(用來看 log ,效果和 tail -f 相似,會實時輸出。) docker logs -f [container] docker logs -f nostalgic_morse
獲取 container 指定端口映射關係 docker port [container] [port] docker port nostalgic_morse 5000
查看 container 進程列表 docker top [container] docker top nostalgic_morse
查看 container 詳細信息 docker inspect [container] docker inspect nostalgic_morse
中止 continer docker stop [container] docker stop nostalgic_morse
強制中止 container docker kill [container] docker kill nostalgic_morse
啓動一個已經中止的 container docker start [container] docker start nostalgic_morse
重啓 container (若 container 處於關閉狀態,則直接啓動) docker restart [container] docker restart nostalgic_morse
刪除 container docker rm [container] docker rm nostalgic_morse

命令中須要指定 container 時,既可以使用其名稱,也可以使用其 id 。

  • image 相關:
操做 命令 示例
從 container 建立 image docker commit [container] [imageName] docker commit nostalgic_morse ouruser/sinatra:v2
從 Dockerfile 建立 image docker build -t [imageName] [pathToFolder] docker build ouruser/sinatra:v3 .
查看本地全部 image docker images docker images
在 registry 中搜索鏡像 docker search [query] docker search ubuntu
從 registry 中獲取鏡像 (若無指定 tag 名稱,則默認使用 latest 這個 tag) docker pull [imageName] docker pull ubuntu:14.04docker pull training/webapp
給 image 打 tag docker tag [imageId] [imageName] docker tag 5db5f8471261 ouruser/sinatra:devel
把本地 image 上傳到 registry 中 (此時會把全部 tag 都上傳上去) docker push [imageName] docker push ouruser/sinatra
刪除本地 image docker rmi [image] docker rmi training/sinatra

注意:image 中沒有指定 tag 名稱的話默認使用 latest 這個 tag 。然而 latest 的含義和 VCS 中的 head 不同,不是表明最新一個鏡像,僅僅是表明 tag 名稱爲 latest 的鏡像。若不存在 tag 名稱爲 latest 的鏡像則會報錯。

總結

docker 雖然是一個虛擬化技術,但使用上卻更像是在管理系統軟件或者代碼。裏面的一些 pstoprm 命令讓使用 Linux 命令的人感到十分親切(雖然它們的語義有點不同。。。),startstoprestart 讓你感受像是在控制 service ,而 pushpullcommittag 又讓你以爲像是在使用 git 。所以程序員會感到很親切且容易上手。

同時因爲可使用 Dockerfile 進行 image 的構建,且 docker hub 支持從 github 等地方自動根據 Dockerfile 進行構建,因此 docker 把運行環境也集成到 CI 中了。

美中不足的是因爲 docker 目前僅支持 linux 上的容器技術,所以它要在非 Linux 系統下運行必須加多一個虛擬機層。這會形成一些在 Linux 上運行不會出現的問題(ip 地址、硬件資源、文件映射等),同時因爲基於 linux ,一些 windows 的程序會水土不服,泛用性比虛擬機差一些。

但帶來的好處是佔用的系統資源低不少。一個只能開數個虛擬機的電腦通常能開數十個 container ,且 container 的啓動時間通常在數秒內,比虛擬機快得多。另外,因爲 docker 的 image 除了一些特殊的基礎鏡像外基本都是增量鏡像,所以重複部分不會耗費額外的資源,因此幾個看起來有數 g 的 image 若是裏面使用的基礎鏡像有重複部分(大部分狀況下都會有部分重複),那麼它們實際佔用空間將會小得多。

相關文章
相關標籤/搜索