docker使用筆記-windows平臺映象構建及使用
前言
上一篇 docker使用筆記-windows平臺安裝及配置 記錄了在windows平臺下的安裝和配置。由於專案組業務的需求,需要在windows平臺的docker下執行包含有vs2015執行時庫的程式。這篇文章就記錄一下在windows server 2016的環境下使用docker的過程。
一、 安裝docker
在windows server 2016平臺下安裝docker和win10平臺下基本一致,參考 docker使用筆記-windows平臺安裝及配置 。其中開啟Hyper-V功能略有不同,其他的都是一樣的。
我們預設完成安裝後,
- 已經切換到windows平臺下的docker映象使用
- 已經修改了映象加速
二、準備工作
相比linux平臺來說,在docker hub上windows平臺下的映象並不是很多,可以在docker hub上過濾一下看看,我這邊列舉幾個和本文相關的:
microsoft/windowsservercore
microsoft/nanoserver
上面microsoft/nanoserver
是Windows Server 2016的一套終極精簡部署版。點選 nanoserver和server2016 檢視的差異。
我這邊使用的是 microsoft/windowsservercore
為了避免不必要的麻煩。
1、拉去映象
microsoft/windowsservercore
的介紹。開啟windows server 2016的命令列,在命令列使用命令:
docker pull mcr.microsoft.com/windows/servercore:ltsc2016
拉取映象,如圖(我的環境上已經拉去下來了):
2、準備測試程式
1)編譯測試程式
我在我的物理機上寫了一個測試程式,用來測試是否能夠在docker上正確的執行程式。程式碼:
#include <iostream> using namespace std; int main() { cout << "hello world, c++" << endl; return 0; }
編譯之後生成了一個helloworld.exe的可以執行程式,且是在x64的平臺下。通過使用dumpbin.exe檢視依賴項,我將改程式依賴的所有dll都整理到了一個資料夾中。
2)檢視依賴項:
進入x64的dumpbin目錄下
執行命令:dumpbin.exe /DEPENDENTS C:\Users\Administrator\Desktop\helloworld\helloworld.exe
檢視依賴
再根據上面的依賴項的名字將所有的dll拷貝到資料夾servercore
中:
然後將該資料夾拷貝到windows server 2016的環境上去備用。至此,我們的準備工作基本完成了。
三、構建映象
1、dockerfile(什麼是dockerfile?)
在上一步的test資料夾下,建立一個名為 dockerfile
的檔案(注意全名就是dockerfile,並無任何的字尾),編譯以下內容:
FROM microsoft/windowsservercore
# 新增vc_redist.x64.exe 下載路徑,並安裝
ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe /vc_redist.x64.exe
RUN C:\vc_redist.x64.exe /quiet /install
# 設定工作目錄
WORKDIR /servercore
COPY / .
CMD helloworld.exe
結構如下:
2、構建映象
在cmd命令列中進入目錄 D:\servercore\
,看到已經下載下的映象有:
在當前目錄下,使用命令
docker build -t servercore:latest .
構建一個名字為 servercore
tag為latest
的docker映象,注意最後面的一個 .
,執行的過程如下:
新構建出的映象檔案
四、測試映象
構建出映象之後,我們執行映象即可,應該能夠在控制檯打印出一行 hello world, c++
的字樣:
到此,我們成功在docker上運行了使用vs執行庫的程式。
參考連結:
Docker for Windows部署VC++編譯的EXE程式方法
Dockerfile 中的 COPY 與 ADD 命令