1. 程式人生 > >WIN10下VM虛擬機器Docker服務(ASP.NET CORE Web Application)

WIN10下VM虛擬機器Docker服務(ASP.NET CORE Web Application)

Boring Docker

(2018.09.17如果序列1-4環境OK,直接5起飛~~~)

1.vm虛擬機器安裝ubuntu 16 server版本(我這裡用的是16)

Vmware + ubuntu1604_64_server.iso->...

2.阿里源

#備份原來的源

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakcup

#編輯原來的檔案

sudo vim /etc/apt/sources.list

#阿里源

deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

3.docker安裝

# step 1: 安裝必要的一些系統工具

sudo apt-get update

sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# step 2: 安裝GPG證書

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 寫入軟體源資訊

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4: 更新並安裝 Docker-CE

sudo apt-get -y update

sudo apt-get -y install docker-ce

# Step 5: 啟動docker服務

sudo service docker start

#Step 6:測試是否安裝成功

sudo docker run hello-world

#Step 7:檢視docker版本

sudo docker version

#############################################################################################

PS:如安裝docker-ce時候提示依賴包:libsystemd-journal0

  deb http://cz.archive.ubuntu.com/ubuntu trusty main 寫入/etc/apt/sources.list 檔案中

再執行 sudo apt-get update, sudo apt-get install libsystemd-journal0

4.輔助上傳/下載(這裡我用是Xshell連結虛擬機器ubuntu)

sudo apt-get install lrzsz

5.新建一個ASP.NET CORE 應用

Vs2017->ASP.NET Core Web 應用程式->api->...

6.建立Dockerfile

在我的專案如下圖(Dockerfile我這裡是放到解決方案下的專案目錄中

Dockerfile如下圖

Dockerfile程式碼片段

FROM microsoft/dotnet:sdk AS build-env

WORKDIR /app

# Copy csproj and restore as distinct layers

COPY *.csproj ./

RUN dotnet restore

# Copy everything else and build

COPY . ./

RUN dotnet publish -c Release -o out

# Build runtime image

FROM microsoft/dotnet:aspnetcore-runtime

WORKDIR /app

COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "WebApplication1.dll"]

7.Dockerfile到虛擬機器(如圖)

Rz->[win框]選擇你的專案檔案(所有檔案包括Dockerfile)->...

8.Bulid(如圖)

sudo docker bulid –t aspnetcore .

...1s ....1m ... 1h ...1d ... 1m ...1y

哈哈結束啦。。。

9.run Docker image(執行如圖)

docker run -d -p 8080:80 --name myapp aspnetcore

輔助指令 docker ps –a 檢視,其中hello-world是安裝docker測試容器

分析一下,很有趣

Windows主機 IP:192.168.1.105

Linux 虛擬機器  IP: 192.168.1.102

Docker容器  IP:172.17.0.1

附錄A

Docker的映象稱為image,容器稱為container。

對於Docker來說,image是靜態的,類似於作業系統快照,而container則是動態的,是image的執行例項。

比如,有一個image名稱為ubuntu,那麼比如現在我們啟動這個image的container並且進入到這個container的bash命令列中:

docker run -t -i ubuntu /bin/bash

官網是這麼說的:

docker run: runs a container.

ubuntu: is the image you would like to run.

-t: flag assigns a pseudo-tty or terminal inside the new container.

-i: flag allows you to make an interactive connection by grabbing the standard in (STDIN) of the container.

/bin/bash: launches a Bash shell inside our container.

理解很簡單:

docker run:啟動container

ubuntu:你想要啟動的image

-t:進入終端

-i:獲得一個互動式的連線,通過獲取container的輸入

/bin/bash:在container中啟動一個bash shell

########################################################################

docker start :啟動一個或多少已經被停止的容器

docker stop :停止一個執行中的容器

docker restart :重啟容器

語法

docker start [OPTIONS] CONTAINER [CONTAINER...]

docker stop [OPTIONS] CONTAINER [CONTAINER...]

docker restart [OPTIONS] CONTAINER [CONTAINER...]

例項

啟動已被停止的容器myrunoob

docker start myrunoob

停止執行中的容器myrunoob

docker stop myrunoob

重啟容器myrunoob

docker restart myrunoob

########################################################################

docker run :建立一個新的容器並執行一個命令

語法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS說明:

-a stdin: 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項;

-d: 後臺執行容器,並返回容器ID;

-i: 以互動模式執行容器,通常與 -t 同時使用;

-p: 埠對映,格式為:主機(宿主)埠:容器埠

-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;

--name="nginx-lb": 為容器指定一個名稱;

--dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;

--dns-search example.com: 指定容器DNS搜尋域名,預設和宿主一致;

-h "mars": 指定容器的hostname;

-e username="ritchie": 設定環境變數;

--env-file=[]: 從指定檔案讀入環境變數;

--cpuset="0-2" or --cpuset="0,1,2": 繫結容器到指定CPU執行;

-m :設定容器使用記憶體最大值;

--net="bridge": 指定容器的網路連線型別,支援 bridge/host/none/container: 四種類型;

--link=[]: 新增連結到另一個容器;

--expose=[]: 開放一個埠或一組埠;

例項

使用docker映象nginx:latest以後臺模式啟動一個容器,並將容器命名為mynginx。

docker run --name mynginx -d nginx:latest

使用映象nginx:latest以後臺模式啟動一個容器,並將容器的80埠對映到主機隨機埠。

docker run -P -d nginx:latest

使用映象 nginx:latest,以後臺模式啟動一個容器,將容器的 80 埠對映到主機的 80 埠,主機的目錄 /data 對映到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

繫結容器的 8080 埠,並將其對映到本地主機 127.0.0.1 的 80 埠上。

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用映象nginx:latest以互動模式啟動一個容器,在容器內執行/bin/bash命令。

########################################################################

docker rm :刪除一個或多少容器

語法

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS說明:

-f :通過SIGKILL訊號強制刪除一個執行中的容器

-l :移除容器間的網路連線,而非容器本身

-v :-v 刪除與容器關聯的卷

例項

強制刪除容器db01、db02

docker rm -f db01 db02

移除容器nginx01對容器db01的連線,連線名db

docker rm -l db

刪除容器nginx01,並刪除容器掛載的資料卷

docker rm -v nginx01

附錄B

通過 docker logs 命令來檢視應用的資訊。

sudo docker logs -f nostalgic_morse

使用 docker port 來檢視當前對映的埠配置,也可以檢視到繫結的地址

docker port nostalgic_morse 5000

$ docker ps // 檢視所有正在執行容器

$ docker stop containerId // containerId 是容器的ID

$ docker ps -a // 檢視所有容器

$ docker ps -a -q // 檢視所有容器ID

$ docker stop $(docker ps -a -q) //  stop停止所有容器

$ docker  rm $(docker ps -a -q) //   remove刪除所有容器