docker中的物件分為4個(就目前我所學到的)
映象 image
容器 container
網路 network
資料卷 volume
docker 對不同物件的操作格式為
docker (物件型別) (命令) [引數] (物件名)
比如,刪除乙個名為mysql的容器
docker container rm mysql
這些命令有:
命令功能
rm刪除
inspect
檢視詳細資訊
start
啟動容器
stop
關閉容器
create
建立ls
列出建立並執行乙個容器的命令為
docker run --name [名字] -d 映象名:標籤 一些要執行的命令
如果不加執行命令,容器會執行dockerfile裡指定的命令(如果存在)
比如:docker run --name mysql -d mysql:5.7
這裡基於mysql 5.7建立了乙個容器並取名為mysql,並且使其後台執行(-d)
映象名後不跟標籤預設為latest
將run
改成create
則為建立容器不執行
用start
命令啟動容器
用stop
命令停止容器
列舉一些引數
引數名功能
列舉--name
給容器取名字
--name mysql
-d後台執行容器
-d-e
指定環境變數
-e mysql_root_password=123
-v設定資料卷
-v mysql:/var/lib/mysql
--network
這是網路(預設bridge)
--network host
-p對映埠
-p 80:80
-p對映所有開放埠到本地(隨機)
-p--link
連線到某個已存在的容器,方便使用容器名訪問
--link mysql
常用命令為
docker exec -it 容器名 /bin/bash
exec
為執行命令的命令
-it
就是-i
和-t
,-i
表示標準輸入保持開啟,-t
表示分配乙個偽終端
這裡執行的命令為/bin/bash
,一般的容器都帶有bash
,有些則用sh
docker container inspect 容器名
通過命令docker network ls 可以檢視
當前擁有哪些網路型別,通常有一下幾種:
bridge 橋型別,也是預設型別,預設只能通過ip平通
host 主機型別,和主機共享網路,這樣就不必使用埠對映
none 不指定任何網絡卡,只有lo
使用bridge
的兩個網路通過ip可以ping通.若使用--link來建立容器時可以通過容器名ping通,但這是單向的,例:
已存在容器a,建立容器b時指定--link a
則在容器b使用命令ping a
可以ping通,在a裡使用命令ping b
則不行
一種特殊情況,
可以建立乙個自己的網路指定型別為bridge
,再建立幾個容器連線到自己建立的網路上,則這些容器可以通過名字互相ping通.例:
docker network create -d bridge my_bridge
注:這裡的-d
為指定網路的型別
資料卷一般用於資料持久化,下面以dockerhub官方的mysql映象為例,
檢視mysql的dockerfile可以看到volume /var/lib/mysql
這一行,說明mysql將資料儲存在容器中的/var/lib/mysql
目錄下,並自動掛載到乙個主機的目錄可以inspect
容器或者volume(啟動乙個mysql容器會產生乙個volume,可以用docker volume ls檢視)就可以看到詳細的目錄.但是自動生成的volume名字十分冗長,
修改volume的名字
docker run --name mysql1 -d -v mysql_v_name:/var/lib/mysql -e mysql_root_password=1 mysql
上面的命令是常見的啟動mysql容器的命令,其中-v mysql_v_name:/var/lib/mysql
命令指定了本地的掛載點:
前面就是本地的目錄,後面就是容器裡的目錄(可以通過dockerfile檢視),相當於重新命名
通過inspect可知道全路徑為:"/var/lib/docker/volumes/mysql_v_name/_data"
這樣的優點
建立第二個容器
docker run --name mysql2 -d -v mysql_v_name:/var/lib/mysql -e mysql_root_password=1 mysql
注意這裡的-v
後面指定的名字是前乙個容器的掛載點,這樣一來,前乙個容器刪除後,第二個容器可以接著使用第乙個容器的資料.
共享主機的資料夾
注意乙個原則,我們盡量不要在容器裡面操作,應當在外面通過命令來操控容器,通常情況下,容器是不帶vim或其他文字編輯工具的,所以一種有效的的辦法是通過主機和容器共享乙個資料夾,這樣一來就可以在主機裡通過vim等工具來編寫**.
docker run --name test -d -v /home/kainhuck/documents/pycode:/temp/pycode python:3.7
這裡建立乙個python3.7的容器,並將本地資料夾/home/kainhuck/documents/pycode
關聯到容器裡的/temp/pycode
目錄.
這種方式關聯的檔案相當於同乙個檔案,操作均為同步,裡面修改,外面也會修改.
近期學習總結
最近在忙著小 的寫作,主要研究方向是基於p2p網路的非結構搜尋演算法,這一周似乎就沒什麼進展,原因如下 1.思路太亂,切入點沒選好,範圍有點太廣,沒有就某一點做深入的研究。缺少學習後的及時總結,總是沒有一條主線。2.為了做實驗,有點急躁,思路沒有完全理順,就想著怎麼把實驗做好,做實驗的前期準備工作沒...
近期學習總結
前乙個月被藍圖卡主一星期之後,最近學習情況一般 1,跟著flask web一書敲 遇到不懂的查 主要 2,熟悉http原理,http 3,flask原理的熟悉 wsgi介面的學習,只是大概了解了一下,如果要深入學習flask的話,wsgi是繞不過去的 4,python基礎的複習,因為最近只是在學fl...
近期學習總結
最近學習到了指標這一塊的內容,學習指標的時候 只有乙個感受,頭有點疼。首先,說到指標,他就是乙個位址,指向已經開闢好的一塊空間,int num 10 int p 這裡的p就是乙個指標,指標是乙個位址,這個位址有能力指向乙個整形,還有比如 char p,float p,因為指向的內容不同,訪問的許可權...