国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker 入門(二):從實例來看 Dockerfile 和 Compose

xingqiba / 2113人閱讀

摘要:安裝完成后,可以用以下命令查看下版本信息。另外,如果要刪除剛運行的兩個容器,可以總結(jié)本文從數(shù)據(jù)持久化開始說起,淺談了和并附送如何用這兩種方式分別搭建環(huán)境,并在對比中展示了它們各自的特點。

上一文中提到,每次對容器做了改動,如果不把它 commit 成新的鏡像,在刪除容器后,數(shù)據(jù)也會丟失,有沒有什么更好的辦法來保存數(shù)據(jù)呢?使用數(shù)據(jù)卷就可以解決這個問題。

另外,相對于用 commit 容器創(chuàng)建鏡像,使用 Dockerfile 在創(chuàng)鏡像的同時還可以包含很多命令進去,可以簡化后續(xù)操作。

對于需要用到多個容器的應(yīng)用,Docker 也提供了更強大的工具 Compose 來管理容器。

本文就將淺談 Docker 的 數(shù)據(jù)管理、Dockerfile、Compose 這三個方面,同時用實例來演示,助你快速掌握 Docker 基本技能。

環(huán)境說明:上一篇文章我用的是 Ubuntu,這篇文章?lián)Q win 來玩玩。用的 shell 是 CMD(美化版)

win 下,配置鏡像加速也非常方便,只需要在如下位置填寫阿里云的專屬加速地址就可以了。

從 MySQL 實例來看數(shù)據(jù)管理

如果我們運行了一個 MySQL 容器,數(shù)據(jù)庫等信息就是存放在容器內(nèi)的,停止容器到還沒事,一旦我們在刪除容器之前忘了導(dǎo)出數(shù)據(jù),那么所有的數(shù)據(jù)就會丟失。這是非常 不安全 的。

況且就算我們不會忘了在刪除容器之前導(dǎo)出數(shù)據(jù),如果要用到多個需要存儲數(shù)據(jù)的容器,我們也要一個一個把數(shù)據(jù)導(dǎo)出來嗎?這是非常 不方便 的。

而 Docker 就提供了一個獨立于容器之外的存儲技術(shù) 數(shù)據(jù)卷(Volume),數(shù)據(jù)卷的本質(zhì)是一個文件目錄,它可以是本機的目錄也可以是一個容器中的目錄(如果把數(shù)據(jù)卷放在了一個多帶帶的容器中,這個容器也被稱為 數(shù)據(jù)卷容器)。

使用 數(shù)據(jù)卷 就可以將多個容器內(nèi)的數(shù)據(jù)多帶帶 持久化 在一個本機目錄或者一個多帶帶的容器中了。

例如下面這個例子:

$ docker run -d -p 3307:3306 --name sql -v E:/jpress/mysql:/var/lib/mysql -e MYSQL_DATABASE=jpress -e MYSQL_ROOT_PASSWORD=root mysql
-d 后臺運行,-p 映射本機端口 3307 到容器內(nèi)的 3306 ,--name是指定容器的別名,-v local-dir:container-dir 將本地的目錄作為數(shù)據(jù)卷掛載到容器內(nèi)的目錄進行數(shù)據(jù)持久化,-e 是 mysql 的參數(shù),后面跟上 MySQL 的環(huán)境變量,/var/lib/mysql是 MySQL 存儲數(shù)據(jù)的目錄。

-e MYSQL_DATABASE= 可以指定運行容器時創(chuàng)建一個數(shù)據(jù)庫,-e MYSQL_ROOT_PASSWORD= 指定 MySQL 的密碼,MySQL 用戶名默認是 root。

上面的那條命令雖長,但主要的操作是數(shù)據(jù)持久化的那一步,下面我們來驗證一下,數(shù)據(jù)究竟有沒有被持久化:

$ docker pull mysql
$ docker run -d -p 3307:3306 --name sql -v E:/jpress/mysql:/var/lib/mysql -e MYSQL_DATABASE=jpress -e MYSQL_ROOT_PASSWORD=root mysql
$ docker stop sql
$ docker rm sql
$ docker run -d -p 3307:3306 --name sql -v E:/jpress/mysql:/var/lib/mysql mysql
$ docker exec -it sql bash
$ SHOW DATABASES;

有圖有真相:

圖中的文字已經(jīng)足夠說明做數(shù)據(jù)持久化的好處了。

Dockerfile

Dockerfile 是一個 配置文件,里面可以放多條處理命令,一次配置好了可以簡化后續(xù)的部分操作。需要注意的是,一個 Dockerfile 只能包含一個基礎(chǔ)鏡像,就像函數(shù)一樣,一個配置文件只干一件事。

一個 Dockerfile 里面一般有兩類信息:

基礎(chǔ)鏡像和維護者的信息

多條操作鏡像和容器的命令

下面通過創(chuàng)建自己的 Tomcat 鏡像來演示 Dockerfile 的用法(Tocmcat 已包含 JDK):

vi Dockerfile

在 Dockerfile 中寫入以下信息,#后面的是注釋:

#基礎(chǔ)鏡像和維護者的信息

#使用一個 Tomcat 鏡像作為基礎(chǔ)鏡像
From tomcat
#注明創(chuàng)建者的信息,也可以不寫
MAINTAINER stormxing 

#多條操作鏡像和容器的命令(這里舉例一條)

#復(fù)制 war 包到鏡像內(nèi)的 webapps 目錄里
COPY jpress.war /usr/local/tomcat/webapps

這里用到的 war 包是一個開源的 Java 博客,官網(wǎng)是:

https://github.com/JpressProj...

war 包我已經(jīng)打好了,下載地址是:

http://stormxing.oss-cn-beiji...

接下來用 Dockerfile 構(gòu)建我們的鏡像:

docker build -t myweb .

-t myweb是為新的鏡像起一個名字,.表示 Dockerfile 的路徑,由于是它在當前路徑所以是 .

然后,運行鏡像后訪問localhost:8080/jpress,就可以看到網(wǎng)頁了。

$ docker run -d -p 8080:8080 myweb

點下一步之后按提示輸入信息,還記得嗎,上面我們已經(jīng)搞定數(shù)據(jù)庫了(沒想到吧),這里直接填寫信息既可以了,這個數(shù)據(jù)庫主機并不是 localhost ,而是容器外的 ip,也就是我們的本機 ip,用 ipconfig就能查到。

最后點下一步,按提示設(shè)置后臺登陸的用戶名和密碼,輸入localhost:8080/jpress/admin就可以進入到后臺管理頁面。

至此,我們還 順便 知道了如何用 Docker 搭建 JavaWeb 環(huán)境了。

多容器應(yīng)用工具(Compose)

一個 Dockerfile 能包含一個基礎(chǔ)鏡像,而比較復(fù)雜的項目是要用多個容器部署的,一個一個創(chuàng)建還是有點麻煩的,而 Compose 就是一個管理多容器應(yīng)用的工具。

Compose 安裝

Docker-compose 只有在 Linux 上是需要多帶帶下載的,Windows 和 Mac 自帶。并且它是放在 GitHub 上面維護的,所以國內(nèi)從 GitHub 上下載它速度非常慢,可以訪問下面的地址從 daocloud 下載鏡像。

https://get.daocloud.io/#inst...

執(zhí)行以下兩條命令即可完成安裝。

$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

安裝完成后,可以用以下命令查看下版本信息。

$ docker-compose --version

從 jpress 來看 docker-compose

docker-compose 類似于 Dockerfile,也是一個配置文件,但不同的是,一個 Dockerfile 只能跑一個鏡像,而 docker-compose 就能一次跑多個,而且還能配合 Dockerfile 來使用。

這里我們演示用 docker-compose 來跑 jpress。

編寫配置文件(這個文件名同 Dockerfile 一樣是約定好的)

vi docker-compose.yml

填寫以下內(nèi)容:

version: "3"

services:
  mysql:
    image: mysql
    ports:
      - "3307:3306"
    volumes:
      - "E:/jpress/sql:/var/lib/mysql"
    container_name: sql
    environment:
      MYSQL_DATABASE: jpress
      MYSQL_ROOT_PASSWORD: root

  tomcat:
    build: .
    ports:
      - "8080:8080"
    container_name: web
注意縮進,tomcat 和 mysql 都是包含在 services 下面的。build: .指調(diào)用之前寫的 Dockerfile 來運行 Tomcat,MySQL 的數(shù)據(jù)卷注意要重新創(chuàng)建,否則會使用之前的數(shù)據(jù),其他的在之前都見到過,看字段的名字就知道意思了。

我這個文件是新建在 Dockerfile 的同一個目錄里的:

執(zhí)行一下命令就能運行了,結(jié)果跟上面的構(gòu)建方式是一樣的

$ docker-compose up -d

如此看來用 docker-compose 果然簡化了很多操作,只需要一次配置好,然后直接運行就可以了。

另外,如果要刪除剛運行的兩個容器,可以:

$ docker-compose stop
$ docker-compose rm
總結(jié)

本文從數(shù)據(jù)持久化開始說起,淺談了 Dockerfile 和 docker-compose 并附送如何用這兩種方式分別搭建 JavaWeb 環(huán)境,并在對比中展示了它們各自的特點。

最后結(jié)合 上篇文章 畫張導(dǎo)圖送給你,可不是用來收藏的喲:

本文用到的所有文件已整理到 GitHub:

https://github.com/stormxing/...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27244.html

相關(guān)文章

  • Docker 及 GitLab CI 在前端工作流上的實踐分享(一)

    摘要:如今前端工程越來越復(fù)雜,打造一個好用的工作流也顯得越來越重要。如果用戶啟動容器時指定了運行的命令,則會覆蓋掉指定的命令。個人感覺在項目多協(xié)作人數(shù)多的情況下,還是很方便的。 showImg(https://segmentfault.com/img/remote/1460000011553749?w=1100&h=225); 如今前端工程越來越復(fù)雜,打造一個好用的工作流也顯得越來越重要。本...

    wyk1184 評論0 收藏0
  • Docker 及 GitLab CI 在前端工作流上的實踐分享(一)

    摘要:如今前端工程越來越復(fù)雜,打造一個好用的工作流也顯得越來越重要。如果用戶啟動容器時指定了運行的命令,則會覆蓋掉指定的命令。個人感覺在項目多協(xié)作人數(shù)多的情況下,還是很方便的。 showImg(https://segmentfault.com/img/remote/1460000011553749?w=1100&h=225); 如今前端工程越來越復(fù)雜,打造一個好用的工作流也顯得越來越重要。本...

    godruoyi 評論0 收藏0
  • Docker實戰(zhàn):更輕松、更愉快、更高效

    摘要:接下來,我們來看一個更酷的工作流程,即通過引入來實現(xiàn)項目的持續(xù)集成。是一個持續(xù)集成發(fā)布平臺,支持對容器進行測試。取消對的選中狀態(tài)。 showImg(https://segmentfault.com/img/bVk4cF); 借助Docker,我們可以更容易地進行web應(yīng)用部署,而同時不必頭疼于項目依賴、環(huán)境變量以及各種配置問題,Docker可以快捷、高效地處理好這一切。 而這也是本...

    hosition 評論0 收藏0
  • 不正宗 docker 入門教程-使用 docker-compose (3/3)

    摘要:看看它里面的鏡像是怎么寫的還是很有收獲的相關(guān)不正宗入門教程啟動一個容器不正宗入門教程構(gòu)建一個鏡像不正宗入門教程使用博客原文 本章通過一個具體的demo來了解 docker-compose docker-compose 是做什么的 在構(gòu)建一個完整的服務(wù)時,我們通常啟動一個容器, 一旦出現(xiàn)多個容器需要同時啟動的時候手打是下下之策, 因為時間一長難免會忘記細節(jié),寫腳本也不是不可以,但是大家沒...

    MorePainMoreGain 評論0 收藏0
  • 都9102年了,還不會Docker?10分鐘帶你入門操作到實戰(zhàn)上手

    摘要:聯(lián)調(diào)測試,無需依賴他人。針對以上問題,有兩種解決方法,一個是自己搭建私有服務(wù),另一個是用云服務(wù)的鏡像管理平臺如阿里云的容器鏡像服務(wù)。利用,先對阿里云的服務(wù)進行登錄。推送后,就能在阿里云的倉庫上看到這個鏡像。 Docker簡述 Docker是一種OS虛擬化技術(shù),是一個開源的應(yīng)用容器引擎。它可以讓開發(fā)者將應(yīng)用打包到一個可移植的容器中,并且該容器可以運行在幾乎所有l(wèi)inux系統(tǒng)中(Windo...

    sf_wangchong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<