環(huán)境準備
需要一個linux操作系統(tǒng):我這里用的是ubuntu 18.04,安裝步驟就不說了惩猫,網(wǎng)上很多教程芝硬,當然也可以私信我。
既然需要用到docker轧房,那么就安裝個docker拌阴,apt install docker-ce。
root@pims_server:/# docker -v
Docker version 19.03.7, build 7141c199a2
查看版本奶镶,這樣docker就算是成功安裝好了迟赃。
加載基礎鏡像
為了到時候build鏡像的時候快一點,我們可以先準備下基礎基礎鏡像厂镇,我這里用的是2.2版捺氢,只要runtime即可。
root@pims_server:~# docker pull microsoft/dotnet:2.2-aspnetcore-runtime
下載完成之后剪撬,執(zhí)行docker images可以查看所有鏡像摄乒。
root@pims_server:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
microsoft/dotnet 2.2-aspnetcore-runtime e7e3b238011c 3 months ago 261MB
新建一個.netcore應用程序
這里就不細講了,我提前準備好了一個項目,發(fā)布之后馍佑,把publish文件夾拷貝到linux系統(tǒng)中斋否,如下所示:
root@pims_server:/mnt/share/schedule_web# ll
total 13794
drwxrwxrwx 1 root root 20480 Mar 23 08:49 ./
drwxrwxrwx 1 root root 4096 Mar 25 07:39 ../
drwxrwxrwx 1 root root 4096 Mar 23 08:49 Configs/
-rwxrwxrwx 1 root root 155 Mar 20 10:13 Dockerfile*
-rwxrwxrwx 1 root root 153600 Mar 23 08:43 WebApi.dll*
-rwxrwxrwx 1 root root 58032 Mar 23 08:43 WebApi.pdb*
-rwxrwxrwx 1 root root 224 Mar 23 08:43 PimsSchedulingWebApi.runtimeconfig.json*
-rwxrwxrwx 1 root root 281600 Mar 23 09:05 PimsSchedulingWebApi.Views.dll*
-rwxrwxrwx 1 root root 7800 Mar 23 08:43 PimsSchedulingWebApi.Views.pdb*
-rwxrwxrwx 1 root root 537 Mar 23 08:43 web.config*
drwxrwxrwx 1 root root 0 Mar 23 08:49 wwwroot/
我把上面的文件刪除了以部分,大概就那么個意思拭荤,理解就可以了茵臭,至于如何拷貝到linux有很多種方法,有遠程工具可以直接通過xftp上傳舅世,因為我是用的VirtualBox虛擬機旦委,可以直接利用共享文件夾,掛載到linux上即可雏亚。
掛載共享文件夾命令:sudo mount -t vboxsf Shared /mnt/share
Shared是共享文件夾名稱缨硝,/mnt/share是要掛載到的目標路徑。
Dockerfile
我們可以看到這里面就是項目生成的dll文件罢低,還有一個Dockerfile文件查辩,這是build鏡像是要用到的。
FROM microsoft/dotnet:2.2-aspnetcore-runtime
MAINTAINER zhanwei
COPY . /app
WORKDIR /app
EXPOSE 8000
ENTRYPOINT ["dotnet", "WebApi.dll"]
這就是我的Dockerfile,很簡單microsoft/dotnet:2.2-aspnetcore-runtime是基礎鏡像网持。
COPY:
復制指令宜岛,從上下文目錄中復制文件或者目錄到容器里指定路徑。
WORKDIR:
指定工作目錄功舀。用 WORKDIR 指定的工作目錄萍倡,會在構(gòu)建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄辟汰,必須是提前創(chuàng)建好的)列敲。
docker build 構(gòu)建鏡像過程中的,每一個 RUN 命令都是新建的一層莉擒。只有通過 WORKDIR 創(chuàng)建的目錄才會一直存在酿炸。
EXPOSE:
僅僅只是聲明端口瘫絮。
作用:
幫助鏡像使用者理解這個鏡像服務的守護端口涨冀,以方便配置映射。
在運行時使用隨機端口映射時麦萤,也就是 docker run -P 時鹿鳖,會自動隨機映射 EXPOSE 的端口。
ENTRYPOINT:
類似于 CMD 指令壮莹,但其不會被 docker run 的命令行參數(shù)指定的指令所覆蓋翅帜,而且這些命令行參數(shù)會被當作參數(shù)送給 指令指定的程序。但是, 如果運行 docker run 時使用了 --entrypoint 選項命满,此選項的參數(shù)可當作要運行的程序覆蓋 ENTRYPOINT 指令指定的程序涝滴。
優(yōu)點:在執(zhí)行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數(shù)。
注意:如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最后一個生效歼疮。
Build鏡像
都準備好了之后杂抽,執(zhí)行docker build命令,注意最后有一個.韩脏,少了這個點是執(zhí)行不成功的缩麸。
root@pims_server:/mnt/share/schedule_web# sudo docker build -t schedule_web:1.0 .
Sending build context to Docker daemon 19.02MB
Step 1/6 : FROM microsoft/dotnet:2.2-aspnetcore-runtime
---> e7e3b238011c
Step 2/6 : MAINTAINER zhanwei
---> Running in a42940177b66
Removing intermediate container a42940177b66
---> b9eb0d8cd441
Step 3/6 : COPY . /app
---> 810d14b5a4a0
Step 4/6 : WORKDIR /app
---> Running in 97360f19bf80
Removing intermediate container 97360f19bf80
---> 092ed5dc0364
Step 5/6 : EXPOSE 8000
---> Running in 46593eb29da3
Removing intermediate container 46593eb29da3
---> 397cf3432ae2
Step 6/6 : ENTRYPOINT ["dotnet", "WebApi.dll"]
---> Running in add035b834d4
Removing intermediate container add035b834d4
---> 40b10808fc7c
Successfully built 40b10808fc7c
Successfully tagged schedule_web:1.0
root@pims_server:/mnt/share/schedule_web#
好的,成功了赡矢,現(xiàn)在查看一下images杭朱,可以看到剛剛構(gòu)建的鏡像了
root@pims_server:/mnt/share/schedule_web# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
schedule_web 1.0 40b10808fc7c 25 seconds ago 279MB
microsoft/dotnet 2.2-aspnetcore-runtime e7e3b238011c 3 months ago 261MB
創(chuàng)建容器并啟動容器,-p映射端口吹散,5000是容器內(nèi)部端口弧械,8000是本機對外開放端口。
root@pims_server:docker run -it -p 8000:5000 schedule_web:1.0
容器編排docker-compose
當我們有多個服務要部署時送浊,可以用容器編排梦谜,可以同時啟動多個容器。
比如現(xiàn)在有一個后臺定時服務袭景、一個前端服務唁桩。那么為了方便我只有通過compose up命令就可以了。
root@pims_server:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
schedule_server 1.0 163b44854f0d About a minute ago 279MB
schedule_web 1.0 40b10808fc7c 4 minutes ago 279MB
microsoft/dotnet 2.2-aspnetcore-runtime e7e3b238011c 3 months ago 261MB
查看docker-compose版本耸棒,順便檢查下服務器是否安裝荒澡。
root@pims_server:/home/zhanwei# docker-compose --version
docker-compose version 1.23.2, build unknown
root@pims_server:/home/zhanwei#
docker-compose.yml文件
version: '3'
services:
#啟動注冊中心eureka-server集群 集中管理/服務注冊/服務發(fā)現(xiàn)
schedule_web:
container_name: schedule_web
image: schedule_web:1.0
ports:
- "8000:5000"
environment:
appId: testid
appSecret: testsecret
baseUrl: http://127.0.0.1:8080/api/openapi/orgs/v1/
db_server: 127.0.0.1
db_port: 3306
db_type: mysql
db_user: root
db_pwd: 123456
db_name: schedule_8000
schedule_server:
container_name: schedule_server
image: schedule_server:1.0
environment:
db_server: 127.0.0.1
db_port: 3306
db_type: mysql
db_user: root
db_pwd: 123456
db_name: schedule_8000
執(zhí)行命令docker-compose up -d,我們看下結(jié)果:
root@pims_server:/home/zhanwei# docker-compose up -d
Creating schedule_web ... done
Creating schedule_server ... done
root@pims_server:/home/zhanwei#
已經(jīng)啟動完成了与殃。单山。。
docker-compose命令解析:
up:
啟動所有在Compose問中定義的容器幅疼,并且把它們的日志信息匯集在一起米奸。通常會添加-d參數(shù)(在up后面),讓容器在后臺執(zhí)行
start:啟動指定的已經(jīng)存在的容器爽篷。
build:重新建造由Dockerfile構(gòu)建的鏡像悴晰。
ps:獲取由Compose管理的容器的狀態(tài)信息。
run:啟動一個容器逐工,并允許一個一次性的命令铡溪。被連接的容器會同時啟動,除非用了 --no-deps參數(shù)泪喊。
logs:匯集由Compose管理的容器的日志棕硫,并以彩色輸出。
stop:停止容器袒啼,但不會刪除它們哈扮。
rm:刪除已停止的容器纬纪。不要忘記使用-v參數(shù)來刪除任何由Docker管理的數(shù)據(jù)卷。
查看一下容器
root@pims_server:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77677298c7f9 schedule_server:1.0 "dotnet PimsScheduli…" 25 minutes ago Up 25 minutes schedule_server
bc5502237d9e schedule_web:1.0 "dotnet PimsScheduli…" 25 minutes ago Up 25 minutes 8000/tcp, 0.0.0.0:8001->5000/tcp schedule_web
轉(zhuǎn)載請注明出處滑肉,另外請關注我哦育八!