Docker入門的一點補充

2021-08-27 20:54:34 字數 2616 閱讀 1746

入門的大部分知識看

dockerfile的格式命令在這篇部落格大部分都可以查到

還有部署專案看就已經足夠了,裡面有一些漏的我就在這裡補充一下

1.映象的刪除,先刪除映象對應的容器,容器刪完了再刪除映象

對應的指令是  docker rm 容器id(docker ps -a 可以查詢容器列表)

docker rmi 映象id(docker images 可以查詢到映象列表)

2.容器的批量刪除/停止

docker rm/stop $(docker ps -aq)

3.window系統無法對docker容器埠對映

因為圖方便,我是直接在window裝了docker,在生成容器時,對容器進行了埠對映,然後用localhost:對映埠連線時,老是連線不了

後來看了這篇  才知道答案

因為docker是執行在linux上的,在windows中執行docker,實際上還是在windows下先安裝了乙個linux環境,然後在這個系統中執行的docker。也就是說,服務中使用的localhost指的是這個linux環境的位址,而不是我們的宿主環境windows

所以可以用docker-machine ip 查linux的ip是多少(192.168.99.100),然後再用192.168.99.100:埠號就能成功顯示了

4.dockerfile檔案建立需要在docker系統中建立,不能直接建立乙個txt檔案命名為dockerfile(因為我是window系統),不然的話會報錯

5.dockerfile中expose屬性的作用

作用:指定容器需要對映到宿主機器的埠

例子:比如說我現在有兩個應用(mysql跟oracle),分別是8080跟1521,我這樣寫

#在dockerfile裡這樣寫

expose 8080

export 1521

然後在生成容器時,這樣寫

docker run -p host_port1:8080 -p host_port2:1521 -p  image  

然後我們在訪問時,直接就宿主機ip:host_port1這樣訪問就可以了

總結:expose指令可以一次設定多個埠號,相應的執行容器的時候,可以配套的多次使用-p選項。

意義:埠對映是docker比較重要的乙個功能,原因在於我們每次執行容器的時候容器的ip位址不能指定而是在橋接網絡卡的位址範圍內隨機生成的。宿主機器的ip位址是固定的,我們可以將容器的埠的對映到宿主機器上的乙個埠,免去每次訪問容器中的某個服務時都要檢視容器的ip的位址。對於乙個執行的容器,可以使用docker port加上容器中需要對映的埠和容器的id來檢視該埠號在宿主機器上的對映埠。

6.docker run -v 引數的作用(用於新增資料卷)

把持久化的資料存到物理機 

-v 《宿主機目錄》:《容器目錄》

就會主機的/c/users/it_dept/redis/data和docker 中的目錄/data 建立map 關係

6.1經過測試,我有乙個mysql容器,是沒有掛載資料券的

容器的關閉跟重新啟動,mysql容器內的自建資料庫的資料不會丟失

但是如果宿主機重啟,會導致容器的資料丟失

但是容器內自建的檔案發現並不會丟失。

7.window上傳檔案到docker容器內

docker cp window檔案路徑  容器名:容器內要存放該檔案的路徑

例 docker cp apache-hive.tar.gz master:/usr/local/hivetest

8.容器打包成映象並且推到公共倉庫

1.docker commit 容器名稱 映象名稱:tag名

docker commit hadoop-test hadoop-test:v1

2.先在註冊個帳號

3.本地登入docker

docker login -u 帳號名 -p 密碼

看到login succeeded

4.docker push 映象名:tag名時,提示

docker push error 「denied: requested access to the resource is denied」

解決:docker tag 映象名:tag名  帳號名/映象名:tag名

docker tag hadoop-test:v1 838036089/hadoop-test:v1 

然後再docker push 帳號名/映象名:tag名就可以推成功了

9.docker容器啟動失敗又沒列印日誌

docker start 容器id 一直啟動不起來 通過 docker ps -a 看是有啟動,但馬上退出了

用docker logs 容器id也沒輸出日誌

查了下資料,說如果基礎映象,沒執行任何程序,肯定會馬上退出

建立容器的命令如下

docker run -d -p 9876:9876 --name rmqserver  foxiswho/rocketmq
如果我以這樣的命令建立,-d 變成 -itd 就不會有這樣的問題

docker run -itd -p 9876:9876 --name rmqserver  foxiswho/rocketmq

關於lexical cast,一點補充

看了凌傑的文章 http blog.csdn.net owl2008 archive 2004 09 28 119595.aspx 也想補充兩句。lexical cast比起stringstream來說,的確不一定簡潔,當然,其語義和可讀性都有提高,但同時也失之靈活。例如下面的情況,似乎就無法用le...

關於lexical cast,一點補充

看了凌傑的文章 也想補充兩句。lexical cast比起stringstream來說,的確不一定簡潔,當然,其語義和可讀性都有提高,但同時也失之靈活。例如下面的情況,似乎就無法用lexical cast辦到。include using namespace std int main int,char...

關於執行緒的一點補充

public class startdead extends thread public static void main string args 不要對處於死亡狀態的執行緒呼叫start 方法,程式只能對新建狀態的執行緒呼叫start 方法 對於新建狀態的執行緒兩次呼叫start 方法也是錯誤的,...