Docker进阶实战
文章目錄
- 前言
- 一、容器數(shù)據(jù)卷
- 1.數(shù)據(jù)卷介紹
- 2.數(shù)據(jù)卷使用
- 2.1 數(shù)據(jù)卷的常用命令
- 3.MySql在Docker中的持久化問題
- 4. 匿名和具名掛載
- 4.1 匿名掛載
- 4.2 具名掛載
- 4.3 掛載信息查看與權(quán)限寫入
- 二、DockerFile
- 1. 概述
- 2. 構(gòu)建過程
- 2.1 基礎(chǔ)知識
- 2.2 DockerFile 指令
- 3. 實戰(zhàn)
- 3.1 構(gòu)建centos 鏡像
- 3.2 構(gòu)建tomcat 鏡像
- 三、DockerNet
- 1. 認(rèn)識網(wǎng)絡(luò)模式
- 2. 默認(rèn)網(wǎng)絡(luò)
- 2.1 Host
- 2.2 Container
- 2.3 None
- 2.4 Bridge
- 3. Docker:網(wǎng)絡(luò)模式詳解
- 3.1 Bridge模式的拓?fù)?/li>
- 3.2 Docker:網(wǎng)絡(luò)模式詳解
- 3.3 容器聯(lián)通
- 4. 自定義網(wǎng)絡(luò)
- 4.1 查看默認(rèn)的網(wǎng)橋信息
- 4.2 自定義網(wǎng)絡(luò)
- 4.3 自定義網(wǎng)絡(luò)的好處
- 5.網(wǎng)絡(luò)連通
- 6. Redis集群部署實戰(zhàn)
- 7. SpringBoot微服務(wù)打包發(fā)布
- 四、Docker Compose
- 1. Compose 簡介
- 2. Compose 安裝
- 3. 使用
- 3.1 準(zhǔn)備
- 3.2 創(chuàng)建 Dockerfile 文件
- 3.3 創(chuàng)建 docker-compose.yml
- 4 .使用 Compose 部署前后分離項目實戰(zhàn)
- 4.1 打包前后端項目
- 4.2 編寫DockerFile
- 4.3 編寫docker-compose.yaml
- 4.4 啟動部署
- 五、Docker Machine
- 六、Docker Swarm
- 總結(jié)
前言
Dokcer 進(jìn)階
如果還沒想清楚,就用 蠻力算法 。——Ken Thompson
一、容器數(shù)據(jù)卷
1.數(shù)據(jù)卷介紹
Docker將運用與運行的環(huán)境打包形成容器運行, Docker容器產(chǎn)生的數(shù)據(jù),如果不通過docker commit生成新的鏡像,使得數(shù)據(jù)做為鏡像的一部分保存下來, 那么當(dāng)容器刪除后,數(shù)據(jù)自然也就沒有了。 為了能保存數(shù)據(jù)在Docker中我們使用卷。|
卷就是目錄或文件,存在于一個或多個容器中,由Docker掛載到容器,但卷不屬于聯(lián)合文件系統(tǒng)(Union FileSystem),因此能夠繞過聯(lián)合文件系統(tǒng)提供一些用于持續(xù)存儲或共享數(shù)據(jù)的特性:。
卷的設(shè)計目的就是數(shù)據(jù)的持久化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數(shù)據(jù)卷。
數(shù)據(jù)卷的特點:
1. 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
2. 卷中的更改可以直接生效
3. 數(shù)據(jù)卷中的更改不會包含在鏡像的更新中
4. 數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
容器之間的數(shù)據(jù)共享技術(shù),Dokcer容器中產(chǎn)生的數(shù)據(jù),同步到本地。核心就是目錄的掛載,講容器內(nèi)部的目錄,掛載到Linux上面
小結(jié):容器的持久化和同步操作!容器也是可以數(shù)據(jù)共享的!
2.數(shù)據(jù)卷使用
直接使用命令方式來掛載 -v # docker run -it -v 主機(jī)目錄/容器目錄 測試 # docker run -it -v /home/test:/home cnetos /bin/bash 啟動之后查看容器詳細(xì)信息 # docker inspect <容器id> > Mounts 掛載信息 > Type 類型 > Source 主機(jī)內(nèi)地址 > Destination docker容器內(nèi)地址
雙向綁定數(shù)據(jù)。數(shù)據(jù)互通。在本地主機(jī)修改即可,無需進(jìn)入docker容器中。
2.1 數(shù)據(jù)卷的常用命令
1.創(chuàng)建數(shù)據(jù)卷 # docker volume create <卷名稱> 2.查看所有數(shù)據(jù)集 # docker volume ls 3.查看指定的數(shù)據(jù)卷信息 # docker volume inspect <卷名稱> { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-vol/_data", "Name": "my-vol", "Options": {}, "Scope": "local" } 4.刪除數(shù)據(jù)卷 # docker volume rm <卷名稱> 5.刪除容器的時候刪除與之相關(guān)的數(shù)據(jù)卷 # docker rm -v ... > 數(shù)據(jù)卷是被設(shè)計用來持久化數(shù)據(jù)的,它的生命周期獨立于容器,Docker 不會在容器被刪除后自動刪除數(shù)據(jù)卷。 > 并且也不存在垃圾回收這樣的機(jī)制來處理沒有任何容器引用的數(shù)據(jù)卷 。如果需要在刪除容器的同時移除數(shù)據(jù)卷。 > 可以在刪除容器的時候使用 docker rm -v 這個命令。 6.無主的數(shù)據(jù)卷可能會占據(jù)很多空間,要清理請使用以下命令 # docker volume prune使用 --mount創(chuàng)建數(shù)據(jù)卷掛載一個主機(jī)目錄作為數(shù)據(jù)卷
使用 --mount 標(biāo)記可以指定掛載一個本地主機(jī)的目錄到容器中去。
上面的命令掛載主機(jī)的/src/webapp目錄到容器的/opt/webapp目錄。用戶可以放置一些程序到本地目錄中,來查看容器是否正常工作。本地目錄的路徑必須是絕對路徑,如果目錄不存在 Docker 會自動為你創(chuàng)建它。
Docker 掛載主機(jī)目錄的默認(rèn)權(quán)限是讀寫 ,用戶也可以通過添加readonly 參數(shù)指定為只讀 。
$ docker run -d -P \ --name web \ # -v /src/webapp:/opt/webapp:ro \ --mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \ training/webapp \ python app.py 加了readonly之后,就掛載為只讀了。如果你在容器內(nèi)/src/webapp目錄新建文件,會顯示如下錯誤 /src/webapp # touch new.txt touch: new.txt: Read-only file system3.MySql在Docker中的持久化問題
實例
安裝MySql,MySql的數(shù)據(jù)持久化問題
4. 匿名和具名掛載
我們使用Docker與宿主機(jī)做關(guān)聯(lián)時,常常是要進(jìn)行掛載數(shù)據(jù)和配置文件的,那么Dokcer中就提供了兩種掛載方式,分別是具名掛載與匿名掛載。顧名思義,具名就是有具體名稱的掛載方式,而匿名就是沒有名字,或者說沒有指定名字,而被系統(tǒng)隨機(jī)分配名字的方式。
掛載命令
匿名掛載,具名掛載,指定路徑掛載的命令區(qū)別如下:
-v 容器內(nèi)路徑 #匿名掛載
-v 卷名:容器內(nèi)路徑 #具名掛載
-v /宿主機(jī)路徑:容器內(nèi)路徑 #指定路徑掛載
4.1 匿名掛載
如下運行并匿名掛載Nginx容器:
匿名掛載命令格式 # docker run -d -P --name nginx01 -v /etc/nginx nginx查看所有的數(shù)據(jù)卷volume的情況, VOLUME NAME這里的值是真實存在的目錄。
# docker volume ls DRIVER VOLUME NAME local 198f39c04b7705350088ad8f9ab6072068da3547db375f99bb305cbf92abdb9f local 10913c9dbecc738bf7ce2614bca085d23d8ea57998051e1967ab865476d7a845 local ba800c642e0e295b2a275e0d3809ddc6bd2d1f11565b4741dfea506fd6e0e4f6 local fc1eccb2b19c84dd769c572a0389658fefc3248b19b9bbe3573c3cd299fa28a0這種隨機(jī)名稱的掛載即為匿名掛載
4.2 具名掛載
如下運行并具名掛載Nginx容器:
具名掛載 # docker run -d -P --name nginx02 -v <具體名稱>:/etc/nginx nginx # docker volume ls DRIVER VOLUME NAME local 0cd45ab893fc13971219ac5127f9c0b02491635d76d94183b0261953bdb52d26 local 668a94251e562612880a2fdb03944d67d1acdbbdae6ef7c94bee8685644f2956 local e605f3dc4bf11ab693972592b55fb6911e5bf2083425fd58869c5f574998a09a local juming-nginx4.3 掛載信息查看與權(quán)限寫入
查看指定的數(shù)據(jù)卷信息的命令:docker volume inspect數(shù)據(jù)卷名稱
查看掛載信息 # docker volume inspect <卷名稱> [{"CreatedAt": "2022-05-14T21:45:11+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/liusiqi/_data","Name": "nginx","Options": null,"Scope": "local"} ] > 可以看到Mountpoint參數(shù)即為掛載路徑 url:/var/lib/docker/volumes/liusiqi/_data > Docker所有的數(shù)據(jù)卷默認(rèn)在/var/lib/docker/volumes/ 目錄下權(quán)限寫入
指定數(shù)據(jù)卷映射的相關(guān)參數(shù):
ro —— readonly 只讀。設(shè)置了只讀則只能操作宿主機(jī)的路徑,不能操作容器中的對應(yīng)路徑。
rw ----- readwrite 可讀可寫
二、DockerFile
1. 概述
DockerFile 就是用來構(gòu)建dokcer鏡像的文件!命令參數(shù)腳本。
構(gòu)建步驟:
例子:centos7的官方構(gòu)筑
FROM centos:7 ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]
關(guān)系圖
解析過程圖
2. 構(gòu)建過程
2.1 基礎(chǔ)知識
dockerfile面向開發(fā)的,發(fā)布項目,作鏡像就需要編寫dockerfile文件。
DockerFile:構(gòu)建文件,定義步驟,類似源代碼
DockerImages: 通過 DockerFile 構(gòu)建生成鏡像,最終發(fā)布和運行產(chǎn)品
Docker容器: 容器就是鏡像進(jìn)行運行來提供服務(wù)的
2.2 DockerFile 指令
| FROM | 指定基礎(chǔ)鏡像 |
| MAINTAINER | 鏡像是誰寫的,姓名+郵箱 |
| RUN | 鏡像構(gòu)建的時候需要運行的命令 |
| ADD | 將本地文件添加到容器中,tar類型文件會自動解壓(網(wǎng)絡(luò)壓縮資源不會被解壓),可以訪問網(wǎng)絡(luò)資源,類似wget |
| WORKDIR | 鏡像的工作目錄 |
| VOLUME | 掛載的目錄 |
| EXPOSE | 保留端口配置 |
| CMD | 指定這個容器啟動的時候要運行的命令(只有最后一個會生效) |
| EMTRYPOINT | 指定這個容器啟動的時候要運行的命令,可以追加命令 |
| ONBUILD | 當(dāng)構(gòu)建一個被繼承DockerFile,這個時候就會運行ONBUILD的指令,觸發(fā)指令 |
| COPY | 功能類似ADD,但是是不會自動解壓文件,也不能訪問網(wǎng)絡(luò)資源 |
| ENV | 構(gòu)建的時候設(shè)置環(huán)境變量 |
CMD 和 ENTRYPOINT 區(qū)別
CMD : 指定這個容器啟動的時候要運行的命令,職業(yè)最后一個會生效,可被替代
ENTRYPOINT: 指定這個容器啟動的時候要運行的命令,可以追加命令
3. 實戰(zhàn)
3.1 構(gòu)建centos 鏡像
自定義一個帶有vim 和net-tools 的centos并進(jìn)行發(fā)布
例:
nginx 編譯歷史
tomcat 編譯歷史
IMAGE CREATED CREATED BY SIZE COMMENT 6a1271dfce51 3 days ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B <missing> 3 days ago /bin/sh -c #(nop) EXPOSE 8080 0B <missing> 3 days ago /bin/sh -c set -eux; nativeLines="$(catalin… 0B <missing> 3 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 20.2MB <missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_SHA512=53bfdba… 0B <missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=10.0.20 0B <missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=10 0B <missing> 3 days ago /bin/sh -c #(nop) ENV GPG_KEYS=A9C5DF4D22E9… 0B <missing> 3 days ago /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/… 0B <missing> 3 days ago /bin/sh -c #(nop) ENV TOMCAT_NATIVE_LIBDIR=… 0B <missing> 3 days ago /bin/sh -c #(nop) WORKDIR /usr/local/tomcat 0B <missing> 3 days ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B <missing> 3 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomca… 0B <missing> 3 days ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/lo… 0B <missing> 4 days ago /bin/sh -c #(nop) CMD ["jshell"] 0B <missing> 4 days ago /bin/sh -c set -eux; arch="$(dpkg --print-… 343MB <missing> 4 days ago /bin/sh -c #(nop) ENV JAVA_VERSION=11.0.15 0B <missing> 4 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B <missing> 4 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B <missing> 4 days ago /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J… 27B <missing> 4 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B <missing> 4 days ago /bin/sh -c set -eux; apt-get update; apt-g… 11.3MB <missing> 4 days ago /bin/sh -c apt-get update && apt-get install… 152MB <missing> 4 days ago /bin/sh -c set -ex; if ! command -v gpg > /… 19MB <missing> 4 days ago /bin/sh -c set -eux; apt-get update; apt-g… 10.7MB <missing> 4 days ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 4 days ago /bin/sh -c #(nop) ADD file:68a5d7d0db5926251… 124MB3.2 構(gòu)建tomcat 鏡像
通過ftp傳入服務(wù)器上
建議: 本地編輯ftp傳入服務(wù)或者,拷貝
在網(wǎng)頁中輸入ip+端口 注意要加上/test
三、DockerNet
1. 認(rèn)識網(wǎng)絡(luò)模式
查看Dokcer的所有網(wǎng)絡(luò):
# docker network ls
Docker自身的4種網(wǎng)絡(luò)工作方式,和一些自定義網(wǎng)絡(luò)模式
安裝Docker時,它會自動創(chuàng)建三個網(wǎng)絡(luò),bridge(創(chuàng)建容器默認(rèn)連接到此網(wǎng)絡(luò))、 none 、host
host:容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。
Container:創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍。
None:該模式關(guān)閉了容器的網(wǎng)絡(luò)功能。
Bridge:此模式會為每一個容器分配、設(shè)置IP等,并將容器連接到一個docker0虛擬網(wǎng)橋,通過docker0網(wǎng)橋以及Iptables nat表配置與宿主機(jī)通信。
以上都是不用動手的,真正需要配置的是自定義網(wǎng)絡(luò)。
DockerComposeDocker內(nèi)置這三個網(wǎng)絡(luò),運行容器時,你可以使用該–network標(biāo)志來指定容器應(yīng)連接到哪些網(wǎng)絡(luò)。
該bridge網(wǎng)絡(luò)代表docker0所有Docker安裝中存在的網(wǎng)絡(luò)。除非你使用該
docker run --network= < NETWORK>
選項指定,否則Docker守護(hù)程序默認(rèn)將容器連接到此網(wǎng)絡(luò)。
我們在使用docker run創(chuàng)建Docker容器時,可以用 --net 選項指定容器的網(wǎng)絡(luò)模式,Docker可以有以下4種網(wǎng)絡(luò)模式:
host模式:使用 --net=host 指定。none模式:使用 --net=none 指定。bridge模式:使用 --net=bridge 指定,默認(rèn)設(shè)置。container模式:使用 --net=container:NAME_or_ID 指定。2. 默認(rèn)網(wǎng)絡(luò)
2.1 Host
2.2 Container
2.3 None
2.4 Bridge
3. Docker:網(wǎng)絡(luò)模式詳解
3.1 Bridge模式的拓?fù)?/h3>
當(dāng)Docker server啟動時,會在主機(jī)上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,此主機(jī)上啟動的Docker容器會連接到這個虛擬網(wǎng)橋上。虛擬網(wǎng)橋的工作方式和物理交換機(jī)類似,這樣主機(jī)上的所有容器就通過交換機(jī)連在了一個二層網(wǎng)絡(luò)中。接下來就要為容器分配IP了,Docker會從RFC1918所定義的私有IP網(wǎng)段中,選擇一個和宿主機(jī)不同的IP地址和子網(wǎng)分配給docker0,連接到docker0的容器就從這個子網(wǎng)中選擇一個未占用的IP使用。如一般Docker會使用172.17.0.0/16這個網(wǎng)段,并將172.17.0.1/16分配給docker0網(wǎng)橋(在主機(jī)上使用ifconfig命令是可以看到docker0的,可以認(rèn)為它是網(wǎng)橋的管理接口,在宿主機(jī)上作為一塊虛擬網(wǎng)卡使用)。單機(jī)環(huán)境下的網(wǎng)絡(luò)拓?fù)淙缦?#xff0c;主機(jī)地址為10.10.0.186/24。
3.2 Docker:網(wǎng)絡(luò)模式詳解
Docker容器完成bridge網(wǎng)絡(luò)配置的過程如下:
Docker 利用 veth-pair技術(shù)實現(xiàn)橋接:
Docker中的所有的網(wǎng)絡(luò)接口都是虛擬的。只要容器停止或者刪除,容器對應(yīng)的網(wǎng)橋也會刪除。
3.3 容器聯(lián)通
在微服務(wù)部署的場景下,注冊中心是使用服務(wù)名來唯一識別微服務(wù)的,而我們上線部署的時候微服務(wù)對應(yīng)的IP地址可能會改動,所以我們需要使用容器名來配置容器間的網(wǎng)絡(luò)連接。使用–link可以完成這個功能。
== --link 功能已經(jīng)是過去的技術(shù)了,這里做一個了解,真實項目使用場景中拋棄這種方式 ==
我們看到這種link方式直接使用容器名稱就可以ping通了。
但是反過來容器Tomcat01通過容器名Tomcat04直接ping容器Tomcat04是不行的。這是因為 –link的底層操作是修改容器的hosts文件達(dá)到ip地址與容器名稱映射的。
4. 自定義網(wǎng)絡(luò)
建議使用自定義的網(wǎng)橋來控制哪些容器可以相互通信,還可以自動DNS解析容器名稱到IP地址。Docker提供了創(chuàng)建這些網(wǎng)絡(luò)的默認(rèn)網(wǎng)絡(luò)驅(qū)動程序,你可以創(chuàng)建一個新的Bridge網(wǎng)絡(luò),Overlay或Macvlan網(wǎng)絡(luò)。你還可以創(chuàng)建一個網(wǎng)絡(luò)插件或遠(yuǎn)程網(wǎng)絡(luò)進(jìn)行完整的自定義和控制。
你可以根據(jù)需要創(chuàng)建任意數(shù)量的網(wǎng)絡(luò),并且可以在任何給定時間將容器連接到這些網(wǎng)絡(luò)中的零個或多個網(wǎng)絡(luò)。此外,您可以連接并斷開網(wǎng)絡(luò)中的運行容器,而無需重新啟動容器。當(dāng)容器連接到多個網(wǎng)絡(luò)時,其外部連接通過第一個非內(nèi)部網(wǎng)絡(luò)以詞法順序提供。
4.1 查看默認(rèn)的網(wǎng)橋信息
# docker network inspect bridge無容器純凈的網(wǎng)絡(luò)信息
[{"Name": "bridge","Id": "e83d01603ae8672ded8b5c7ef7e82c0cb900341f4290c70db5a6be4796d29850","Created": "2022-05-13T18:39:19.710131055+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true","com.docker.network.bridge.host_binding_ipv4": "0.0.0.0","com.docker.network.bridge.name": "docker0","com.docker.network.driver.mtu": "1500"},"Labels": {}} ]我們可以看到子網(wǎng)掩碼和網(wǎng)關(guān)的值,這就是網(wǎng)絡(luò)的基礎(chǔ)配置
“Subnet”: “172.17.0.0/16”,
“Gateway”: “172.17.0.1”
4.2 自定義網(wǎng)絡(luò)
# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet| –driver bridge | 指定bridge驅(qū)動程序來管理網(wǎng)絡(luò) |
| –subnet 192.168.0.0/16 | 指定網(wǎng)段的CIDR格式的子網(wǎng) |
| –gateway 192.168.0.1 | 指定主子網(wǎng)的IPv4或IPv6網(wǎng)關(guān) |
查看自定義網(wǎng)絡(luò)信息
# docker network inspect mynet這就是我們自定義網(wǎng)絡(luò)的信息,發(fā)現(xiàn)子網(wǎng)掩碼和網(wǎng)關(guān)的值就是我們自定義的"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},4.3 自定義網(wǎng)絡(luò)的好處
在我們的自定義網(wǎng)絡(luò)下,容器之間既可以通過容器名也可以通過ip地址進(jìn)行網(wǎng)絡(luò)通信。 我們自定義的網(wǎng)絡(luò)默認(rèn)已經(jīng)幫我們維護(hù)了容器間的網(wǎng)絡(luò)通信問題,這是實現(xiàn)網(wǎng)絡(luò)互聯(lián)的推薦方式。
發(fā)現(xiàn)不用配置 --link 也可以實現(xiàn)直接用容器名稱ping通網(wǎng)絡(luò)
5.網(wǎng)絡(luò)連通
不同網(wǎng)絡(luò)直接不可以直接ping通,這時候就需要進(jìn)行網(wǎng)絡(luò)連接。圖中,net01 與 net02 屬于mynet 網(wǎng)絡(luò),想要tomcat01 直接ping通 net01 。
發(fā)現(xiàn)在mynet 的網(wǎng)絡(luò)信息中多了tomcat01 的信息。可以看到給容器tomcat-01分配了一個ip地址,這樣就可以實現(xiàn)不同網(wǎng)絡(luò)的互聯(lián)。
6. Redis集群部署實戰(zhàn)
7. SpringBoot微服務(wù)打包發(fā)布
四、Docker Compose
1. Compose 簡介
Compose 是用于定義和運行多容器 Docker 應(yīng)用程序的工具。通過 Compose,您可以使用 YML 文件來配置應(yīng)用程序需要的所有服務(wù)。然后,使用一個命令,就可以從 YML 文件配置中創(chuàng)建并啟動所有服務(wù)。
如果你還不了解 YML 文件配置,可以先閱讀 YAML 入門教程。
Compose 使用的三個步驟:
docker-compose.yml 的配置案例如下(配置參數(shù)參考下文):
# yaml 配置實例 version: '3' services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis volumes:logvolume01: {}2. Compose 安裝
Linux 上我們可以從 Github 上下載它的二進(jìn)制包來使用,最新發(fā)行的版本地址:https://github.com/docker/compose/releases。
運行以下命令以下載 Docker Compose 的當(dāng)前穩(wěn)定版本:
要安裝其他版本的 Compose,請?zhí)鎿Q v2.2.2。
Docker Compose 存放在 GitHub,不太穩(wěn)定。
你可以也通過執(zhí)行下面的命令,高速安裝 Docker Compose。
將可執(zhí)行權(quán)限應(yīng)用于二進(jìn)制文件:
$ sudo chmod +x /usr/local/bin/docker-compose創(chuàng)建軟鏈:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose測試是否安裝成功:
$ docker-compose --version cker-compose version 1.24.1, build 4667896b3. 使用
步驟來源于官網(wǎng),可移步官網(wǎng)。 官網(wǎng)地址
3.1 準(zhǔn)備
創(chuàng)建一個測試目錄:
# mkdir composetest # cd composetest在測試目錄中創(chuàng)建一個名為 app.py 的文件,并復(fù)制粘貼以下內(nèi)容:
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5) @app.route('/') def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)在此示例中,redis 是應(yīng)用程序網(wǎng)絡(luò)上的 redis 容器的主機(jī)名,該主機(jī)使用的端口為 6379。
在 composetest 目錄中創(chuàng)建另一個名為 requirements.txt 的文件,內(nèi)容如下:
3.2 創(chuàng)建 Dockerfile 文件
在 composetest 目錄中,創(chuàng)建一個名為 Dockerfile 的文件,內(nèi)容如下:
FROM python:3.7-alpine //從 Python 3.7 映像開始構(gòu)建鏡像。 WORKDIR /code //將工作目錄設(shè)置為 /code。 ENV FLASK_APP app.py //設(shè)置 flask 命令使用的環(huán)境變量。 ENV FLASK_RUN_HOST 0.0.0.0 //設(shè)置 flask 命令使用的環(huán)境變量。 RUN apk add --no-cache gcc musl-dev linux-headers //安裝 gcc,以便諸如 MarkupSafe 和 SQLAlchemy 之類的 Python 包可以編譯加速。 COPY requirements.txt requirements.txt RUN pip install -r requirements.txt //復(fù)制 requirements.txt 并安裝 Python 依賴項。 COPY . . // 將 . 項目中的當(dāng)前目錄復(fù)制到 . 鏡像中的工作目錄。 CMD ["flask", "run"] //容器提供默認(rèn)的執(zhí)行命令為:flask run。鏡像下載比較慢,推薦切換國內(nèi)鏡像
3.3 創(chuàng)建 docker-compose.yml
在測試目錄中創(chuàng)建一個名為 docker-compose.yml 的文件,然后粘貼以下內(nèi)容:
# yaml 配置 version: '3' services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"該 Compose 文件定義了兩個服務(wù):web 和 redis。
在測試目錄中,執(zhí)行以下命令來啟動應(yīng)用程序:
# docker-compose up # docker-compose up -d //后臺運行小結(jié):
4 .使用 Compose 部署前后分離項目實戰(zhàn)
采用SpringBoot + Vue + mysql
4.1 打包前后端項目
4.2 編寫DockerFile
4.3 編寫docker-compose.yaml
4.4 啟動部署
五、Docker Machine
待更新
六、Docker Swarm
待更新
總結(jié)
你的無畏源于無知。 — 三體
總結(jié)
以上是生活随笔為你收集整理的Docker进阶实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频分享网站首页:主体框架完成
- 下一篇: 微型计算机三包_买卖合同与“三包”规定