對近期docker學習的總結

2022-07-03 08:15:08 字數 3346 閱讀 9657

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,因為指向的內容不同,訪問的許可權...