10個日常Docker使用技巧
來自:謝權SELF
鏈接:https://xiequan.info/10個日常使用docker使用技巧/
原文:https://dzone.com/articles/10-practical-docker-tips-for-day-to-day-docker-usa(.尾部閱讀原文前往)
已獲轉載授權
我有機會建立一個以Docker為基礎的微服務架構在我現在的工作中,很多人都會分享他們使用Docker的心得,我想我也不會例外。因此我總結瞭一些,可能你會在日常使用Docker的時候會用到。
如果你想運行多個Docker 容器在一臺主機上,如果要設置不同的TLS設置,網絡設置,日志設置和存儲驅動程序特定的容器,這是特別有用的。
例如,我們目前正在運行一個標準設立兩個Docker守護進程。一運行consul提供DNS解析,並作為群集存儲為其他Docker 容器。
For example:
# start a docker daemon and bind to a specific port
docker 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 daemon
docker 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 STATUS
682f47f97fce cassandra Up 2 minutes
4c45aea49180 consul Up 2 minutes
$ docker exec -ti 682f47f97fce cqlsh –color
Connected 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>
或者隻是訪問nodetool或鏡像中可用的任何其他工具:
$ docker exec -ti 682f47f97fce nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
— Address Load Tokens Owns Host ID Rack
UN 192.168.99.100 443.34 KB 256 ? 8f9f4a9c-5c4d-4453-b64b-7e01676361ff rack1
Note: Non-system keyspaces don’t have the same replication settings, effective ownership information
這當然可以被應用到任何(Client)的工具捆綁在一起的鏡像中。我個人覺得這樣會比所有客戶端和本地更新更簡單。
與其說這是一個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 volumes
11:22 $ docker inspect 4c45aea49180 | jq ‘.[].Mounts’
[
{
“Name": “a8125ffdf6c4be1db4464345ba36b0417a18aaa3a025267596e292249ca4391f",
“Source": “/mnt/sda1/var/lib/docker/volumes/a8125ffdf6c4be1db4464345ba36b0417a18aaa3a025267596e292249ca4391f/_data",
“Destination": “/data",
“Driver": “local",
“Mode": “",
“RW": true
}
]