Docker容器不僅僅是運行原生的容器,而是把我們的具體的項目能夠布置到容器上面去,這就是Docker定制鏡像需要做的事情。 Docker容器 = new Docker鏡像 鏡像相當於類,容器相當於對象,所以修改了類之后,生成的容器也是根據需求生成的。
下面根據Dockerfile創建最簡單的定制化鏡像: 啟動tomcat容器主頁顯示 hello tomcat
1.Dockerfile定制鏡像
- 首先找到一個位置來放置我們的項目代碼,一般我們的程序都會放在 /usr/local/ 下
- cd /usr/local/ mkdir docker cd docker mkdir myproject cd myproject
- touch index.jsp vi index.jsp hello tomcat 保存
- touch Dockerfile #創建Dockerfile文件,一般定制化的鏡像構建時的配置文件默認名稱是 Dockerfile,下面是文件內容
From tomcat:latest
COPY index.jsp /usr/local/tomcat/webapps/ROOT
- From tomcat:latest #從tomcat鏡像繼承過來,tomcat是最新版本,同樣也可以用tomcat的版本號替換latest Copy index.jsp /usr/local/tomcat/webapps/ROOT #拷貝文件index.jsp到tomcat的ROOT目錄下 保存
- docker build -t 鏡像名字 . 構建鏡像 看清楚,最后還有一個點。 最后那個點的含義是表示當前目錄以及容器的上下文環境。鏡像的構建是不是在宿主機里面構建的 而是在Docker中構建的,構建的過程是把當前所在的目錄以及目錄下的所有文件拷貝到Docker,所以在Dockerfile中使用 ./ 想要跳回上級目錄是行不通的,因為構建之后的環境已經變了。
- 使用docker images 查看當前docker的鏡象信息,myshop是我創建的鏡像,鏡像的大小與tomcat一樣,因為鏡像本身就是在tomcat的基礎上創建的。
- docker run -p 8080:8080 --name myshop -d myshop myshop鏡像構建myshop容器 對外網映射到端口8080 並且以守護線程的方式運行 --name 容器的名字 -d myshop 以守護線程運行myshop鏡像
- docker ps 查看當前運行的docker容器 docker container rm 容器id 刪除容器 docker container ls -a 顯示所有的運行過的容器,運行容器的名稱不能與歷史容器的名稱相同。可以先刪除歷史容器記錄,再運行
- 運行結果
2.Dockerfile指令
- COPY 復制文件到一個目錄 格式:COPY 文件名或者帶路徑的文件名 目標路徑
- ADD 和COPY指令基本類似,只是又添加了一些功能,命令格式一致 添加功能:拷貝完成之后,如果是壓縮文件自動執行文件解析當目標文件目錄
- CMD 執行腳本命令 CMD ./startup.sh 只允許用一次 多個CMD只會執行最后一個
- ENTRYPOINT 也是執行腳本命令與CMD基本類似,也是只允許用一次 啟動多個命令 可以寫一個腳本集,把所有的命令都添加進去 ,再用ENTRYPOINT啟動
- ENV 環境變量 k=v
- EXPOSE 端口暴露,
- WORKDIR 類似於cd 進入目錄,指定容器的初始目錄
3.與docker容器的交互
docker exec -it 容器名 /bin/bash 使用shell腳本交互