相對於Windows部署,Docker 部署簡單、快速。我負責的項目,最頻繁時一天要部署十幾次。而且,用戶基本感受不到站點更新的,因爲不到 1 秒就更新完畢了。
那我來分享一下平時常用的 Docker 操作,希望對於剛入坑的童鞋有所幫助,老手請忽略本文。
一,安裝 Docker。
現在我拿到了一臺 CentOS 7的機器,第一步就是安裝 Docker。
使用 root 帳號,執行如下命令:
yum install docker-ce
什麼?提示沒找到包?那先添加 yum 源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
再執行
yum install docker-ce
不出意外的話,docker 就安裝成功了,如果不成功,檢查下 CentOS 版本,6的話或者更低的話,儘量升到7吧。
安裝成功後要啓動:
systemctl start docker
還要設置重啓後自動啓動:
systemctl enable docker
好,安裝基本完成了。
二,跑一個 dotnetcore 項目。
假設我現在有一個 dotnetcore 項目叫 MyDemo.WebApi ,是Aspnetcore 2.2 的標準 WebApi 模板項目,沒寫一句代碼,已經發布好了,發佈後的文件如下:
在此文件夾下建一個文本文件,輸入以下內容:
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY . ./
ENTRYPOINT ["dotnet", "MyDemo.WebApi.dll"]
保存,把這個文件重命名爲 Dockerfile 注意,沒有擴展名,把 txt 擴展名去掉。如果不會去掉,請學好基本電腦操作再來做研發。這個文件的內容是告訴 Docker ,我的項目是基於微軟aspnetcore2.2的運行時的,入口的命令是
dotnet MyDemo.WebApi.dll
現在的文件夾是這樣:
選中這8個文件,用Winrar 打個包,注意要 zip 包哦,
把打好的包,傳到裝好 Docker 的 linux 機器上。方法有 ftp、rz 等,實在不行,可以本地 windows 跑個站點,把 zip 包放在裏面,到 linux 上 wget 下載一下。
例如我放在了linux 上的 /data/MyDemo/v1 這裏。
然後 cd /data/MyDemo/v1 到這個目錄裏,unzip publish.zip 解壓一下。rm publish.zip 把壓縮包刪掉。
重點來了,執行如下命令:
docker build -t mydemo:1 .
注意最後那個點,是當前目錄的意思,別丟了。這句話的意思是,嘿 Docker,把當前文件夾給我做個鏡像,名字是 mydemo,版本是1 。然後可以用 docker images 查看一下本機的所有鏡像。
鏡像有了,還需要容器跑起來。執行如下命令:
docker run -d -p 8080:80 mydemo:1
然後這個容器就跑起來了,在其他機器上打開瀏覽器,打開 http://linux機器IP:8080/api/values 就能得到輸出了。
在 linux 上輸入 docker ps 也能看到這個容器在跑了。
docker run 命令還有其他的一些選項,如:
--restart=always 這個參數能讓容器遇到錯誤時總是重啓
-v /etc/localtime:/etc/localtime:ro 這個選項能讓 docker 使用宿主的時區。 -v 這個命令還能映射宿主的目錄或者文件給容器用。
docker ps 常用的參數是 -a 能顯示所有狀態的容器,不加 -a 只會顯示正在跑的容器。
那我們學到了 docker build 構建鏡像、docker images 查看鏡像、docker run 啓動容器、docker ps 查看容器 四個命令,還有哪些命令是常用的呢:
三,其他常用 docker 命令
docker restart 這個命令能讓容器重啓,比如跑了一個Nginx ,配置文件映射到宿主機上,修改了配置文件,就需要重啓容器讓配置生效。
docker stop 這個命令能讓容器停止。比如發佈了一個新版本的 mydemo,就可以停止掉老版本的容器,啓動一個新版本的容器,兩個命令連起來,切換的就會很快。
docker rm 這個命令能刪除容器。停止掉的容器,docker ps -a 還會看到他的身影,使用本命令才能刪掉。
docker rmi 這個命令能刪除鏡像。老版本的鏡像沒用了,可以用這個命令刪掉。
docker pull 這個命令能從 docker hub 網站上拉取一個鏡像到本地,讓你部署 mysql mongodb consul apollo skywalking 這些應用變得分分鐘跑起來。
docker logs 查看容器的日誌。
docker inspect 查看容器卷信息,容器跑起來忘了映射了哪些目錄?沒錯,就用這個命令可以查到。
這些就是我作爲一個 dotnetcore 程序員經常用到的 Docker 操作,東西不多,簡單易學。