怎么在Docker里发布LIS

为了简化发布环境,特别是最近老是换Linux系统,搞的不同系统还得搞环境问题,为此研究怎么在Docker发布LIS系统,来实现容器化。

自学视频链接

首先安装Docker

#更新yum仓库
yum update
#检查是否有安装docker
whereis docker
#安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#查看docker版本
yum list docker-ce --showduplicates | sort -r
#安装最新的
yum install docker-ce
#查看是否成功
 docker version

常用命令

启动:systemctl start docker
停止:systemctl stop docker 
重启:systemctl restart docker
开机自启:systemctl enable docker

#查看所有镜像
docker images
#删除镜像
docker rmi 镜像名称
#用当前目录的Dockerfile构造镜像
docker build -t imedicallis:9.0 .
#用镜像创建容器
docker run -idt -p 5002:5002 -p 8081:8081 --name=imedicallis -v /dthealth/app/dthis/imedicallis:/dthealth/app/dthis/imedicallis  imedicallis:9.0
#查看容器状态
docker ps -a
#启动容器
docker start 容器名称
#停止容器
docker stop 容器名称
#删除容器
docker rm 容器名称
#进入容器
docker exec -it imedicallis /bin/bash
#查看容器日志
docker logs 容器名称

写lis的Dockerfile

#构造imedicallis的docker镜像
#基础镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base

#MAINTAINER 维护者信息
MAINTAINER zhanglianzhu

#工作路径
WORKDIR /

#对外端口
EXPOSE 5002
EXPOSE 8081

#映射路径
VOLUME ["/dthealth/app/dthis/imedicallis"]

#启动容器执行的命令
ENTRYPOINT ["dotnet", "/dthealth/app/dthis/imedicallis/iMedicalLIS.dll","--urls","https://*:5002"]

构造镜像测试

[BEGIN] 2023/7/20 12:47:35
[root@localhost zlzdocker]# ls
Dockerfile
[root@localhost zlzdocker]# cat Dockerfile 
#构造imedicallis的docker镜像
#基础镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base

#MAINTAINER 维护者信息
MAINTAINER zhanglianzhu

#工作路径
WORKDIR /

#对外端口
EXPOSE 5002
EXPOSE 8081

#映射路径
VOLUME ["/dthealth/app/dthis/imedicallis"]

#启动容器执行的命令
ENTRYPOINT ["dotnet", "/dthealth/app/dthis/imedicallis/iMedicalLIS.dll","--urls","https://*:5002"][root@localhost zlzdocker]# 
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# docker build -t imedicallis:9.0 .
[+] Building 0.0s (0/0)                                                                                                                                                                                          docker:default
[+] Building 0.0s (0/0)                                                                                                                                                                                          docker:default
[+] Building 0.1s (0/2)                                                                                                                                                                                          docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                                       0.1s
 => => transferring dockerfile:                                                                                                                                                                                            0.0s
 => [internal] load .dockerignore                                                                                                                                                                                          0.1s
日志太多,删了一些                                                                                                                                                                                         0.4s
 => => exporting layers                                                                                                                                                                                                    0.0s
 => => writing image sha256:edd4d70c03a33075c7f0103b2af6083422a5deb173df14f84ac8ba3b1f753e09                                                                                                                               0.1s
 => => naming to docker.io/library/imedicallis:9.0                                                                                                                                                                         0.2s
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
zlznginx      1.0       448f5d1d8e1a   3 hours ago   187MB
imedicallis   9.0       edd4d70c03a3   8 days ago    208MB
nginx         latest    021283c8eb95   2 weeks ago   187MB
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# docker run -idt -p 5002:5002 -p 8081:8081 --name=imedicallis -v /dthealth/app/dthis/imedicallis:/dthealth/app/dthis/imedicallis  imedicallis:9.0
7806efbc0a2516d85201a3e44405d35756812f347352698e5b30064a408f06d1
[root@localhost zlzdocker]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS                         PORTS                                                                                  NAMES
7806efbc0a25   imedicallis:9.0   "dotnet /dthealth/ap…"   9 seconds ago   Up 7 seconds                   0.0.0.0:5002->5002/tcp, :::5002->5002/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   imedicallis
f87c5bb32393   nginx             "/docker-entrypoint.…"   2 hours ago     Exited (0) About an hour ago                                                                                          nginx3
6e55d8e750ca   nginx             "/docker-entrypoint.…"   3 hours ago     Exited (0) About an hour ago                                                                                          nginx1
61208409f5ca   nginx             "/docker-entrypoint.…"   3 hours ago     Exited (0) About an hour ago                                                                                          nginx2
[root@localhost zlzdocker]# docker logs imedicallis
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
      Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {e66e49d9-2b68-4d18-99f9-4aebaafb4e18} may be persisted to storage in unencrypted form.
上报信息异常:Index was outside the bounds of the array.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://[::]:5002
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /dthealth/app/dthis/imedicallis/
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# 
[root@localhost zlzdocker]# docker exec -it imedicallis /bin/bash
root@7806efbc0a25:/# ls
bin  boot  dev	dthealth  etc  home  lib  lib64  media	mnt  opt  proc	root  run  sbin  srv  sys  tmp	usr  var
root@7806efbc0a25:/# exit
exit

测试访问
在这里插入图片描述

docker exec -it 进入容器后和Linux一样,常用指令都能用,也能给他安装软件,程序需要的其他环境可以自己安装,都补完了再把镜像打包即可

[root@localhost zlzdocker]# docker exec -it imedicallis /bin/bash
root@7806efbc0a25:/# 
root@7806efbc0a25:/# 
root@7806efbc0a25:/# 
root@7806efbc0a25:/# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@7806efbc0a25:/# 

这里有几处需要理解:
1.首先微软的.net6镜像怎么来的?
微软用相应OS的基础镜像拉取本地后,进入容器其实就是一个干净的OS,微软把dotnet的环境给他安装上再打包镜像就成了微软给别人用的基础镜像,自己也可以选要的OS的基础镜像拉取后创建容器,自己在空白电脑安装dotnet是一样的,其他软件同理

2.我的程序在容器运行怎么改文件啊?
这里通过容器-v配置容器和宿主机的文件映射。在宿主机改对应映射的文件后容器里的文件就是修改的文件。对应好映射关系即可,对开发修改程序可以无视容器的存在(既:持久化在宿主机,容器只提供运行环境)。

3.在容器运行的程序端口怎么在外部访问?
这里用-p指定端口映射,那么对宿主映射端口的访问会转发到容器映射的端口处理。

自己给容器补全需要的环境后怎么打包成镜像给人用:

[root@localhost ~]# docker commit -a "zhanglianzhu" -m "lis9.0" imedicallis imedicallis:9.1
sha256:1494064653349464dc088637acc079497ab1d58a51bd94236f679aa5983f0508
[root@localhost ~]# docker save -o imedicallis:9.1.tar imedicallis:9.1
[root@localhost ~]# ll
总用量 206840
-rw-------. 1 root root      1230 64 18:18 anaconda-ks.cfg
-rw-------. 1 root root 211798528 720 13:23 imedicallis:9.1.tar
[root@localhost ~]# 

[root@localhost ~]#

怎么载入自己打包的镜像

[root@localhost ~]# docker load -i imedicallis:9.1.tar
"docker load" accepts no arguments.
See 'docker load --help'.

Usage:  docker load [OPTIONS]

Load an image from a tar archive or STDIN
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
imedicallis   9.1       149406465334   3 minutes ago   208MB
zlznginx      1.0       448f5d1d8e1a   4 hours ago     187MB
imedicallis   9.0       edd4d70c03a3   8 days ago      208MB
nginx         latest    021283c8eb95   2 weeks ago     187MB
[root@localhost ~]# 

载入之后再创建容器即可达到开包即用,看网上文档都是基于vs的开发容器发布,看的很懵的状态,完全无法理解是要给容器单独编译还是怎么的。

经过基础学习,发现开发不需要管容器化,部署的人会把自己程序做镜像即可,容器没那么神秘,进入容器里面就是一个虚拟机一样的。和正常OS一样该咋部署就咋部署。

以上就是容器化部署实验,半天的成功,为下一个版本提供容器部署用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker镜像的发布可以通过两种方式来实现。一种方式是将Docker镜像导出为tar包,然后在其他设备上导入该tar包。另一种方式是在Dockerhub上建立自己的Docker仓库,其他设备可以从该仓库下载并使用镜像。 对于将Docker镜像导出为tar包的方式,可以通过执行命令"docker save -o [导出文件名.tar [镜像名]"来将镜像保存为tar包。然后,可以通过将该tar包拷贝到其他设备上,并执行"docker load -i [导出文件名.tar]"命令来导入镜像。 另一种方式是在Dockerhub上建立自己的Docker仓库。可以通过在Dockerhub上创建一个帐号,并在该帐号下创建一个新的仓库来实现。然后,可以使用"docker tag [镜像名 [Dockerhub用户名/仓库名:标签]"命令将镜像标记为Dockerhub仓库的格式,并使用"docker push [Dockerhub用户名/仓库名:标签]"命令将镜像推送到Dockerhub仓库。 通过以上两种方式,可以实现Docker镜像的发布和在其他设备上的使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Docker详解(九)——Docker镜像发布](https://blog.csdn.net/weixin_40228200/article/details/124188726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值