入門的大部分知識看
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 方法也是錯誤的,...