首頁 Docker
文章
Cancel

Docker

前言

因為想研究能不能把docker應用到工作中,以變進行資料庫的整合測試,所以在這邊紀錄一下從Udemy中學到的docker基礎

事前準備

確認配置是否OK

Step1.開啟Docker Desktop

Desktop View

記得要登入才能開始使用

Desktop View

Step2.開啟WSL

Desktop View

Step3.確認指令是否能執行

Desktop View

1
 docker version

備註:WSL在Windows檔案位置可以從以下位置取得

Desktop View

1
 \\wsl$

WSL的Root在Windows的實體位置如下 Desktop View

1
\\wsl.localhost\Ubuntu\root

簡單建立一個Image

手動建立Dockerfile

注意:不用打附檔名,內容大致上像這樣

Desktop View

Windows CMD到Dockerfile的目錄底下使用以下指令就能開始建立Image了

Desktop View

1
docker build .

WSL中啟動剛剛建立的Image

Desktop View

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

Desktop View

1
docker build  -t test .

啟動容器,Mapping Port號

可以把啟動的容器,想像成一個虛擬機,虛擬機裡面的Port與外部電腦的Port都使獨立的,所以要Mapping

Desktop View

1
docker run -p 5050:8080 test

Mapping的關聯性

Desktop View

跳出監聽狀態

Desktop View

使用docker容器,運行MSSQL (compose.yml)

1.建立compose.yml 內容為以下

Desktop View

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目錄底下

Desktop View

1
docker-compose up -d

3.執行完畢能看到容器與映像檔都OK了

4.開啟SQL Server Management Studio,伺服器名稱如下,密碼照上面yml的設定

Desktop View

1
localhost\sql1,1433

使用docker容器,運行MSSQL (DockerFile)

在微軟提供的網站下載bak,進行DEMO

Desktop View

Windows作業系統下,還原bak的方式

右鍵,還原資料庫

Desktop View

因為是從微軟官網下載的Bak,所以我從裝置中,選取檔案

Desktop View Desktop View Desktop View Desktop View

docker容器,建立MSSQL

Windows環境下,最高權限開啟PowerShell

Desktop View

使用指令在docker環境中下載MSSQL

Desktop View

1
docker pull mcr.microsoft.com/mssql/server:2019-latest

建立MSSQL的連線設定

如附圖資訊 帳號:SA 密碼:<YourStrong!Passw0rd>

Desktop View

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

Desktop View

確認Docker的運行作態 from Docker Desktop

Desktop View

測試在Windows環境下,能否登入剛剛建立的MSSQL

Desktop View

docker容器,還原bak

使用指令把bak複製到docker環境中

Desktop View

1
docker cp 'E:\\WideWorldImporters-Full.bak' sql1:/var/opt/mssql

確認是否複製成功

其一:直接在外層下Command

確認bak的資訊

Desktop View

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

Desktop View

1
docker exec -it 5277be57cfaf sh

進入其環境中

Desktop View

1
docker ps -a

確認bak的資訊

Desktop View

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

Desktop View

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有還原上去了

Desktop View

參考至微軟官網

https://learn.microsoft.com/zh-tw/sql/linux/tutorial-restore-backup-in-sql-server-container?view=sql-server-ver16

使用Docker容器,運行.NET專案

建立.NET專案

發布

建立 Dockerfile

參考至微軟官網

https://learn.microsoft.com/zh-tw/dotnet/core/docker/build-container?tabs=windows

參考指令

列出執行WSL時,曾建立過的所有docker容器

Desktop View

1
docker ps --all

列出執行中的容器

Desktop View

1
docker ps -a

刪除docker容器

Desktop View

1
docker system prune

顯示Log

建立新容器並給命令

Desktop View

1
docker create busybox echo Hello

啟動容器

Desktop View

1
docker start

調用Logs,查看曾發過的命令,因為在creat時輸出Hello,所以Logs會顯示Hello

Desktop View

1
docker logs

停止運作中的docker容器

先用docker ps找出要停止的容器ID,再使用Stop指令

Desktop View

1
docker stop

先用docker ps找出要停止的容器ID,再使用Kill指令

Desktop View

1
docker kill

重新進入正在運行的docker容器中 備註1:Ctrl+D可以退出該模式 備註2:sh代表shell,可以理解成使用cmd指令的方式 Desktop View

1
docker exec -it 8996a9e964ac sh

其餘參考

Docker.DotNet的GitHub
Docker.DotNet的參考Blog

本文由作者按照 CC BY 4.0 進行授權