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刪除所有容器