cAdvisor 서비스 생성하기 :: 행복한 프로그래머

posted by 쁘로그램어 2018. 5. 16. 19:09

Container Image는 google/cadvisor:v0.24.1를 사용하였다.

Image의 BaseOS는 alpine을 사용하고 있다.


dockerhub: https://hub.docker.com/r/google/cadvisor/

github: https://github.com/google/cadvisor

Dockerfile: https://github.com/google/cadvisor/blob/master/deploy/Dockerfile



# DC/OS에서 cAdvisor 서비스를 생성시

* Container Image: google/cadvisor:v0.24.1

* Container Runtime: DOCKER ENGINE 선택

* Networing-Service Endpoints - CONTAINER PORT를 8080으로 선택


# cAdvisor container에 접속하기

$ docker exec -it <container> sh


# cAdvisor 서비스 JSON 파일

{

  "id": "/prometheus/cadvisor",

  "acceptedResourceRoles": [

    "*",

    "slave_public"

  ],

  "backoffFactor": 1.15,

  "backoffSeconds": 1,

  "constraints": [

    [

      "hostname",

      "UNIQUE"

    ]

  ],

  "container": {

    "portMappings": [

      {

        "containerPort": 8080,

        "hostPort": 0,

        "protocol": "tcp",

        "servicePort": 10109,

        "name": "cadvisor"

      }

    ],

    "type": "DOCKER",

    "volumes": [

      {

        "containerPath": "/rootfs",

        "hostPath": "/",

        "mode": "RO"

      },

      {

        "containerPath": "/var/run",

        "hostPath": "/var/run",

        "mode": "RW"

      },

      {

        "containerPath": "/sys",

        "hostPath": "/sys",

        "mode": "RO"

      },

      {

        "containerPath": "/var/lib/docker",

        "hostPath": "/var/lib/docker",

        "mode": "RO"

      }

    ],

    "docker": {

      "image": "google/cadvisor:v0.24.1",

      "forcePullImage": false,

      "privileged": false,

      "parameters": []

    }

  },

  "cpus": 1,

  "disk": 0,

  "healthChecks": [

    {

      "gracePeriodSeconds": 300,

      "ignoreHttp1xx": false,

      "intervalSeconds": 60,

      "maxConsecutiveFailures": 3,

      "portIndex": 0,

      "timeoutSeconds": 20,

      "delaySeconds": 15,

      "protocol": "HTTP",

      "path": "/"

    }

  ],

  "instances": 1,

  "labels": {

    "DCOS_PACKAGE_OPTIONS": "e30=",

    "DCOS_PACKAGE_SOURCE": "https://universe.mesosphere.com/repo",

    "DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMy4wIiwibmFtZSI6ImNhZHZpc29yIiwidmVyc2lvbiI6IjAuMjQuMS0wLjEiLCJtYWludGFpbmVyIjoiaHR0cHM6Ly9kY29zLmlvL2NvbW11bml0eSIsImRlc2NyaXB0aW9uIjoiY0Fkdmlzb3IgKENvbnRhaW5lciBBZHZpc29yKSBwcm92aWRlcyBjb250YWluZXIgdXNlcnMgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzb3VyY2UgdXNhZ2UgYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGVpciBydW5uaW5nIGNvbnRhaW5lcnMuIEl0IGlzIGEgcnVubmluZyBkYWVtb24gdGhhdCBjb2xsZWN0cywgYWdncmVnYXRlcywgcHJvY2Vzc2VzLCBhbmQgZXhwb3J0cyBpbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIGNvbnRhaW5lcnMuIFNwZWNpZmljYWxseSwgZm9yIGVhY2ggY29udGFpbmVyIGl0IGtlZXBzIHJlc291cmNlIGlzb2xhdGlvbiBwYXJhbWV0ZXJzLCBoaXN0b3JpY2FsIHJlc291cmNlIHVzYWdlLCBoaXN0b2dyYW1zIG9mIGNvbXBsZXRlIGhpc3RvcmljYWwgcmVzb3VyY2UgdXNhZ2UgYW5kIG5ldHdvcmsgc3RhdGlzdGljcy4gVGhpcyBkYXRhIGlzIGV4cG9ydGVkIGJ5IGNvbnRhaW5lciBhbmQgbWFjaGluZS13aWRlLlxuXG5OT1RFOiBUaGlzIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIGJ5IGRlZmF1bHQgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgY0Fkdmlzb3IgaW4gZWFjaCBob3N0IG9mIHlvdXIgY2x1c3Rlci5cblxuVGhpcyBwYWNrYWdlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYWxvbmdzaWRlIHRoZSBEQy9PUyAnaW5mbHV4ZGInIGFuZCAnZ3JhZmFuYScgcGFja2FnZXMgZm9yIGEgY2x1c3Rlci13aWRlIG1vbml0b3Jpbmcgc29sdXRpb24uXG5cbkluc3RhbGxhdGlvbiBEb2N1bWVudGF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vZGNvcy9leGFtcGxlcy90cmVlL21hc3Rlci9jYWR2aXNvci1pbmZsdXhkYi1ncmFmYW5hXG5cbiIsInRhZ3MiOlsiZG9ja2VyIiwiY2Fkdmlzb3IiLCJtb25pdG9yaW5nIiwibWV0cmljcyJdLCJzZWxlY3RlZCI6ZmFsc2UsInNjbSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2Fkdmlzb3IiLCJ3ZWJzaXRlIjoiaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jYWR2aXNvciIsImZyYW1ld29yayI6ZmFsc2UsInByZUluc3RhbGxOb3RlcyI6IlRoaXMgREMvT1MgU2VydmljZSBpcyBjdXJyZW50bHkgaW4gcHJldmlldy4gVGhlcmUgbWF5IGJlIGJ1Z3MsIGluY29tcGxldGUgZmVhdHVyZXMsIGluY29ycmVjdCBkb2N1bWVudGF0aW9uLCBvciBvdGhlciBkaXNjcmVwYW5jaWVzLlxuXG5BZHZhbmNlZCBJbnN0YWxsYXRpb24gb3B0aW9ucyBub3Rlc1xuXG5uZXR3b3JraW5nIC8gZXh0ZXJuYWxfYWNjZXNzOiBjcmVhdGUgYW4gZW50cnkgaW4gTWFyYXRob24tTEIgZm9yIGFjY2Vzc2luZyB0aGUgc2VydmljZSBmcm9tIG91dHNpZGUgb2YgdGhlIGNsdXN0ZXIuIFBsZWFzZSBub3RlIHRoYXQgZWFjaCBhY2Nlc3MgdG8gdGhpcyBlbmRwb2ludCB3aWxsIGNvbm5lY3QgeW91IHRvIGEgU0lOR0xFIGluc3RhbmNlIG9mIGNBZHZpc29yIHJ1bm5pbmcgaW4gb25lIG9mIHRoZSBub2RlcyBvZiB5b3VyIGNsdXN0ZXIuXG5cbm5ldHdvcmtpbmcgLyBleHRlcm5hbF9hY2Nlc3NfcG9ydDogcG9ydCB0byBiZSB1c2VkIGluIE1hcmF0aG9uLUxCIGZvciBhY2Nlc3NpbmcgdGhlIHNlcnZpY2UuIiwicG9zdEluc3RhbGxOb3RlcyI6IlNlcnZpY2UgaW5zdGFsbGVkLiIsInBvc3RVbmluc3RhbGxOb3RlcyI6IlNlcnZpY2UgdW5pbnN0YWxsZWQuIiwibGljZW5zZXMiOlt7Im5hbWUiOiJBcGFjaGUgTGljZW5zZSIsInVybCI6Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9nb29nbGUvY2Fkdmlzb3IvbWFzdGVyL0xJQ0VOU0UifV0sImltYWdlcyI6eyJpY29uLXNtYWxsIjoiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rvd25sb2Fkcy5tZXNvc3BoZXJlLmlvL3VuaXZlcnNlL2Fzc2V0cy9pY29uLXNlcnZpY2UtY2Fkdmlzb3Itc21hbGwucG5nIiwiaWNvbi1tZWRpdW0iOiJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZG93bmxvYWRzLm1lc29zcGhlcmUuaW8vdW5pdmVyc2UvYXNzZXRzL2ljb24tc2VydmljZS1jYWR2aXNvci1tZWRpdW0ucG5nIiwiaWNvbi1sYXJnZSI6Imh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kb3dubG9hZHMubWVzb3NwaGVyZS5pby91bml2ZXJzZS9hc3NldHMvaWNvbi1zZXJ2aWNlLWNhZHZpc29yLWxhcmdlLnBuZyIsInNjcmVlbnNob3RzIjpbImh0dHBzOi8vMy5icC5ibG9nc3BvdC5jb20vLW85RHF5Ui1FZWdZL1ZNYm5PQUpjRVRJL0FBQUFBQUFBQXkwL1d4ZklNeHhyeGswL3MxNjAwL2NBZHZpc29yU2NyZWVuc2hvdC5wbmciXX19",

    "DCOS_SERVICE_NAME": "cadvisor",

    "DCOS_PACKAGE_DEFINITION": "eyJtZXRhZGF0YSI6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi92bmQuZGNvcy51bml2ZXJzZS5wYWNrYWdlK2pzb247Y2hhcnNldD11dGYtODt2ZXJzaW9uPXYzIiwiQ29udGVudC1FbmNvZGluZyI6Imd6aXAifSwiZGF0YSI6Ikg0c0lBQUFBQUFBQUFMVlorNC9pUmhMK1Z5d3UwdDVKTTJDYm5kMWxwUHNCWm9hSEErd09EMk9jUkZIYmJxQ2gzWGJjTnEvVi9POVgzVzJEWVdZM2U0a1NhWUlmWFZWZlZYMVY3YTc5V29tUnYwRkx3cFkyVGppSldPVytVcS9xbFpzS1F5R0dHeDhGVzhLakJKNXNUeXYwcXZtK2F0enFWUU1lSjVoaXhQRkpYcitwaElpd0ZQNXdBb3RYYVJyeisxb3Q4Q05lSlZITmo4SXdZeVE5Z0d5QXVaK1FPRlZxL2FheXBmMzdJY3JsdGZ6UmY3UTRpYllFMW12KzZWM0d3YWFHbUpheEFLNVN4QUp3UklzV1dyckNXb0o1bENVK2htVm9pV0Zab01VNFdVUkppQmc4OVZjb1FYNktFOEpUNHZOY2lpUmFrakVtMUp6czhLcldTelVDbGs3dkFvVERpSUVBU21FZHBkaFArWTJHbHNzRUwxR0s0UnJnK3BoemNTa3M0MzBjSlNuWENKTUFoTU1hOHFJc2ZkUGNPTVkrV1JBZlVYcTQwVUJDdzhoZmxUd25xYmJCT09abkp5RklWS21Od2E4UWcyTmdlZ1hPUllsUWRCV08vTlVTbGtyWElTa3hCYUZ2UzBnM0dFNTNVYkxSSU5hcGlsdFZtNEFJQkNSRklrVEtUeHhvM3FFRVY0aUc0QUhjM080Z2lkVmYyYTlzK0hueWRLK2tGUW14dGlPVVFvaEFPL3lDaGdBdlVFWlRDRHlIRUZHczNvbnNDY2dGV3doVDRWbEZQQlV2RG9CYTgybkdJUWJTMG9VTklwS1FZbUJNb0tXUjVnbjM0QkxSaUMwNVlKUGNlWHlvZlI1cjd5QmJOTnNIM2p2cHdUdUkxZ0l4OUs3UXhXVnFVR0ZMdXFZQkw0aUlJS1FVVXBLSmxFZ1FQZVdXeXRGajVHY2hacW04dTllS0VsbVNkSlY1VlVpR3JKWWEzaU9SRmw1TEU0eHJJUkpXYWtWRjNoYm9ibk5jd2dyVVZJcVd2SEwvU3lXSS9BMFdkVnNxNFRNNGNZTlRTRFN2L0haVDRWaFFHQWVWZTVaUkN2ZCtXS3JjRXF4bEZFRWVhaVdWTyt4eGt1SWZYYjRRNUJRY0trekZDYzVETTR5Z2NrQ1BUSmZLd0Jnbld5TFpyZmxaa2tERTZFSGtHNFMyQk84RStYQUNNVWNIa1Vndld3TG5DVHVSZVlGUm1pVTRmd2p5ZnFvRjVkRGZhSkRBQ0RLZWFBR0JWb1JqWUJmQlhHWU0rQ1c0Rm1nWHFZdGt0K0lhRTJqRnNyd21STUpyd0g5SUVVUDBkK1NMOHIvWFFDYzBCTkdrd0dZaXdRK2dRTk5WeEc3N0xVVWd1VlRJQytyeDNPVkZFb1VhTkFqSnlieWxGYVRXdnNpV0t6R29KaVFMUUNrU3JFNUZDSUhqY1FSY1YyVUYxY2lFLzFBZFlnWFN4cjFocC8vMGRra1ZUUW5RUnV4a25rV2kvNzVWWWQrTHdlK2lJOXhyNHYvbGd2dlJRRlNCTkRGVTloVkpUc3hRajNGUXJKc3k4dmJLakYyc3BmQ01jYkhpbDYvRlp0ZUV3Z2JMZmZVS0ZtVUpMUkU3UWJ1cUlyZlllVVI3ZzV5K3hmT2lWUHU5aDZmaCtLbnlBaVVXRXZZSU5UMjYyaTByUnZXanFNVThGSlg3cjVXdDJZempBUVJYZ0psZzRES1M5UVZscyt3OVdMSDcwUHNBdng5eGZVaDk1c1p6YzVwNVlUdDFIYVBSSTd1ZmV3OU5NamVOVFc4TjYwbkQ4T3U5N1R5a1dkOGNydHl1Ry90bTQ5QjdNSTVCcDNHWXp3THFtS01EY2x6cXI0M1lDMTBlT0t2Tm5EUlR2ejdhK21HYnVYWmo0NGZVZEIxcjRYWjZqYm5aM2dRaFBYcjEzckx2REhXdmJxMWMwMTY0WFNzT1F2dmdtS3V0WDM5dTRIcWF1YzZvRHU4VE5MdGpmY0RnaG5zRGQwWkVyUmsxRnBQNEl6YnZhTkFOd0ZZSzl2ME0xb1plMTM3dmRxeUZEeGlEYnNrdngyTCtBZnp2M0JsZVo4Y2ZTSFBaWS9iUmRYcmtNMmxsd1d6UCswMFpKK3F4K2ZXenRkKzFqeUl1Z0Exa0xCUE5oclFmRG5lQk0yd3N4c3FHTjdQVDEyc002a0Y4Y3oyeHg0YjZmSGEzZHAyQnNIR1JDOEFQc1cxbmM5TStMaHhkWVF5SFd5RUQ4UVRaa2NRd2svbHNubjZGYmRScGdPemR5cHROaWJLbG50dlRPMnRxMiszZVVqMXpudUczWGRZOVdvRmQ2aE9JVFpmL3JPUXNIVHN0S25td0dYMTUxdFAybFBTVURPaDBPNDAxTXUyRDlMV01ZV1pBUHFmZ1Y1TkFEQTZ1TTl3R2pyVjJ4M2NySC93TXVnUHdyWkdCajVBdis5QVBSOXU1bVlMdHUvVjhOaklSclBlSnNmSE1ZUUx4ZzdpZWJBcE1JZkJoN2RvdHlOL2U4bWJBcjdISXA3dnl1aERua3MrKzVCUGxMbkJVY3I1WTg1RHJLcThWUEhreVZuNjNCWmlDaS9qS3YxTk1UampXbm5rSE9RUk9PdFl6WU5LRnpPZkg1dnZCdys1NmJUYWZHU3FPWWFtR3lOVzZidnF4ZDhWbDExbnBvQi9rOTR2NWJBaDhHUjc3b1EzM0ZwZjFXcFp2bHZDS1AxWnd5ajdoZTExVDl2dWdZeCtnL3JsanR0ZUNjLzdoanVMdWlQb2g4S2pkV00xTjBGTWZubXFwZjJVSDEva1c4cWdINEJNeUlSNXZ5Zzh5ZDNhM21vZDdDcHkranMvT0R4czY1SHZycWQ2a3ordE5jczU1YzdsNExteTJnbktPVDNZUFV1NWh1cUZQSTMyYXk3Yk9XSm03aFo2UTV2WG1uWFJmNXBXVWVUbnR0SFVrOGZRZ0g0MXQwSEdQVnpsVDlkWnVyWUxPVXZLOWZ5aHpWZFNXc1hVN3FoYW1tMDlubjdvNi8zOHhCR0g3MEs5YmhrZXViY2hlK0R4M1JsSGVzODI1QTVpWm5WM2o5V2FOamF5WEIyc01sWHQ2bC9jdWxjOHk3Njk0WHJKeHhCRExTeTVZa1ZjZjZoZHhxOU5YTVN0am1QdzlETkpQcjBOSjN5eDZ5SS9GNXZzeTM4eVp3dGNXdndXM3JKMm9yVkhIRHFHZTRxQkRvWmVXT2RiNldPcGR1NklPQjVQbERucEZ1YSs5V1FNWFhPKzBpVHZiNS90UGprVmlLbXJDZ2w3Yk5wQmowYW1zVllramhONXhkTWU3dkQ5WWtUdHI4NkN6ZWtRZGU0M3EzOFo2aGFkbnQwZlBGN2xrMytJOTdMRmhXL1JvNkFGMDY3YUhWSERhbFhpYXg4R2wzMkkvRTMwS2VzWEZPdk9pajdKUkRQc3E3Q09qaVRzRFRLSGFBd2ZyQzEzcDNGazlBbGVPc01hQVhKanUxSVY5YlcvNG9kcTNCNGVTenBBeUwyd2MzT2xLRDdyTlBlNHV6L0hLKzgzaVlwK1UvWEVIL1hJekJYMWUzVDdBL2RnejkxUitVN1NMT3U3OWNZNlRkWVM4bWZBTnRBdWdaNlBaUVBMSktiNFZ5amt0T0w4WlBVNk00V0w2MUg0YzYrM3V5RzdNUnJZMUdVOGJueVdIMTgxc3NIN09CbU45MTE4L25UbFN5T24yMk43UVI1RDcvRHcxMmxLR3BSOTkyS3RoUHhUN3NOeVBvQStmWktHSHIvOWFEN2Q2ejNaclBJRXQzOUVEK0xXZjFUNTMzbGRLc1RpdlBiWVdVMk5rd1RlRnEvQ05Ea0hwbStXdjd5blcwN1BlbURoR3F3VzZXeVBkWG96dDRXSkVyZFprYWpzVHcrb3JmT3BiUUg0UFFRMUJudjliZVJIREtEV3pFTi9SaUhPY2NuR1ZKWVFYNTgzVFZFSzh5TS9JY0hVNlZSZVBLbGZmOVBkYk5mV3F2THlBSFJLSzg3OFFKS0R3bG9kd3JpaWRGSGk5aWtKMGpCamFjWFdjajNhTVJpamcxUkFROGxnY1c4VXdEQTRsWXF5R2F3cHNUV2xUSjViYkV5YXB2aHJMVTd0Y0VlS0FaT0UvWjFEcEwxdWtLRm5pZjg2Z1ZKL2JFK2R3T0grdG9sVE9NUXFMOWFvWFZ6MGFMWGtjcVZQWGJkUjQvT013dW4zQ3kzbk5IbmpzYzlQeW55YTlXclA0NzZEWDRNT3JOOWp2ay8xR3IzSGpnNjdYaWxQdStHUkhHdjROMHVwVG9uanlJb215SUV1UjRwODRITVJDbEhzUFVOWmMrQ0FmVnFOa1dWT1gveEluMENTS2NaSVN4WTNjVFhHWkhtSVJ2c2hid3lIODFlUlRUVHVLbzcreW5DWDVQTytzOGxxL09yWit2VkkyaEtmcXlFNzRTV2R4ekJjRElnV0ZwL2tjS0oreWxZZTlndUc1QUgvRFFCWjZPQkVtcnJYTDRVT1NNWEc2dnhoWU5GOU44T1JRd3NOeU5iZ2tod3V2eElaaVdDcUhvTklacGd4RHlqSWFDR0g4UjRhb21PR3N5RklNY2RJVlVocllDYUlhV2x3cFBrZEJMU3hId2J6N0lFL3JKQlFWWmdnbXhOa2JVWGo0TWdVa0tGRk9BOHJJRjVNZXVKYkRtT3ZRZk5lbVhqVktOdUh1Ull6bnd0ZEdCemlNa3NQZk4yaVluNnA2MlUxeEx6dmJlWlR6NTdRdCtLS1Y1ajgvVE41aWZQbTdtTnUrOXJRTFQ1bGtjcUwxdm1nb0NCSXgzTXBIVVhMV1cweXBlbExUb3hvaTVWTk5UWXl4b1VkWHYwdjRBa08xbUw5VTZYdnFWUVhaNUQ5WEJFVE1EQ0hpcWlKeXdHS1U5UnJ3NU9HTEduTHQ1RXhTb0x4d1VRd3hLUUg2Q2N6ZlRjNG4vZE1Ic0hjMVIvdnpkRHd4NUVHSjVXUEFpd0ZpaWZ4d25VVFpjbFVldjFXTGNid3NzM3hVS1BJSGR4bkR6RThPY1pyUDJDNlNpS1hKMThISW9VUnlyaW92NVNCVVpBdHBOdVJUL3FORzd1QnBjSmtEUTFxY2VaVDRxaWNVV1M3RFBVZlBpeUtLRVN1SGI0RW94Ni9qOTQyMHRWOER1VkY1ekh0SWFXWXBRUHRnTHRIeWY4VHlGY3Z6N25KU1V4NXNpajFSOHhBVkpabDh0eVFoN2FJRVgyUVpDZ09JNVFQNWwvOEI5RUVRMUtnYkFBQT0ifQ==",

    "DCOS_PACKAGE_VERSION": "0.24.1-0.1",

    "DCOS_PACKAGE_NAME": "cadvisor",

    "DCOS_PACKAGE_IS_FRAMEWORK": "false"

  },

  "maxLaunchDelaySeconds": 3600,

  "mem": 128,

  "gpus": 0,

  "networks": [

    {

      "mode": "container/bridge"

    }

  ],

  "requirePorts": false,

  "upgradeStrategy": {

    "maximumOverCapacity": 1,

    "minimumHealthCapacity": 1

  },

  "killSelection": "YOUNGEST_FIRST",

  "unreachableStrategy": {

    "inactiveAfterSeconds": 300,

    "expungeAfterSeconds": 600

  },

  "fetch": []

}


# Container Configuration

{

    "type": "DOCKER",

    "volumes": [

        {

            "mode": "RO",

            "container_path": "/rootfs",

            "host_path": "/"

        },

        {

            "mode": "RW",

            "container_path": "/var/run",

            "host_path": "/var/run"

        },

        {

            "mode": "RO",

            "container_path": "/sys",

            "host_path": "/sys"

        },

        {

            "mode": "RO",

            "container_path": "/var/lib/docker",

            "host_path": "/var/lib/docker"

        }

    ],

    "docker": {

        "image": "google/cadvisor:v0.24.1",

        "network": "BRIDGE",

        "port_mappings": [

            {

                "host_port": 11608,

                "container_port": 8080,

                "protocol": "tcp"

            }

        ],

        "privileged": false,

        "parameters": [

            {

                "key": "label",

                "value": "MESOS_TASK_ID=prometheus_cadvisor.76f0df23-58a7-11e8-92fc-c60fab65259f"

            }

        ],

        "force_pull_image": false

    }

}


※ 참고 사이트 ※

https://hub.docker.com/r/google/cadvisor/

https://github.com/google/cadvisor

https://github.com/google/cadvisor/blob/master/deploy/Dockerfile