前言
因為想研究能不能把docker應用到工作中,以變進行資料庫的整合測試,所以在這邊紀錄一下從Udemy中學到的docker基礎
事前準備
確認配置是否OK
Step1.開啟Docker Desktop
記得要登入才能開始使用
Step2.開啟WSL
Step3.確認指令是否能執行
1
docker version
備註:WSL在Windows檔案位置可以從以下位置取得
1
\\wsl$
WSL的Root在Windows的實體位置如下
1
\\wsl.localhost\Ubuntu\root
簡單建立一個Image
手動建立Dockerfile
注意:不用打附檔名,內容大致上像這樣
Windows CMD到Dockerfile的目錄底下使用以下指令就能開始建立Image了
1
docker build .
WSL中啟動剛剛建立的Image
1
docker run
可以使用指令自定義要Run的名稱, 這樣就不用打如上圖一樣的編碼
備註「-t」之後接的是自定義名稱
1
docker build -t demo .
接著使用以下指令就行了
1
docker run demo
hello-world
建立hello-world映像檔
使用docker容器,運行node.js Server
新增一個index.js檔,其內容為Hello World字串的網頁
1
2
3
4
const express = require('express');
const app = express();
app.get('/', (req, res) => {res.send('Hello World');});
app.listen(5050, () => {console.log('監聽5050 Port');});
新增package.json
1
2
3
4
5
6
7
8
{
"dependencies": {
"express": "*"
},
"scripts": {
"start": "node index.js"
}
}
建立Dockerfile,其內容
備註:COPY 是為了將同一個目錄下的index.js和package.json複製到容器中,這樣才能順利運行
1
2
3
4
FROM node:14-alpine
COPY ./ ./
RUN npm install
CMD ["npm", "start"]
Windows CMD 建立容器指令
為了方便我在這裡將容器名稱取為test
1
docker build -t test .
啟動容器,Mapping Port號
可以把啟動的容器,想像成一個虛擬機,虛擬機裡面的Port與外部電腦的Port都使獨立的,所以要Mapping
1
docker run -p 5050:8080 test
Mapping的關聯性
跳出監聽狀態
使用docker容器,運行MSSQL (compose.yml)
1.建立compose.yml 內容為以下
1
2
3
4
5
6
7
8
9
10
version: '3.3'
services:
mssql-server:
image: mcr.microsoft.com/mssql/server:2019-latest
environment:
SA_PASSWORD: YourPassword!123 # 設定 SQL Server SA 密碼
ACCEPT_EULA: Y
ports:
- '1433:1433'
2.以最高權限開啟PowerShell並到compose.yml目錄底下
1
docker-compose up -d
3.執行完畢能看到容器與映像檔都OK了
4.開啟SQL Server Management Studio,伺服器名稱如下,密碼照上面yml的設定
1
localhost\sql1,1433
使用docker容器,運行MSSQL (DockerFile)
在微軟提供的網站下載bak,進行DEMO
Windows作業系統下,還原bak的方式
右鍵,還原資料庫
因為是從微軟官網下載的Bak,所以我從裝置中,選取檔案
docker容器,建立MSSQL
Windows環境下,最高權限開啟PowerShell
使用指令在docker環境中下載MSSQL
1
docker pull mcr.microsoft.com/mssql/server:2019-latest
建立MSSQL的連線設定
如附圖資訊 帳號:SA 密碼:<YourStrong!Passw0rd>
1
2
3
4
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
--name "sql1" -p 1401:1433 `
-v sql1data:/var/opt/mssql `
-d mcr.microsoft.com/mssql/server:2019-latest
確認Docker的運行作態 from PowerShell command
確認Docker的運行作態 from Docker Desktop
測試在Windows環境下,能否登入剛剛建立的MSSQL
docker容器,還原bak
使用指令把bak複製到docker環境中
1
docker cp 'E:\\WideWorldImporters-Full.bak' sql1:/var/opt/mssql
確認是否複製成功
其一:直接在外層下Command
確認bak的資訊
1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost `
-U SA -P "<YourStrong!Passw0rd>" `
-Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/WideWorldImporters-Full.bak'"
其二:進入Docker環境中確認
確認運行中的Docker MSSQL的ID
1
docker exec -it 5277be57cfaf sh
進入其環境中
1
docker ps -a
確認bak的資訊
1
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourStrong!Passw0rd>" -Q 'restore filelistonly from disk = "/var/opt/mssql/WideWorldImporters-Full.bak"' | tr -s ' ' | cut -d ' ' -f 1-2
還原bak
1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "RESTORE DATABASE WideWorldImporters FROM DISK = '/var/opt/mssql/WideWorldImporters-Full.bak' WITH MOVE 'WWI_Primary' TO '/var/opt/mssql/data/WideWorldImporters.mdf', MOVE 'WWI_UserData' TO '/var/opt/mssql/data/WideWorldImporters_userdata.ndf', MOVE 'WWI_Log' TO '/var/opt/mssql/data/WideWorldImporters.ldf', MOVE 'WWI_InMemory_Data_1' TO '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1'"
檢查還原結果
重新整理MSSQL資料庫,確認WideWorldImporters有還原上去了
參考至微軟官網
使用Docker容器,運行.NET專案
建立.NET專案
發布
建立 Dockerfile
參考至微軟官網
https://learn.microsoft.com/zh-tw/dotnet/core/docker/build-container?tabs=windows
參考指令
列出執行WSL時,曾建立過的所有docker容器
1
docker ps --all
列出執行中的容器
1
docker ps -a
刪除docker容器
1
docker system prune
顯示Log
建立新容器並給命令
1
docker create busybox echo Hello
啟動容器
1
docker start
調用Logs,查看曾發過的命令,因為在creat時輸出Hello,所以Logs會顯示Hello
1
docker logs
停止運作中的docker容器
先用docker ps找出要停止的容器ID,再使用Stop指令
1
docker stop
先用docker ps找出要停止的容器ID,再使用Kill指令
1
docker kill
重新進入正在運行的docker容器中 備註1:Ctrl+D可以退出該模式 備註2:sh代表shell,可以理解成使用cmd指令的方式
1
docker exec -it 8996a9e964ac sh