亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Docker 實用技巧總結

2024-09-01 13:48:21
字體:
來源:轉載
供稿:網友

我有機會建立一個以Docker為基礎的微服務架構在我現在的工作中,很多人都會分享他們使用Docker的心得,我想我也不會例外。因此我總結了一些,可能你會在日常使用Docker的時候會用到。

1. 一臺主機部署多個Docker實例

如果你想運行多個Docker 容器在一臺主機上,如果要設置不同的TLS設置,網絡設置,日志設置和存儲驅動程序特定的容器,這是特別有用的。例如,我們目前正在運行一個標準設立兩個Docker守護進程。一運行consul提供DNS解析,并作為群集存儲為其他Docker 容器。

For example:

# start a docker daemon and bind to a specific portdocker daemon -H tcp://$IP:5000 --storage-opt dm.fs=xfs /      -p "/var/run/docker1.pid" /      -g "/var/lib/docker1" /      --exec-root="/var/run/docker1# and start another daemondocker daemon -H tcp://$IP:5001 --storage-opt dm.fs=xfs /    -s devicemapper /    --storage-opt dm.thinpooldev=/dev/mapper/docker--vg-docker--pool /    -p "/var/run/docker2.pid" /    -g "/var/lib/docker2" --exec-root="/var/run/docker2"    --cluster-store=consul://$IP:8500 /    --cluster-advertise=$IP:2376# start a docker daemon and bind to a specific portdockerdaemon -H tcp://$IP:5000 --storage-opt dm.fs=xfs /      -p "/var/run/docker1.pid" /      -g "/var/lib/docker1" /      --exec-root="/var/run/docker1# and start another daemondocker daemon -H tcp://$IP:5001 --storage-opt dm.fs=xfs /    -s devicemapper /    --storage-opt dm.thinpooldev=/dev/mapper/docker--vg-docker--pool /    -p "/var/run/docker2.pid" /    -g "/var/lib/docker2" --exec-root="/var/run/docker2"    --cluster-store=consul://$IP:8500 /    --cluster-advertise=$IP:2376

2. Docker Exec的使用

Docker Exec是一個很重要很多人都會用到的工具,也許你使用Docker不只是為你的升級,生產和測試環境,同時也對本地機器上運行的數據庫,服務器密鑰庫等,這是能夠直接運行的容器的上下文中運行的命令,非常方便。

我們做了大量的Cassandra,并檢查表是否包含正確的數據。如果你只是想執行一個快速CQL查詢,Docker exec 就很贊:

$ docker ps --format "table {{.ID}}/t {{.Names}}/t {{.Status}}"CONTAINER ID    NAMES        STATUS682f47f97fce     cassandra      Up 2 minutes4c45aea49180     consul       Up 2 minutes$ docker exec -ti 682f47f97fce cqlsh --colorConnected to Test Cluster at 127.0.0.1:9042.[cqlsh 5.0.1 | Cassandra 2.2.3 | CQL spec 3.3.1 | Native protocol v4]Use HELP for help.cqlsh>
$ dockerps --format "table {{.ID}}/t {{.Names}}/t {{.Status}}"CONTAINERID    NAMES       STATUS682f47f97fce    cassandra     Up 2 minutes4c45aea49180    consul       Up 2 minutes$ dockerexec -ti 682f47f97fce cqlsh --colorConnectedto TestClusterat 127.0.0.1:9042.[cqlsh 5.0.1 | Cassandra 2.2.3 | CQLspec 3.3.1 | Native protocolv4]Use HELPfor help.cqlsh>

或者只是訪問nodetool或鏡像中可用的任何其他工具:

$ docker exec -ti 682f47f97fce nodetool statusDatacenter: datacenter1=======================Status=Up/Down|/ State=Normal/Leaving/Joining/Moving-- Address     Load    Tokens    Owns  Host ID                RackUN 192.168.99.100 443.34 KB 256     ?    8f9f4a9c-5c4d-4453-b64b-7e01676361ff rack1Note: Non-system keyspaces don't have the same replication settings, effective ownership information$ dockerexec -ti 682f47f97fce nodetoolstatusDatacenter: datacenter1=======================Status=Up/Down|/ State=Normal/Leaving/Joining/Moving-- Address    Load   Tokens   Owns  HostID               RackUN 192.168.99.100 443.34 KB 256     ?   8f9f4a9c-5c4d-4453-b64b-7e01676361ff rack1Note: Non-systemkeyspacesdon't havethesamereplicationsettings, effectiveownershipinformation

這當然可以被應用到任何(Client)的工具捆綁在一起的鏡像中。我個人覺得這樣會比所有客戶端和本地更新更簡單。

3. Docker 的檢查 和JQ

與其說這是一個Docker技巧,不如說是一個JQ技巧。如果你沒有聽過JQ,它是一個在命令行解析JSON的偉大工具。因為我們可以不需要使用format specifier而能夠查看容器里面發生的一切。

# Get network information:$ docker inspect 4c45aea49180 | jq '.[].NetworkSettings.Networks'{ "bridge": {  "EndpointID": "ba1b6efba16de99f260e0fa8892fd4685dbe2f79cba37ac0114195e9fad66075",  "Gateway": "172.17.0.1",  "IPAddress": "172.17.0.2",  "IPPrefixLen": 16,  "IPv6Gateway": "",  "GlobalIPv6Address": "",  "GlobalIPv6PrefixLen": 0,  "MacAddress": "02:42:ac:11:00:02" }}# Get the arguments with which the container was started$ docker inspect 4c45aea49180 | jq '.[].Args'[ "-server", "-advertise", "192.168.99.100", "-bootstrap-expect", "1"]# Get all the mounted volumes11:22 $ docker inspect 4c45aea49180 | jq '.[].Mounts'[ {  "Name": "a8125ffdf6c4be1db4464345ba36b0417a18aaa3a025267596e292249ca4391f",  "Source": "/mnt/sda1/var/lib/docker/volumes/a8125ffdf6c4be1db4464345ba36b0417a18aaa3a025267596e292249ca4391f/_data",  "Destination": "/data",  "Driver": "local",  "Mode": "",  "RW": true }]# Get network information:$ dockerinspect 4c45aea49180 | jq '.[].NetworkSettings.Networks'{ "bridge": {  "EndpointID": "ba1b6efba16de99f260e0fa8892fd4685dbe2f79cba37ac0114195e9fad66075",  "Gateway": "172.17.0.1",  "IPAddress": "172.17.0.2",  "IPPrefixLen": 16,  "IPv6Gateway": "",  "GlobalIPv6Address": "",  "GlobalIPv6PrefixLen": 0,  "MacAddress": "02:42:ac:11:00:02" }}# Get the arguments with which the container was started$ dockerinspect 4c45aea49180 | jq '.[].Args'[ "-server", "-advertise", "192.168.99.100", "-bootstrap-expect", "1"]# Get all the mounted volumes11:22 $ dockerinspect 4c45aea49180 | jq '.[].Mounts'[ {  "Name": "a8125ffdf6c4be1db4464345ba36b0417a18aaa3a025267596e292249ca4391f",  "Source": "/mnt/sda1/var/lib/docker/volumes/a8125ffdf6c4be1db4464345ba36b0417a18aaa3a025267596e292249ca4391f/_data",  "Destination": "/data",  "Driver": "local",  "Mode": "",  "RW": true }]

當然,它也能很好的完成查詢其他類型的(Docker-esque) API生成的JSON(e.g Marathon, Mesos, Consul etc.)JQ提供了一個非常廣泛的API,用于訪問和處理JSON.更多信息可以在這里找到: https://stedolan.github.io/jq/

4. 擴展現有容器和在本地注冊

在Docker hub中有大量可以使用的的不同使用場景的鏡像。我們注意到,雖然有很多可用的鏡像,但是很多時候我們不得對他們做一些修改。比如更好的健康檢查consul,通過系統變量或命令行參數的其他配置,為更好地設置或增加我們的集群,這是不容易做到的。如果我們碰到這個是剛剛創建自己的Docker的鏡像和把它推到我們的本地注冊表。我們通常是這么做的。

比如,我們希望有JQ可在我們的consul 鏡像中這樣我們就可以很方便的檢查我們的服務是否正常。

FROM progrium/consulUSER rootADD bin/jq /bin/jqADD scripts/health-check.sh /bin/health-check.sh
FROMprogrium/consulUSERrootADDbin/jq /bin/jqADDscripts/health-check.sh /bin/health-check.sh

我們有了health check scripts and JQ我們就可以從我們自己的consul image做health check了。我們也有一個本地注冊表運行鏡像在創建后,我們只是標記生成的鏡像,并將其推到我們的本地注冊表

$ docker build ....$ docker tag a3157e9edc18 <local-registry>/consul-local:some-tag$ docker push <local-registry>/consul-local:some-tag
$ dockerbuild ....$ dockertaga3157e9edc18 <local-registry>/consul-local:some-tag$ dockerpush <local-registry>/consul-local:some-tag

現在,它可以提供給我們的開發者了。并且也可在我們的不同的測試環境中使用。

5. 訪問遠程主機的Docker

Docker的CLI是一個非??岬墓ぞ?,其中一個很大的特點是,你可以用它來輕松地訪問多Docker守護進程,即使它們在不同的主機。你需要做的就是設置DOCKER_HOST環境變量指向Docker daemon的監聽地址。如果該端口是可以的訪問,你可以直接在遠程主機上的Docker,這和你運行一個Docker daemon ,并設置為通過docker-machine幾乎相同的原理。

$ docker-machine env demoexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/Users/jos/.docker/machine/machines/demo"export DOCKER_MACHINE_NAME="demo"
 $ docker-machineenvdemoexportDOCKER_TLS_VERIFY="1"exportDOCKER_HOST="tcp://192.168.99.100:2376"exportDOCKER_CERT_PATH="/Users/jos/.docker/machine/machines/demo"exportDOCKER_MACHINE_NAME="demo"

但你不必限制自己Docker daemons 程通過docker-machine啟動。如果你有你的后臺程序運行的控制,以及安全的網絡,你可以很容易地從一臺機器控制所有的。

6. 簡單的主機目錄掛載

當你正在使用你的容器,你有時需要得到容器里面的一些數據。您可以復制它,或者通過使用ssh命令。但多數情況下是最容易的是將一個主機目錄添加容器中??梢院苋菀椎赝ㄟ^執行下面的命令完成操作:

$ mkdir /Users/jos/temp/samplevolume/$ ls /Users/jos/temp/samplevolume/$ docker run -v /Users/jos/temp/samplevolume/:/samplevolume -it --rm busybox$ docker run -v /Users/jos/temp/samplevolume/:/samplevolume -it --rm busybox/ # ls samplevolume// # touch samplevolume/hello/ # ls samplevolume/hello/ # exit$ ls /Users/jos/temp/samplevolume/hello
$ mkdir /Users/jos/temp/samplevolume/$ ls /Users/jos/temp/samplevolume/$ dockerrun -v /Users/jos/temp/samplevolume/:/samplevolume -it --rmbusybox$ dockerrun -v /Users/jos/temp/samplevolume/:/samplevolume -it --rmbusybox/ # ls samplevolume// # touch samplevolume/hello/ # ls samplevolume/hello/ # exit$ ls /Users/jos/temp/samplevolume/hello

你可以看到我們指定的目錄安裝在容器內,而且我們把所有的文件都在主機上,并在容器內可見。我們也可以使用inspect查看,看看有什么安裝在哪里。

$ docker inspect 76465cee5d49 | jq '.[].Mounts'[ {  "Source": "/Users/jos/temp/samplevolume",  "Destination": "/samplevolume",  "Mode": "",  "RW": true }]
$ dockerinspect 76465cee5d49 | jq '.[].Mounts'[ {  "Source": "/Users/jos/temp/samplevolume",  "Destination": "/samplevolume",  "Mode": "",  "RW": true }]

我們可以在Docker官網看到更多的特性和使用方 法: https://docs.docker.com/engine/userguide/dockervolumes/

7.添加DNS解析到你的容器

我之前提到過,我們可以通過consul來管理容器。Consul是一個支持多數據中心分布式高可用的服務發現和配置共享的服務軟件,可以為容器提供服務發現和健康檢查。對于服務發現Consul提供無論是REST API或傳統DNS,他的偉大的之處是,當你運行一個具體的鏡像,你可以指定你的容器DNS服務器。
當你有Consul運行(或者其它 DNS server)你可以把它添加到您的Docker daemon就像這樣:

docker run -d --dns $IP_CONSUL --dns-search service.consul <rest of confguration>

dockerrun -d --dns $IP_CONSUL --dns-searchservice.consul <restofconfguration>

現在,我們可以解決與Consul的名字注冊的所有容器的IP地址,比如在我們的環境我們有了一個cassandra 集群。每個cassandra將自己注冊名稱為“cassandra”我們的Consul 集群。最酷的是,我們現在只是解決卡cassandra的地址基于主機名(而不必使用Docker鏈接)

$ docker exec -ti 00c22e9e7c4e bashdaemon@00c22e9e7c4e:/opt/docker$ ping cassandraPING cassandra.service.consul (192.168.99.100): 56 data bytes64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.053 ms64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.077 ms^C--- cassandra.service.consul ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max/stddev = 0.053/0.065/0.077/0.000 msdaemon@00c22e9e7c4e:/opt/docker$
$ dockerexec -ti 00c22e9e7c4e bashdaemon@00c22e9e7c4e:/opt/docker$ pingcassandraPINGcassandra.service.consul (192.168.99.100): 56 databytes64 bytesfrom 192.168.99.100: icmp_seq=0 ttl=64 time=0.053 ms64 bytesfrom 192.168.99.100: icmp_seq=1 ttl=64 time=0.077 ms^C--- cassandra.service.consulpingstatistics ---2 packetstransmitted, 2 packetsreceived, 0% packetlossround-tripmin/avg/max/stddev = 0.053/0.065/0.077/0.000 msdaemon@00c22e9e7c4e:/opt/docker$

8. Docker-UI是一個很棒來查看和獲取洞察你容器的方式

使用Docker CLI來查看Docker容器所發生的一切并不難。很多時候,雖然你并不需要的Docker CLI的全部功能,但只是想快速瀏覽其中的容器運行,看看發生了什么。Docker UI ( https://github.com/crosbymichael/dockerui )就是一個這樣偉大的項目,并且他是開源的。

Docker,實用技巧,實用技巧整理,技巧

有了這個工具,你可以看到一個特定的Docker deamon的容器和鏡像的最重要的東西。

9. Container 不能啟動? Overwrite the Entry Point你只需要從bash啟動。

有時候一個容器只是沒有做你想要它做的事情,你已經重新創建了Docker 鏡像,你在啟動時運行了幾次,但不知何故,該應用程序沒有反應,然后日志顯示也沒什么有用的信息。最簡單的調試方法是overwrite the entry point ,看看在容器內部發生的一切,查看文件權限是否正確??截愡M入鏡像的文件是否正確,或者任何其它可能出現的錯誤。幸運的是,Docker有這樣做的一個簡單的解決方案。你可以從一個選擇的入口點啟動你的容器:

$ docker run -ti --entrypoint=bash cassandraroot@896757f0bfd4:/# lsbin  dev  etc  lib mediaopt  root sbin sys usrboot docker-entrypoint.sh home lib64 mntproc run  srv  tmp varroot@896757f0bfd4:/#
$ dockerrun -ti --entrypoint=bashcassandraroot@896757f0bfd4:/# lsbin dev  etc libmediaopt root sbin sys usrboot docker-entrypoint.sh home lib64 mntproc run srv tmp varroot@896757f0bfd4:/#

10. 監聽一個容器的事件:

當你編寫自己的腳本,或者只是想了解發生了什么,你可以Docker event command運行你的鏡像,為此編寫腳本很容易。

Docker,實用技巧,實用技巧整理,技巧

這是我們沒有使用Docker Compose 和Swarm yet和Docker 1.9網絡層 特性的情況,Docker一個很酷的工具,有一套偉大的工具。在未來希望Docker越來越好,我也會給大家展示一些Docker更酷的東西。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区亚洲欧洲国产日韩| 亚洲剧情一区二区| 亚洲人成在线免费观看| 日韩av网址在线| 国产经典一区二区| 中文字幕日韩综合av| 国产视频丨精品|在线观看| 亚洲最新av网址| 亚洲网址你懂得| 精品国产网站地址| 91超碰caoporn97人人| 国产精品一久久香蕉国产线看观看| 狠狠操狠狠色综合网| 国产精品a久久久久久| 日韩美女av在线| 亚洲人成自拍网站| 亚洲视频视频在线| 国产国语videosex另类| 国产精品欧美在线| 91情侣偷在线精品国产| 久久人人爽人人爽人人片av高清| 久久精品99国产精品酒店日本| 亚洲国产成人久久| 动漫精品一区二区| 在线成人激情黄色| 久久精彩免费视频| 亚洲欧美日韩视频一区| 亚洲第一黄色网| 欧美亚洲午夜视频在线观看| 国产精品尤物福利片在线观看| 亚洲国产精品免费| 国产欧美日韩最新| 亚洲欧洲成视频免费观看| 中文字幕视频一区二区在线有码| 亚洲韩国日本中文字幕| 亚洲国产小视频在线观看| 日韩黄色高清视频| 亚洲综合精品一区二区| 中文字幕日韩有码| 欧美国产高跟鞋裸体秀xxxhd| 久久成人国产精品| 亚洲a∨日韩av高清在线观看| 亚洲视频在线观看免费| 中文字幕日韩av电影| 国产婷婷色综合av蜜臀av| 亚洲国产成人精品电影| 97国产在线观看| 91精品国产91久久久久久久久| 日韩在线观看免费高清| xxxxx成人.com| 成人午夜两性视频| 久久久av网站| 日韩成人高清在线| 国产精品成人久久久久| 国产精品久久久久77777| 在线观看国产欧美| 911国产网站尤物在线观看| 91国内免费在线视频| 97国产在线视频| 精品久久久精品| 九九视频这里只有精品| 国产亚洲欧洲在线| 久久激情视频免费观看| 欧美激情免费视频| 成人av资源在线播放| 精品视频久久久久久久| 国产精品电影一区| 亚洲欧美在线一区二区| 影音先锋欧美精品| 日韩精品在线播放| 久久国产精品99国产精| 精品福利在线看| 精品久久久在线观看| 国产精品99久久久久久久久| 一二美女精品欧洲| 国产精品h片在线播放| 日韩电影在线观看中文字幕| 亚洲色图校园春色| 成人性教育视频在线观看| 国产精品自产拍在线观看中文| 欧美国产日韩视频| 中文字幕亚洲一区| 97久久国产精品| 亚洲第一二三四五区| 国产aⅴ夜夜欢一区二区三区| 精品亚洲一区二区三区| 成人黄色免费网站在线观看| 国产91精品高潮白浆喷水| 97国产在线观看| 91精品视频在线免费观看| 2019中文字幕在线观看| 亚洲免费福利视频| 亚洲欧美制服中文字幕| 91精品国产一区| 97在线视频免费| 久久91亚洲人成电影网站| 国产精品99久久久久久人| 国产精品国产亚洲伊人久久| 欧美国产日韩一区| 国产精品流白浆视频| 精品成人乱色一区二区| 国产成人精品在线播放| 正在播放国产一区| 欧美午夜激情在线| 国产一区欧美二区三区| 国产在线精品播放| 国产欧美日韩专区发布| 亚洲精品ady| 亚洲精选一区二区| 久久久国产精品亚洲一区| 欧美在线视频网站| 日韩在线中文字幕| 国语自产精品视频在线看抢先版图片| 国产精品久久av| 91精品视频免费看| 九九久久久久久久久激情| 一区二区三区高清国产| 亚洲精品成人久久电影| 欧美黄色片免费观看| 国产欧美亚洲视频| 91影视免费在线观看| 中文字幕久精品免费视频| 麻豆一区二区在线观看| 久久精品欧美视频| 美女国内精品自产拍在线播放| 久久久久免费视频| 成人做爰www免费看视频网站| 国产99久久精品一区二区 夜夜躁日日躁| 欧美激情视频网址| 97精品国产97久久久久久春色| 国产91色在线|免| 免费成人高清视频| 国产精品久久久久av免费| 欧美性受xxxx白人性爽| 亚洲精品日韩久久久| 国产精品爽爽爽爽爽爽在线观看| 中文字幕日本精品| 成人啪啪免费看| 日本精品免费观看| 日韩中文字幕网| 国产精品第3页| 蜜月aⅴ免费一区二区三区| 国产aaa精品| 久色乳综合思思在线视频| 日韩成人黄色av| 亚洲一级一级97网| 亚洲男人天堂网| 久久久噜噜噜久久中文字免| 国产一区二区日韩| 欧美在线视频免费播放| 欧美色视频日本版| 91在线高清免费观看| 精品女同一区二区三区在线播放| 欧美成人免费网| 国产精品永久免费| 欧美日韩国产中文精品字幕自在自线| 性欧美亚洲xxxx乳在线观看| 亚洲人成网在线播放| 久久99精品国产99久久6尤物| 国产成人拍精品视频午夜网站| 国精产品一区一区三区有限在线| 免费91在线视频| 欧美激情女人20p| 国产精品91久久久久久|