原文:https://blog.csdn.net/sunnyzyq/article/details/101222410
(1)Docker 安裝
yum -y install docker
輸入語句執(zhí)行后,就可以看到 Docker 它正在下載了,下面 19% 是下載進度。
當你看到下圖的這個Complete,就表示 Docker 已經下載安裝好了。
(2) 查看Docker版本
是否真的已經安裝好了呢?我們可以通過以下命令查看Docker的版本。
docker version
此時,我們可以看到 Docker 的版本號為 1.13.1,表示真的已經安裝上了。
(3) 啟動Docker
service docker start
(4) 打包項目到服務器
現(xiàn)在 Docker 已經啟動成功了,我們來實戰(zhàn)一下,我們先將Eclipse中的項目打成jar包放到Linux上。
(5) 創(chuàng)建Dockerfile
在我們剛剛的項目jar包下同級目錄下,創(chuàng)建Dockerfile文件,這個文件是玩轉Docker的核心文件哦。
touch Dockerfile
現(xiàn)在這個Dockerfile還是一紙空文,我們需要將我們的項目 jar 包寫進去。
編輯Dockerfile文件,內容如下(注意第3行第一個是你的jar包名):
FROM java:8
VOLUME /tmp
ADD com.sunnyzyq-0.1.jar app.jar
RUN bash -c ‘touch /app.jar’
EXPOSE 80
ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
不想在Linux上打字的可以把文件拿出來編輯,然后放回去。
內容解釋:
這里他有個鏡像名詞,不懂沒關系,看完后面就懂了,先記住這個名詞就是。
FROM :表示用哪個基礎鏡像去構建新的鏡像,上面的java:8, 也就是jdk1.8。
ADD :表示疊加什么鏡像到上面的基礎鏡像中。我們現(xiàn)在就疊加當前目錄下的 com.sunnyzyq-0.1.jar 到基礎鏡像中。
EXPOSE:表示對外暴露的端口,我使用的是80。
RUN bash -c ‘touch /app.jar’ :使用 shell編程,執(zhí)行一個 touch 命令,更新文件的訪問和修改時間 -c 如果文件不存在,則不要進行創(chuàng)建。具體參考liunx 的 touch 命令和shell編程。
ENTRYPOINT :入口點, 表示容器運行后默認執(zhí)行的命令。
(6) 拉取基礎鏡像 java8
docker pull java:8
上面Dockerfile說得很清楚,我們的程序需要一個基礎鏡像Java8,我這里由于昨天已經下載好了,所以他會提示更新,你們如果沒有下載 java8 的鏡像,請靜等下載。
(7) 構建程序鏡像
現(xiàn)在 java8 的基礎鏡像有了,就可以創(chuàng)建我們的程序鏡像了,就是執(zhí)行剛剛那個Dockerfile文件。
docker build -t xxx .
注意:xxx 為新鏡像名字,隨便取,別忘了最后有個點。
可以我們程序的鏡像已經構建成功了,并生成了一個930858c62738的鏡像ID。
(8) 查看鏡像
docker images
可以看到剛剛的創(chuàng)建的鏡像,以及我們之前下載的jave8鏡像(這里還可以看到,由于我剛剛創(chuàng)建的鏡像和昨天創(chuàng)建的鏡像雖然名字不一樣,但其他數(shù)據都一樣,這說明兩個鏡像底層都是指的同一個)。
(9)創(chuàng)建容器并運行
鏡像我們已經有了,但最后能讓項目運行起來的是容器。如何理解容器與鏡像的關系呢?
鏡像可以理解為一個Java類,而容器可以理解為Java類的實例。
類只有一個,但可以new出千千萬萬個實例對象。
所以,鏡像只是一個可以生成容器的東西,而容器才能讓程序運行起來。
那么,現(xiàn)在我們就讓我們用剛創(chuàng)建的鏡像創(chuàng)建一個容器,并讓他運行起來。
如: docker run --name sunnyzyq -d -p 80:80 sunnzyq-docker-test
命令解釋:
容器名:我這里取的名字為 sunnyzyq
-d: 后臺運行容器,并且返回容器完整ID
-p: 是用于指定端口的。
內部端口:項目程序的端口
外部端口:網站域名的端口
(10) 查看運行的容器
docker ps
這樣可以看到我們剛運行容器的詳細信息。
docker ps -a
僅以記錄 以備不時之需