主頁 > 軟體設計 > Dockerfile 配置指令詳解

Dockerfile 配置指令詳解

2021-08-13 07:19:36 軟體設計

FROM 指定鏡像

功能為指定基礎鏡像,并且必須是第一條指令,

如果不以任何鏡像為基礎,那么寫法為: FROM scratch

同時意味著接下來所寫的指令作為鏡像的第一層開始

語法:

FROM <image>

FROM <image>:<tag>

FROM <image>:<digest>

三種寫法,其中<tag>和<digest>是可選項,如果沒有那么默認值為latest

例如:

FRPM centos:7.4     #當你在撰寫Dockerfile檔案時,第一行必須是FROM指令,也可以這么寫
                #FROM scratch 這個代表從零開始構建 就是不在鏡像基礎上構建鏡像而且從0開始構建鏡像

MAINTAINER alex-wang  wangwenchao_wwc@163.com

LABEL name="Centos Base Image" \                     #LABEL 給鏡像指定標簽
    vendor="Centos" \
    license="GPLv2"
    build-date="2021-8-9"

RUN 構建時間運行命令

功能為運行指定命令

RUN命令有兩種格式

  1. RUN <command>
  2. RUN ["executable","param1","param2"]

第一種后面直接跟shell命令

在linux作業系統上默認/bin/sh -c

在windows作業系統上默認 cmd /S /C

第二種是類似于函式呼叫,

可將executable理解成為可執行檔案,后面就是兩個引數,

兩種寫法對比:

RUN source $HOME/.bashrc ; echo $HOME

RUN ["/bin/bash","-c","ehco hello"]

注意: 多行命令不要寫多個RUN,原因是Docker中每一個指令都會建立一個層多少RUN就構建多少層鏡像,會造成鏡像的臃腫,多層, 不僅僅增加了構建部署的時間,還容易出錯

RUN書寫時的換行符是\

RUN的三種書寫方式

FROM centos:7.4 

MAINTAINER alex-wang   wangwenchao_wwc@163.com

LABEL name="Centos Base Iamge" \
    vendor="Centos" \
    license="GPLv2"
    build-date="2021-8-9"

RUN yum -y install net-tools 
FROM centos:7.4 

MAINTAINER alex-wang   wangwenchao_wwc@163.com

LABEL name="Centos Base Iamge" \
    vendor="Centos" \
    license="GPLv2"
    build-date="2021-8-9"
RUN ["/bin/bash","-c","yum -y install net-tools"]
FROM centos:7.4 

MAINTAINER alex-wang   wangwenchao_wwc@163.com

LABEL name="Centos Base Iamge" \
    vendor="Centos" \
    license="GPLv2"
    build-date="2021-8-9"
RUN ["yum","-y","install","net-tolls"]

CMD 容器啟動時運行命令

功能為容器啟動時要運行的命令

語法有三種寫法:

  1. CMD ["executable","param1","param2"]
  2. CMD ["param1',"param2"]
  3. CMD command param1 param2

第三種比較好理解,就是shell這種執行方式和寫法

第一種和第二種其實都是可執行檔案加上引數的形式

舉例兩種寫法:

CMD [ "sh","-c""echo $HOME"]

CMD ["echo","$HOME"]

注意:這里邊包含引數一定要用雙引號,就是不能是單引號,千萬不能寫成單引號,原因是引數傳遞后,docker決議的是一個JSON array

RUN&CMD

不要RUN和CMD搞混了

RUN是構容器時就運行的命令以及提交運行結果

CMD是容器啟動時執行的命令,在構建時并不運行,構建時僅僅指定了這個命令到底是個什么樣子

[root@localhost wwc] # cat Dockerfile
FROM centos:7.4 

MAINTAINER alex-wwc wangwenchao_wwc@163.com

LABEL name"Centos Base Image" \
   vendor="Centos" \
   license="GPLv2"
   build-date="2021-8-9"

RUN ["yum","-y","install","httpd"]
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]   #容器啟動時運行命令代表開啟httpd服務/如果使用標準命令啟動服務會在啟動命令執行成功后關閉容器

[root@localhost wwc] # docker build -t httpd:v0.1 .

EXPOSE 監聽埠

用來指定容器運行時監聽的埠,但是并不會指定主機監聽的埠

如果想使得容器與主機的埠有映射關系,必須在容器啟動的時候加上-P引數

FROM centos:7.4 

MAINTAINER alex-wwc wangwenchao_wwc@163.com

LABEL name"Centos Base Image" \
   vendor="Centos" \
   license="GPLv2"
   build-date="2021-8-9"

RUN ["yum","-y","install","httpd"]
EXPOSE 80/tcp
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

#第二次構建特別快因為會用快取,在命令最后加上 -no-cache代表不使用快取構建

ENV 環境變數

功能為設定環境變數

語法有兩種

  1. ENV <key> <value>
  2. ENV <key> =<value> ..

兩者的區別就是第一種是一次設定一個,第二種是一層設定多個

FROM centos:7.4 

MAINTAINER alex-wwc wangwenchao_wwc@163.com

LABEL name"Centos Base Image" \
   vendor="Centos" \
   license="GPLv2"
   build-date="2021-8-9"

ENV name=wwc age=23 salary=100

docker build -t httpd:v0.3 .

docker run --name web1 --rm -it httpd:v0.3

ADD 復制自動解壓

一個復制命令,把檔案復制到鏡像中,如果是壓縮檔案,則會直接解壓

如果把虛擬機與容器想象成兩臺linux服務器的話,那么這個命令就類似于scp,只是scp需要加用戶名和密碼的權限驗證,而ADD不用,

  1. ADD <src>...<dest>
  2. ADD ["<src>",..."<dest>"]

<dest>路徑的填寫可以是容器內的絕對路徑,也可以是相對于作業目錄的相對路徑

<src>可以是一個本地檔案或者是一個本地壓縮檔案,還可以是一個url如果把<src>寫成一個URL,那么ADD就類似wget命令

如以下寫法都是可以的:

  1. ADD test relativerDir/
  2. ADD test /relativeDIr
  3. ADD http://example.com/foobar /

盡量不要把<scr>寫成一個檔案夾,如果<src>是一個檔案夾了,復制整理目錄的內容,包含檔案系統的元資料

FROM centos:7.4 

MAINTAINER alex-wwc wangwenchao_wwc@163.com

LABEL name"Centos Base Image" \
   vendor="Centos" \
   license="GPLv2"
   build-date="2021-8-9"

ADD ["test.tar","/root/"]

copy 復制不自動解壓

看這個名字就坐等,又是一個復制命令

語法如下:

  1. COPY <src>...<dest>
  2. COPY ["<src>",..."<dest>"]

與ADD的區別

COPY的<src>只能是本地檔案,并不能解壓,其他用法一致

ENTRYPOINT 容器啟動時命令

功能是啟動時的默認命令

語法如下:

  1. ENTRYPOINT ["executable","param1","param2"]
  2. ENTRYPOINT command param1 param2

如果從上到下看到這里的話,那么你應該對這兩種語法很熟悉啦,

第二種就是寫shlle

第一種就是可執行檔案加引數

與CMD比較說明(這兩命令太像了,而且還可以配合使用):

1. 相同點

只能寫一條,如果寫了多條,那么只有最后一條生效

容器啟動時才運行,運行時機相同

2. 不同點

ENTRYPOINT不會被運行的command覆寫,而CMD則會被覆寫

示例:

[root@wang ~]# cat wwc.sh 
echo "wangwenchao"
[root@wang ~]# cat Dockerfile 
FROM centos:7.4

MAINTAINER Ales-wang wangwenchao_wwc@163.com

LABEL name="Centos Base Image" \
  vendor="Centos" \
  build-data="2021-8-9"

COPY wwc.sh /opt
RUN chmod a+x /opt/wwc.sh
CMD ["/opt/wwc.sh"]
[root@wang ~]# docker build -t test:v0.1 .




[root@wang ~]# docker run --name web1 --rm -it test:v0.1 /bin/bash -c "echo Hello"
Hello
[root@wang ~]# 
[root@wang ~]# cat wwc.sh 
echo "wangwenchao"
[root@wang ~]# cat Dockerfile 
FROM centos:7.4

MAINTAINER Ales-wang wangwenchao_wwc@163.com

LABEL name="Centos Base Image" \
  vendor="Centos" \
  build-data="2021-8-9"

COPY wwc.sh /opt
RUN chmod a+x /opt/wwc.sh
ENTRYPOINT ["/opt/wwc.sh"]
[root@wang ~]# docker build -t test:v0.2 .




[root@wang ~]# docker run --name web1 --rm -it test:v0.2 /bin/bash -c "echo Hello"
standard_init_linux.go:228: exec user process caused: exec format error

如果我們在dockerfile中同時寫了ENTRYPOINT和CMD,并且指令不是一個完整整的可執行命令,那么CMD指定的內容將會作為ENTRYPOINT的引數

如下:

[root@wang ~]# cat Dockerfile 
FROM centos:7.4

MAINTAINER Ales-wang wangwenchao_wwc@163.com

LABEL name="Centos Base Image" \
  vendor="Centos" \
  build-data="2021-8-9"

RUN yum -y install httpd 
EXPOSE 80
ENTRYPOINT ["/usr/sbin/httpd","-D"]
CMD ["FOREGROUND"]
[root@wang ~]# docker build -t test:v0.4 . 


[root@wang ~]# docker run --name web1 --rm -d -P test:v0.4
5fa4c0e30929e5afe6201997a80c33a77011ed0b865af6daf58c329d03bad6ad
[root@wang ~]# docker ps -a 
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                     NAMES
5fa4c0e30929   test:v0.4   "/usr/sbin/httpd -D …"   3 seconds ago   Up 2 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp

如果我們在Dokcerfile中同時寫ENTRYPOINT和CMD,并且CMD是一個完整的指令,那么他們兩個會互相覆寫,誰在最后誰生效如下:

FROM ubuntu 

ENIRYPOINT ["top","-b"]

CMD ls -al

那么將執行ls-al,top -b 不會執行,

VOLUME 容器掛載

可實作掛載功能,可以將本地檔案夾或者其他容器中的檔案夾掛載到這個容器中

語法為:

VOLUME ["/data"]

說明:

["/data"]可以是一個JsonArray,也可以是多個值,使用如下幾種寫法都是正確的

VOLUME ["/var/log"]

VOLUME /var/log

VOLUME /var/log /var/db

一般的使用場景為需要持久化存盤資料時

容器使用的是AUFS,這種檔案系統不能持久化資料,當容器關閉后,所有的更改都會丟失,

所以當資料需要持久化時用到這個命令,

[root@wang ~]# cat Dockerfile 
FROM centos:7.4

MAINTAINER Ales-wang wangwenchao_wwc@163.com

LABEL name="Centos Base Image" \
  vendor="Centos" \
  build-data="2021-8-9"

RUN yum -y install httpd 
EXPOSE 80
VOLUME /var/www/html
ENTRYPOINT ["/usr/sbin/httpd","-D"]
CMD ["FOREGROUND"]                                                                  des/
[root@wang ~]# docker build -t test:v0.5 . 

[root@wang ~]# docker run -d -P --name web1 --rm test:v0.5 
c660362e1fbe37d9bdfe735a6b35a58e74472df59a111d9baaa7686e089f973e
[root@wang ~]# docker inspect web1



                "Source": "/var/lib/docker/volumes/f4e901e2bdb35a019a29a2aa410d4cb5d6b9ea147bb3a9fb915ab6bd12670c99/_data",
                "Destination": "/var/www/html",


[root@wang ~]# cd /var/lib/docker/volumes/f4e901e2bdb35a019a29a2aa410d4cb5d6b9ea147bb3a9fb915ab6bd12670c99/_data/
[root@wang _data]# ls
[root@wang _data]# echo "hello,world" > index.html 
[root@wang _data]# ls
index.html
[root@wang _data]# docker exec -it web1 /bin/bash 
[root@c660362e1fbe /]# cat /var/www/html/index.html 
hello,world



USER 容器用戶

設定啟動容器的用戶,可以是用戶名和UID,所以,只有下面的兩種寫法是正確的

USER daemo

USER UID

注意:如果設定了容器以daemon用戶去運行,那么RUN,CMD和ENTRYPOINT都會以這個用戶去運行

WORKDIR 作業組

語法:

WORKDIR /path/to/workdir

設定作業目錄,對RUN,CMD,ENTRYPOINT,COPY,ADD生效,如果不存在則會創建,也可以設定多次,

如:

[root@wang test]# cat Dockerfile 
FROM centos:7.4
ADD httpd-2.4.48.tar.gz /usr/src/
WORKDIR /usr/src/httpd/2.2.48
[root@wang test]# docker build -t test:v0.6 . 


[root@wang test]# docker run -it -P --name web1 --rm test:v0.6 
[root@f1370450187c 2.2.48]# pwd
/usr/src/httpd/2.2.48
[root@f1370450187c 2.2.48]# 

WORKDIR也可以決議環境變數

如:

[root@wang test]# cat Dockerfile 
FROM centos:7.4
ADD httpd-2.4.48.tar.gz /usr/src/
ENV DIRNAME=/usr/src/httpd-2.2.48
WORKDIR $DIRNAME
[root@wang test]# docker build -t test:v0.7 .


[root@wang test]# docker run -it -P --name web1 --rm test:v0.7
[root@7174998043ec httpd-2.2.48]# pwd 
/usr/src/httpd-2.2.48
[root@7174998043ec httpd-2.2.48]#


ARG 互動式變數

語法:

ARG <name>[=default value]

設定變數命令,ARG命令定義了一個變數,在docker build創建鏡像的時候,使用 --build-arg <varname>=<value>來指定引數

如果用戶在build鏡像指定了一個引數沒有定義在Dockerfile中,那么將有一個Warning

提升如下:

[Warning] One or more build-args [foo] were not consumed .

我們可以定義一個或多個引數,如下:

FROM busybox 

ARG user1
ARG buildon

也可以給引數一個默認值:

FROM busybox

ARG user1=someuser

ARG buildno=1

如果我們給ARG定義的引數默認值,那么當build鏡像時沒有指定引數值,將會使用這個默認值

[root@wang test]# cat Dockerfile 
FROM centos:7.4
ARG nmae
ADD $name /usr/src/
ENV DIRNAME=/usr/src/httpd-2.2.48
WORKDIR $DIRNAME
[root@wang test]# docker build --build-arg name=httpd-2.2.48.tar.gz -t test:v0.8 .


[root@wang test]# docker run -it -P --name web1 --rm test:v0.8
[root@b4ac4cccd255 httpd-2.2.48]# pwd
/usr/src/httpd-2.2.48
[root@b4ac4cccd255 httpd-2.2.48]# 

ONBULD 子鏡像構建時命令

語法:

ONBULD [INSTRUCTION]

這個指令只對當前鏡像的子鏡像生效,

比如當前鏡像為A,在Dockerfile中添加:

ONBULD RUN ls -al

這個ls -al命令不會在A鏡像構建或啟動的時候執行

此時有一個B是基于A鏡像構建的,那么這個ls -al命令會在B鏡像構建的時候被執行,

STOPSIGNAL 容器退出時執行命令

語法:

STOPSIGNAL signal

STOPSIGNAL命令的作用是當容器退出時給系統發送什么樣的指令

HEALTHCHECK 容器健康檢查

容器健康狀態檢查命令

語法有兩種:

  1. HEALTHCHECK [OPTIONS] CMD command
  2. HEALTHCHECK NONE

第一個的功能是在容器內部運行一個命令來檢查容器的檢查狀況

第二個的功能是在基礎鏡像中取消健康檢查命令

[OPTIONS]的選項支持以下三種選項:

--interval=DURATION #兩次檢查默認的時間間隔為30秒

--timeout=DURATION #健康檢查命令運行超時長,默認30秒

--retries=N #當連續失敗指定次數后,則容器被認為是不健康的,狀態為unhealthy,默認次數是3

注意:

HEALTHCHECK命令只能出現一次,如果出現多次,只有最后一個生效,

CMD后邊的命令的回傳值決定了本次健康檢查是否成功,具體的回傳值如下:

0:success-表示容器是健康的

1:unhealthy-表示容器已經不能作業了

2:reserved-保留值

例子:

HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/ || exit 1 

健康檢查命令是:curl -f http://localhost/ || exit 1

兩次檢查的間隔時間是5秒

命令超時時間為3秒

[root@wang test]# cat Dockerfile 
FROM nginx
ADD test.sh /opt
RUN chmod a+x /opt/test.sh
HEALTHCHECK --interval=10s --timeout=5s CMD /bin/bash /opt/test.sh 
[root@wang test]# cat test.sh 
#!/bin/bahs
ss -an|grep 80
if [ $? -eq 0 ]
then 
  exit 0
else 
  exit 1
fi
[root@wang test]# docker build -t nginx:v0.1 .



[root@wang test]# docker run -it -P --name web1 nginx:v0.1 /bin/bash 

[root@wang test]# docker ps -a 
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS                             PORTS                                     NAMES
5d5086b33f71   nginx:v0.1   "/docker-entrypoint.…"   21 seconds ago   Up 20 seconds (health: starting)   0.0.0.0:49155->80/tcp, :::49155->80/tcp   web1
[root@wang test]#


[root@wang test]# docker run -it -P --name web1 nginx:v0.1 /bin/bash 
root@5d5086b33f71:/# nginx -s stop 
2021/08/10 06:38:22 [notice] 52#52: signal process started
2021/08/10 06:38:22 [error] 52#52: open() "/var/run/nginx.pid" failed (2: No such file or directory)
nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
root@5d5086b33f71:/# 


[root@wang test]# docker ps -a 
CONTAINER ID   IMAGE        COMMAND                  CREATED              STATUS                          PORTS                                     NAMES
5d5086b33f71   nginx:v0.1   "/docker-entrypoint.…"   About a minute ago   Up About a minute (unhealthy)   0.0.0.0:49155->80/tcp, :::49155->80/tcp   web1
[root@wang test]#


轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293332.html

標籤:其他

上一篇:老寇云-java技術堆疊進階-武俠篇-netty升級laokou-im(文章持續優化)

下一篇:nginx--??圖解及代碼實作正向代理、反向代理及負載均衡(非常實用,建議收藏??)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more