ÎÒÓлú»á½¨Á¢Ò»¸öÒÔDockerΪ»ù´¡µÄ΢·þÎñ¼Ü¹¹ÔÚÎÒÏÖÔڵŤ×÷ÖУ¬ºÜ¶àÈ˶¼»á·ÖÏíËûÃÇʹÓÃDockerµÄÐĵã¬ÎÒÏëÎÒÒ²²»»áÀýÍâ¡£Òò´ËÎÒ×ܽáÁËһЩ£¬¿ÉÄÜÄã»áÔÚÈÕ³£Ê¹ÓÃDockerµÄʱºò»áÓõ½¡£
1¡¢Ò»Ì¨Ö÷»ú²¿Êð¶à¸ö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£©µÄ¹¤¾ßÀ¦°óÔÚÒ»ÆðµÄ¾µÏñÖС£ÎÒ¸öÈ˾õµÃÕâÑù»á±ÈËùÓпͻ§¶ËºÍ±¾µØ¸üиü¼òµ¥¡£
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 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 } ] |
µ±È»£¬ËüÒ²ÄܺܺõÄÍê³É²éѯÆäËûÀàÐ͵Ä(Docker-esque) APIÉú³ÉµÄJSON(e.g Marathon,
Mesos, Consul etc.)JQÌṩÁËÒ»¸ö·Ç³£¹ã·ºµÄAPI£¬ÓÃÓÚ·ÃÎʺʹ¦ÀíJSON.¸ü¶àÐÅÏ¢¿ÉÒÔÔÚÕâÀïÕÒµ½:https://stedolan.github.io/jq/
4¡¢À©Õ¹ÏÖÓÐÈÝÆ÷ºÍÔÚ±¾µØ×¢²á
ÔÚDocker hubÖÐÓдóÁ¿¿ÉÒÔʹÓõĵIJ»Í¬Ê¹Óó¡¾°µÄ¾µÏñ¡£ÎÒÃÇ×¢Òâµ½£¬ËäÈ»Óкܶà¿ÉÓõľµÏñ£¬µ«ÊǺܶàʱºòÎÒÃDz»µÃ¶ÔËûÃÇ×öһЩÐ޸ġ£
±ÈÈç¸üºÃµÄ½¡¿µ¼ì²éconsul£¬Í¨¹ýϵͳ±äÁ¿»òÃüÁîÐвÎÊýµÄÆäËûÅäÖã¬Îª¸üºÃµØÉèÖûòÔö¼ÓÎÒÃǵļ¯Èº£¬ÕâÊDz»ÈÝÒ××öµ½µÄ¡£Èç¹ûÎÒÃÇÅöµ½Õâ¸öÊǸոմ´½¨×Ô¼ºµÄDockerµÄ¾µÏñºÍ°ÑËüÍÆµ½ÎÒÃǵı¾µØ×¢²á±í¡£ÎÒÃÇͨ³£ÊÇÕâô×öµÄ¡£
±ÈÈ磬ÎÒÃÇÏ£ÍûÓÐJQ¿ÉÔÚÎÒÃǵÄconsul ¾µÏñÖÐÕâÑùÎÒÃǾͿÉÒԺܷ½±ãµÄ¼ì²éÎÒÃǵķþÎñÊÇ·ñÕý³£¡£
FROM progrium/consul USER root ADD bin/jq /bin/jq ADD scripts/health-check.sh /bin/health-check.sh |
ÎÒÃÇÓÐÁËhealth check scripts and JQÎÒÃǾͿÉÒÔ´ÓÎÒÃÇ×Ô¼ºµÄconsul image×öhealth
checkÁË¡£ÎÒÃÇÒ²ÓÐÒ»¸ö±¾µØ×¢²á±íÔËÐоµÏñÔÚ´´½¨ºó£¬ÎÒÃÇÖ»ÊDZê¼ÇÉú³ÉµÄ¾µÏñ£¬²¢½«ÆäÍÆµ½ÎÒÃǵı¾µØ×¢²á±í¡£
$ docker build . ... $ docker tag a3157e9edc18 <local-registry>/consul-local:some-tag $ docker push <local-registry>/consul-local:some-tag |
ÏÖÔÚ£¬Ëü¿ÉÒÔÌṩ¸øÎÒÃǵĿª·¢ÕßÁË¡£²¢ÇÒÒ²¿ÉÔÚÎÒÃǵIJ»Í¬µÄ²âÊÔ»·¾³ÖÐʹÓá£
5¡¢·ÃÎÊÔ¶³ÌÖ÷»úµÄDocker
DockerµÄCLIÊÇÒ»¸ö·Ç³£¿áµÄ¹¤¾ß£¬ÆäÖÐÒ»¸öºÜ´óµÄÌØµãÊÇ£¬Äã¿ÉÒÔÓÃËüÀ´ÇáËɵطÃÎʶàDockerÊØ»¤½ø³Ì£¬¼´Ê¹ËüÃÇÔÚ²»Í¬µÄÖ÷»ú¡£
ÄãÐèÒª×öµÄ¾ÍÊÇÉèÖÃDOCKER_HOST»·¾³±äÁ¿Ö¸ÏòDocker daemonµÄ¼àÌýµØÖ·¡£Èç¹û¸Ã¶Ë¿ÚÊÇ¿ÉÒԵķÃÎÊ£¬Äã¿ÉÒÔÖ±½ÓÔÚÔ¶³ÌÖ÷»úÉϵÄDocker£¬ÕâºÍÄãÔËÐÐÒ»¸öDocker
daemon £¬²¢ÉèÖÃΪͨ¹ýdocker-machine¼¸ºõÏàͬµÄÔÀí¡£
$ docker-machine env demo export 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 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 |
Äã¿ÉÒÔ¿´µ½ÎÒÃÇÖ¸¶¨µÄĿ¼°²×°ÔÚÈÝÆ÷ÄÚ£¬¶øÇÒÎÒÃǰÑËùÓеÄÎļþ¶¼ÔÚÖ÷»úÉÏ£¬²¢ÔÚÈÝÆ÷Äڿɼû¡£ÎÒÃÇÒ²¿ÉÒÔʹÓÃinspect²é¿´£¬¿´¿´ÓÐʲô°²×°ÔÚÄÄÀï¡£
$ docker inspect 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> |
ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔ½â¾öÓëConsulµÄÃû×Ö×¢²áµÄËùÓÐÈÝÆ÷µÄIPµØÖ·£¬±ÈÈçÔÚÎÒÃǵĻ·¾³ÎÒÃÇÓÐÁËÒ»¸öcassandra
¼¯Èº¡£Ã¿¸öcassandra½«×Ô¼º×¢²áÃû³ÆÎª¡°cassandra¡±ÎÒÃǵÄConsul ¼¯Èº¡£
×î¿áµÄÊÇ£¬ÎÒÃÇÏÖÔÚÖ»Êǽâ¾ö¿¨cassandraµÄµØÖ·»ùÓÚÖ÷»úÃû£¨¶ø²»±ØÊ¹ÓÃDockerÁ´½Ó£©
$ docker exec -ti 00c22e9e7c4e bash daemon@00c22e9e7c4e:/opt/docker$ ping cassandra PING cassandra.service.consul (192.168.99.100): 56 data bytes 64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.053 ms 64 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 loss round-trip min/avg/max/stddev = 0.053/0.065/0.077/0.000 ms daemon@00c22e9e7c4e:/opt/docker$ |
8¡¢Docker-UIÊÇÒ»¸öºÜ°ôÀ´²é¿´ºÍ»ñÈ¡¶´²ìÄãÈÝÆ÷µÄ·½Ê½
ʹÓÃDocker CLIÀ´²é¿´DockerÈÝÆ÷Ëù·¢ÉúµÄÒ»Çв¢²»ÄÑ¡£ºÜ¶àʱºò£¬ËäÈ»Äã²¢²»ÐèÒªµÄDocker
CLIµÄÈ«²¿¹¦ÄÜ£¬µ«Ö»ÊÇÏë¿ìËÙä¯ÀÀÆäÖеÄÈÝÆ÷ÔËÐУ¬¿´¿´·¢ÉúÁËʲô¡£
Docker UI (https://github.com/crosbymichael/dockerui)¾ÍÊÇÒ»¸öÕâÑùΰ´óµÄÏîÄ¿£¬²¢ÇÒËûÊÇ¿ªÔ´µÄ¡£

ÓÐÁËÕâ¸ö¹¤¾ß£¬Äã¿ÉÒÔ¿´µ½Ò»¸öÌØ¶¨µÄDocker deamonµÄÈÝÆ÷ºÍ¾µÏñµÄ×îÖØÒªµÄ¶«Î÷¡£
9¡¢Container ²»ÄÜÆô¶¯? Overwrite the Entry PointÄãÖ»ÐèÒª´ÓbashÆô¶¯¡£
ÓÐʱºòÒ»¸öÈÝÆ÷Ö»ÊÇûÓÐ×öÄãÏëÒªËü×öµÄÊÂÇ飬ÄãÒÑ¾ÖØÐ´´½¨ÁËDocker ¾µÏñ£¬ÄãÔÚÆô¶¯Ê±ÔËÐÐÁ˼¸´Î£¬µ«²»ÖªºÎ¹Ê£¬¸ÃÓ¦ÓóÌÐòûÓз´Ó¦£¬È»ºóÈÕÖ¾ÏÔʾҲûʲôÓÐÓõÄÐÅÏ¢¡£
×î¼òµ¥µÄµ÷ÊÔ·½·¨ÊÇoverwrite the entry point £¬¿´¿´ÔÚÈÝÆ÷ÄÚ²¿·¢ÉúµÄÒ»ÇУ¬²é¿´ÎļþȨÏÞÊÇ·ñÕýÈ·¡£¿½±´½øÈë¾µÏñµÄÎļþÊÇ·ñÕýÈ·£¬»òÕßÈÎºÎÆäËü¿ÉÄܳöÏֵĴíÎó¡£
ÐÒÔ˵ÄÊÇ£¬DockerÓÐÕâÑù×öµÄÒ»¸ö¼òµ¥µÄ½â¾ö·½°¸¡£Äã¿ÉÒÔ´ÓÒ»¸öÑ¡ÔñµÄÈë¿ÚµãÆô¶¯ÄãµÄÈÝÆ÷£º
$ docker run -ti --entrypoint=bash cassandra root@896757f0bfd4:/# ls bin dev etc lib mediaopt root sbin sys usr boot docker-entrypoint.sh home lib64 mntproc run srv tmp var root@896757f0bfd4:/# |
10¡¢¼àÌýÒ»¸öÈÝÆ÷µÄʼþ£º
µ±Äã±àд×Ô¼ºµÄ½Å±¾£¬»òÕßÖ»ÊÇÏëÁ˽ⷢÉúÁËʲô£¬Äã¿ÉÒÔDocker event commandÔËÐÐÄãµÄ¾µÏñ£¬Îª´Ë±àд½Å±¾ºÜÈÝÒס£

ÕâÊÇÎÒÃÇûÓÐʹÓÃDocker Compose ºÍSwarm yetºÍDocker 1.9ÍøÂç²ã ÌØÐÔµÄÇé¿ö£¬DockerÒ»¸öºÜ¿áµÄ¹¤¾ß£¬ÓÐÒ»Ì×ΰ´óµÄ¹¤¾ß¡£
|