成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Dockerfile 與 Compose 環(huán)境搭建學(xué)習(xí)筆記(一)

TZLLOG / 1044人閱讀

摘要:的主要作用是自己根據(jù)基礎(chǔ)鏡像,重新定制鏡像,而不是直接從官方倉(cāng)庫(kù)拿現(xiàn)成的使用。以接下來(lái)要構(gòu)建的環(huán)境來(lái)說(shuō)明下,下面我將要搭建一個(gè)的開(kāi)發(fā)環(huán)境,需要進(jìn)行配合。它的主要作用是持久化數(shù)據(jù),避免容器銷(xiāo)毀后內(nèi)部數(shù)據(jù)丟失暴露到宿主機(jī)的端口。

以前一直使用 Vagrant 作為自己的開(kāi)發(fā)環(huán)境,并且在上家公司也推行大家采用 Vagrant 作為開(kāi)發(fā)環(huán)境,保障公司使用的是同一套開(kāi)發(fā)環(huán)境。隨著docker的流行,越來(lái)越多的人在docker上運(yùn)行自己的項(xiàng)目,利用docker也非常方便模擬各種線上集群,相比虛擬機(jī)效率會(huì)更高,不管是搭建還是運(yùn)行。

網(wǎng)絡(luò)上關(guān)于docker搭建環(huán)境的資料非常之多了,但自己一直沒(méi)有進(jìn)行過(guò)實(shí)踐。紙上得來(lái)終覺(jué)淺,只有自己動(dòng)過(guò)手之后,才能對(duì)相關(guān)的概念更熟悉?;藢⒔?天時(shí)間折騰,終于算是把docker的開(kāi)發(fā)環(huán)境搭建好了,對(duì)他的很多概念也又了更深入的認(rèn)識(shí)。整理一下整個(gè)過(guò)程,方便以后查漏補(bǔ)缺。

下面就來(lái)開(kāi)啟docker之旅吧,打算利用docker完成以下任務(wù):

基礎(chǔ)的環(huán)境搭建:MySQL、Redis、Nginx;

搭建PHP、Golang的開(kāi)發(fā)環(huán)境;

搭建MySQL、Redis的主從;

探索一下如何監(jiān)控docker中的進(jìn)程。

涉及的命令介紹

這僅僅是操作筆記,不涉及 Docker 原理什么之類(lèi)的知識(shí),重點(diǎn)是如何應(yīng)用。為了后續(xù)理解方便,先把用到的相關(guān)命令在這里進(jìn)行整體介紹。

查找鏡像
? ~/home/dockerenv >docker search mysql

上面這個(gè)命令就是查找 mysql 鏡像。對(duì)應(yīng)的可以將 mysql 替換成其它想要查找的鏡像名稱(chēng)。該命令常用選項(xiàng)是: -s。可以設(shè)置搜索條件:多少個(gè)start以上的鏡像。

? ~/home/dockerenv >docker search -s 100 mysql

搜索有100個(gè)以上start的 mysql 鏡像。

獲取鏡像
docker pull centos7

這個(gè)命令會(huì)把鏡像克隆到本地,就像:git clone 一樣的效果。關(guān)于什么是鏡像、容器之類(lèi)的概念不在我的講解范疇了。

查看與刪除鏡像
? ~/home/dockerenv >docker image ls

會(huì)列出當(dāng)前所有的本地安裝了的鏡像。看到了有哪些鏡像,有時(shí)候一個(gè)鏡像我們用不到了,想把它干掉,為硬盤(pán)騰騰位置,可以用下面的命令:

? ~/home/dockerenv >docker rmi 0d16d0a97dd1 # 編號(hào)是 image id
創(chuàng)建鏡像 - Dockerfile

docker的鏡像可以從官方直接拉取,也可也通過(guò) Dockerfile 進(jìn)行定制,寫(xiě)好 Dockerfile 文件后,可以執(zhí)行下面的命令運(yùn)行鏡像。

? ~/home/dockerenv >docker build -t nginx:1.14.0 .

這里的結(jié)尾有個(gè) . 它表示上下文,而不是說(shuō) Dockerfile 的路徑。舉例來(lái)說(shuō),在 Dockerfile 中常常用 Copy 指令,它拷貝的文件必須要在這個(gè)上下文中。

Dockerfile的主要作用是:自己根據(jù)基礎(chǔ)鏡像,重新定制鏡像,而不是直接從官方倉(cāng)庫(kù)拿現(xiàn)成的使用。

具體含義可以看這里:https://yeasy.gitbooks.io/doc...

啟動(dòng)容器
? ~/home/dockerenv >docker run -it --rm php:7 bash

上面的命令會(huì)啟動(dòng)一個(gè)容器,并且分配一個(gè)偽終端,退出后容器就會(huì)被刪除。

? ~/home/dockerenv >docker run -d -p 9000:9000 php:7

這個(gè)命令會(huì)在后臺(tái)運(yùn)行一個(gè)容器,此容器不會(huì)因?yàn)橥顺鼍捅粍h除,可以重復(fù)進(jìn)行start、stop操作。

上面兩種容器啟動(dòng)的操作方式,在我的文章中其實(shí)不會(huì)出現(xiàn),我的環(huán)境是基于docker-compose + Dockerfile 來(lái)搭建的。因?yàn)楦鶕?jù)最佳實(shí)踐:一個(gè)容器內(nèi)部只包含一個(gè)進(jìn)程,像上面我需要安裝:PHP/Golang/Redis/Nginx/Mysql等,就算不算主從也需要啟動(dòng)5個(gè)容器,每次這樣啟動(dòng)都要累死,還不說(shuō)需要管理容器之間的互聯(lián)。因此我使用Compose來(lái)定義和運(yùn)行多個(gè) Docker 容器的應(yīng)用。

查看容器信息
? ~/home/dockerenv >docker inspect a49dfb2e6f45 # image id

通過(guò)該命令可以看到容器的完整信息,我用這個(gè)命令主要是在進(jìn)行容器互聯(lián)的時(shí)候,檢查容器的網(wǎng)絡(luò)與IP相關(guān)的情況。

進(jìn)入容器
? ~/home/dockerenv >docker exec -it e8d740a6ac7a bash # image id

上面的命令可以進(jìn)入容器,讓你感覺(jué)像是 ssh 到了遠(yuǎn)程機(jī)器一樣的感覺(jué)。

停止、啟動(dòng)
? ~/home/dockerenv >docker stop a49dfb2e6f45 # image id

如果容器是在后臺(tái)啟動(dòng),可以通過(guò)該方式停止容器。停止后可以使用下面的命令啟動(dòng)容器:

? ~/home/dockerenv >docker start a49dfb2e6f45 # image id
查看與刪除容器

容器也可以像鏡像一樣進(jìn)行查看

? ~/home/dockerenv >docker ps

上面的命令只會(huì)顯示啟動(dòng)了的鏡像,如果要查看所有鏡像,可以添加 -a 選項(xiàng)。
如果某個(gè)容器不需要了,可以使用下面的命令進(jìn)行刪除:

? ~/home/dockerenv >docker rm 0d848bc87fe7  # image id

容器的刪除并不會(huì)影響鏡像,鏡像可以繼續(xù)用來(lái)啟動(dòng)新的容器。并且如果依賴某個(gè)鏡像創(chuàng)建的容器沒(méi)有被刪除,該鏡像是不能直接刪除的,需要先刪除容器后才能繼續(xù)刪除鏡像。

Compose 中的啟動(dòng)與停止

針對(duì)docker compose啟動(dòng)與停止用到下面的命令,個(gè)人感覺(jué)這就是批量操作,畢竟容器太多,一個(gè)一個(gè)操作太麻煩,容易遺漏等等問(wèn)題。

批量啟動(dòng):

? ~/home/dockerenv >docker-compose up -d

雖然該命令并不是單純的啟動(dòng)容器,它非常強(qiáng)大,將嘗試自動(dòng)完成包括構(gòu)建鏡像,(重新)創(chuàng)建服務(wù),啟動(dòng)服務(wù),并關(guān)聯(lián)服務(wù)相關(guān)容器的一系列操作。

如果已經(jīng)創(chuàng)建完了,也可以用下面的命令來(lái)啟動(dòng)已經(jīng)創(chuàng)建的容器。

? ~/home/dockerenv >docker-compose start

如果想要停止容器可以使用下面的命令:

? ~/home/dockerenv >docker-compose stop

當(dāng)然這些命令的運(yùn)行,要在 docker-compose.yml 文件所在的目錄下運(yùn)行,否則它也不知道該啟動(dòng)或關(guān)閉哪些容器。

基本用到的命令大概就是上面這些,接下來(lái)先說(shuō)說(shuō) docker-compose.yml 文件的編寫(xiě)。

Docker Compose構(gòu)建環(huán)境

Docker Compose 可以把多個(gè)容器方便的管理起來(lái),也就是所謂的編排技術(shù)。

編排技術(shù)的核心是 docker-compose.yml 這個(gè)模版文件。它定義了容器集群里每一個(gè)容器的鏡像、數(shù)據(jù)卷掛載路徑、端口、網(wǎng)絡(luò)等。

以接下來(lái)要構(gòu)建的環(huán)境來(lái)說(shuō)明下,下面我將要搭建一個(gè)php7的開(kāi)發(fā)環(huán)境,需要Nginx/PHP-FPM/MySQL/Redis進(jìn)行配合。那么需要啟動(dòng)4個(gè)容器。對(duì)應(yīng)的也需要4個(gè)鏡像。整個(gè)環(huán)境的目錄結(jié)構(gòu)如下:

├── README.md
├── docker-compose.yml
├── logs
│?? └── nginx
├── mysql
│?? ├── conf
│?? └── data
├── nginx
│?? ├── Dockerfile
│?? ├── conf
│?? └── src
├── php7
│?? ├── Dockerfile
│?? ├── docker-compose.yml
│?? ├── etc
│?? ├── extensions
│?? └── src
├── redis
│?? ├── Dockerfile
│?? ├── conf
│?? ├── data
│?? └── src
├── start.sh
├── stop.sh
└── www
    └── abc

我的MySQL是直接使用的官方提供的鏡像資源,而Redis/Nginx/PHP為了做定制化,我采用Dockerfile進(jìn)行自定義。接下來(lái)按照每一個(gè)獨(dú)立的服務(wù)分別進(jìn)行一下說(shuō)明。

MySQL服務(wù)
dev.mysql.srv:
    image: mysql:5.7.22
  volumes:
        - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    ports:
        - "3307:3306"
    restart: always
    environment:
        MYSQL_ROOT_PASSWORD: 123123
    networks:
        - default

image:是制定依賴的鏡像,這里是Docker提供的鏡像資源;

volumes:數(shù)據(jù)卷所掛載路徑設(shè)置,主要是MySQL的數(shù)據(jù)保存的路徑設(shè)置與配置文件的設(shè)置。它的主要作用是持久化數(shù)據(jù),避免容器銷(xiāo)毀后內(nèi)部數(shù)據(jù)丟失;

ports:暴露到宿主機(jī)的端口。這個(gè)沒(méi)什么太多說(shuō)的,就是為了可以在宿主機(jī)訪問(wèn)到容器內(nèi)部的服務(wù);

restart:該命令是設(shè)置容器如果在某種情況下(非認(rèn)為)退出了,容器重啟的策略;

environment:設(shè)置鏡像的環(huán)境變量,你可以進(jìn)入鏡像通過(guò):echo $MYSQL_ROOT_PASSWORD 查看其值;

networks:設(shè)置網(wǎng)絡(luò),讓所有的容器在一個(gè)網(wǎng)絡(luò)中,方便容器互聯(lián)互通。

這里還有一個(gè)點(diǎn)需要注意,dev.mysql.srv ,是我為mysql服務(wù)取的名字。取一個(gè)好的名字,非常便于后續(xù)容器互聯(lián)的使用,比如這個(gè)名字,如果php代碼需要填寫(xiě)mysql的host。我則可以直接使用它。

其它服務(wù)

剩下的三種服務(wù)配置方式基本上大同小異。我放在一起說(shuō)明。

dev.nginx.srv:
    image: lei_nginx:1.14.0
    build: ./nginx
    volumes:
        - ./nginx/conf:/home/work/app/nginx/conf
      - ./www:/home/work/www
    ports:
        - "80:8080"
      - "443:443"
    restart: always
    networks:
        - default
    depends_on:
      - dev.php-fpm.srv
dev.redis.srv:
    image: lei_redis:3.2.11
    build: ./redis
    volumes:
        - ./redis/conf:/home/work/app/redis/conf
      - ./redis/data:/home/work/app/redis/data
    ports:
      - "6379:6379"
    restart: always
    networks:
      - default
dev.php-fpm.srv:
    image: lei_php:7.2.6
    build: ./php7
    volumes:
        - ./php7/etc:/home/work/app/php/etc
        - ./www:/home/work/www
    ports:
        - "9000:9000"
    restart: always
    networks:
        - default

這里與MySQL最大的一個(gè)區(qū)別是多了一個(gè) build 選項(xiàng)。這就是上面說(shuō)到的這三個(gè)鏡像都是我用Dockerfile定制的有關(guān)。你可以在對(duì)應(yīng)的 build 指定的目錄下看到 Dockerfile 這個(gè)文件。

另外一個(gè)需要注意的地方是Nginx中配置的 depends_on 選項(xiàng),他的作用是指定依賴,因?yàn)镹ginx中我配置了php-fpm。所以它啟動(dòng)前要確保php-fpm已經(jīng)啟動(dòng)后,他才能正常的啟動(dòng)。

啟動(dòng)

為了減少太多概念的東西,你可以先直接從github拉取這部分配置,然后運(yùn)行

? ~/home/dockerenv >./start.sh
Starting dockerenv_dev.php-fpm.srv_1 ... done
Starting dockerenv_dev.redis.srv_1   ... done
Starting dockerenv_dev.mysql.srv_1   ... done
Creating dockerenv_dev.nginx.srv_1   ... done

如果你是第一次運(yùn)行 start.sh ,他還會(huì)去docker hub上拉取鏡像,以及根據(jù)Dockerfile來(lái)定制鏡像。所以會(huì)有非常多的輸出信息。

然后訪問(wèn):http://localhost 。應(yīng)該就能夠看到 phpinfo() 輸出的信息。

總結(jié)

經(jīng)過(guò)自己的熟悉,對(duì)基本的docker命令,以及docker的三個(gè)基礎(chǔ)概念:倉(cāng)庫(kù)、鏡像、容器有了充分的認(rèn)識(shí)。利用 docker compose 搭建一個(gè)環(huán)境后,對(duì)于容器的互聯(lián)也有了更深刻的體會(huì),并且經(jīng)過(guò)這種一個(gè)容器運(yùn)行一個(gè)進(jìn)程的方式,對(duì)系統(tǒng)也有了一些更深的認(rèn)識(shí)。在利用Dockerfile定制鏡像的過(guò)程中,通過(guò)反復(fù)的 build 鏡像,對(duì)理解容器的分層、如何確保鏡像體積更小方面有了相當(dāng)多的實(shí)踐,特別是在ENTRYPOINT的設(shè)置上,認(rèn)識(shí)到了docker的啟動(dòng)流程。

由于篇幅限制,把 Dockerfile 的內(nèi)容在拆出一篇來(lái)進(jìn)行說(shuō)明,以及把遇到的一些問(wèn)題也進(jìn)行一些整理。

我的docker環(huán)境:https://github.com/helei112g/...

以后換機(jī)裝換機(jī),再也不擔(dān)心了

微信公眾號(hào):

參考資料:

https://yeasy.gitbooks.io/doc...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39982.html

相關(guān)文章

  • Dockerfile Compose 環(huán)境搭建學(xué)習(xí)筆記

    摘要:的主要作用是自己根據(jù)基礎(chǔ)鏡像,重新定制鏡像,而不是直接從官方倉(cāng)庫(kù)拿現(xiàn)成的使用。以接下來(lái)要構(gòu)建的環(huán)境來(lái)說(shuō)明下,下面我將要搭建一個(gè)的開(kāi)發(fā)環(huán)境,需要進(jìn)行配合。它的主要作用是持久化數(shù)據(jù),避免容器銷(xiāo)毀后內(nèi)部數(shù)據(jù)丟失暴露到宿主機(jī)的端口。 以前一直使用 Vagrant 作為自己的開(kāi)發(fā)環(huán)境,并且在上家公司也推行大家采用 Vagrant 作為開(kāi)發(fā)環(huán)境,保障公司使用的是同一套開(kāi)發(fā)環(huán)境。隨著docker的流...

    ityouknow 評(píng)論0 收藏0
  • Dockerfile Compose 環(huán)境搭建學(xué)習(xí)筆記(二)

    摘要:上一篇文章對(duì)整體結(jié)構(gòu)進(jìn)行了簡(jiǎn)單記錄,這一篇介紹下關(guān)于自定義鏡像以及各個(gè)服務(wù)的配置。在選擇基礎(chǔ)鏡像方面,推薦使用,然后再它上面進(jìn)行定制,因?yàn)樗浅5男H。 上一篇文章對(duì)整體結(jié)構(gòu)進(jìn)行了簡(jiǎn)單記錄,這一篇介紹下關(guān)于Dockerfile自定義鏡像以及各個(gè)服務(wù)的配置。 其實(shí) https://hub.docker.com/ 上面各種基礎(chǔ)鏡像非常完善,特別是官方的鏡像質(zhì)量非常之高,而我再搗騰一次完全是...

    Enlightenment 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Docker入門(mén)》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層??蛇x指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令。可選用于指定需要暴露的網(wǎng)絡(luò)端口號(hào)??蛇x向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無(wú) 學(xué)習(xí)源碼:無(wú) 第一章:課程簡(jiǎn)介 1-1 課程介紹 Docke...

    CoorChice 評(píng)論0 收藏0
  • 分解docker在lnmp環(huán)境搭建中的作用

    摘要:如果不用我們可能將上述講的命令每搭建一次就需要執(zhí)行一遍,有沒(méi)有能統(tǒng)一管理的有,就是在環(huán)境搭建中的作用快速創(chuàng)建鏡像,快速創(chuàng)建并運(yùn)行容器,實(shí)現(xiàn)統(tǒng)一管理。 前言 初學(xué)者在dcoker學(xué)習(xí)過(guò)程中,可能不太清楚docker中那么多的命令,參數(shù),工具在lnmp環(huán)境搭建中起了什么作用,下面跟著我來(lái)熟悉一下。(本文面向的是不怎么熟悉linux的:phper) 鏡像,容器,倉(cāng)庫(kù) 鏡像:Docker 鏡像...

    tommego 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<