创建项目docker bridge网络,用来整个项目容器之间相互访问
#创建桥接网络
sudo docker network create metaverse.app 或docker network create --driver bridge metaverse.app
#查看创建的网络是否存在
sudo docker network ls
#将已存在容器加入网络或者重新运行新容器加入网络
sudo docker network connect metaverse.app --alias app-test app-test
#把webapi容器移除自定义网络
sudo docker network disconnect app app-test
#如果要修改容器启动项,则可以使用 docker update
sudo docker update app-test --restart always #这表示设置容器随着docker启动自动启动
#查看网络中有那些容器加入
sudo docker network inspect metaverse.app
数据库sqlserver2022(sqlserver2022运行到容器教程)
#将sqlserver2022容器加入到项目网络中或在运行的时候加入到网络
sudo docker network connect metaverse.app --alias sqlserver2022 sqlserver2022
或
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Suixin@123" -e "MSSQL_PID=Enterprise" -e "MSSQL_COLLATION=Chinese_PRC_BIN" \
--network metaverse.app --network-alias sqlserver2022 \
-p 1433:1433 --name sqlserver2022 \
-d --restart=always \
-v /opt/mssql2022:/var/opt/mssql \
-v /opt/mssql2022_backup:/opt/mssql2022_backup \
-e TZ=Asia/Shanghai \
mcr.microsoft.com/mssql/server:2022-latest
#查看容器是否加入成功
sudo docker inspect sqlserver2022
#查看网络中容器是否加入成功
sudo docker network inspect metaverse.app
发布程序并复制到服务器上
这里我以NET6为例(System.Drawing.Common类库,Linux下Ubuntu会报Gdip错误解决建议)
dokcer 部署 使用 SixLabors.Fonts 库遇到SystemFonts.Families默认字体为空问题,解决方式加载自定义路径字体或者拷贝字体到 “/usr/local/share/fonts/”, “/usr/share/fonts/”, 等路径下
以下Dockerfile
#如果使用了System.Drawing.Common类库,Linux下Ubuntu会报Gdip错误,如果安装不生效的话,直接用官方建议的替代库吧
#这里我发布到服务器未生效,服务器我已用ImageSharp库了
#The type initializer for 'Gdip' threw an exception.
#---> System.PlatformNotSupportedException: System.Drawing.Common is not supported on non-Windows #platforms. See https://aka.ms/systemdrawingnonwindows for more information.
#在.NET 5 和早期版本中需要安装libgdiplus类库来解决,在 .NET 6 及更高版本中需要使用替代库来解决
apt-get install libgdiplus
cd /usr/lib
ln -s libgdiplus.so gdiplus.dll
#添加docker支持Dockerfile文件
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
#注意注意注意 如何程序里有使用 "Urls": [ "http://*:8000" ]或指定监听端口,导出的EXPOSE 80 端口要一致
#否则会出现容器正常运行,却无法访问问题
EXPOSE 80
FROM base AS final
#-------------开始(如果镜像源是国内的,则可以不需要)-----------------------
#RUN cd /etc/apt
#WORKDIR /etc/apt
# 备份
#RUN mkdir sources.list.bak
#RUN cp sources.list ./sources.list.bak
# 以覆盖+追加的方式替换掉sources.list文件
#我ubuntu版本为20.04,镜像源需要根据自己的系统版本来更换
#使用lsb_release -c 能查看到系统的发行版本号名称 focal
#RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse'>>sources.list
#RUN echo