{"id":6612,"date":"2020-05-08T13:51:17","date_gmt":"2020-05-08T04:51:17","guid":{"rendered":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/?p=6612"},"modified":"2020-05-08T13:51:20","modified_gmt":"2020-05-08T04:51:20","slug":"docker%ef%bc%88windows10%e7%89%88%e3%80%81mysql%e3%80%81redis%e3%80%81dynamodb%e3%80%81minios3%e3%80%81rodolpheche%ef%bc%89%e3%82%92%e8%a9%a6%e3%81%99","status":"publish","type":"post","link":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/archives\/6612","title":{"rendered":"Docker\uff08Windows10\u7248\u3001mysql\u3001redis\u3001dynamodb\u3001minio(S3)\u3001rodolpheche\uff09\u3092\u8a66\u3059"},"content":{"rendered":"<div class=\"veu_autoEyeCatchBox\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"725\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-1024x990.jpg\" class=\"attachment-large size-large wp-post-image\" alt=\"\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-1024x990.jpg 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-300x290.jpg 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-768x743.jpg 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-1536x1486.jpg 1536w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-2048x1981.jpg 2048w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/div>\n<p>\u3053\u3093\u306b\u3061\u308f\u3001\u732b\u597d\u304d\u30ea\u30fc\u30de\u30f3\u306e\u307b\u3052PG\u3067\u3059\u3002<br>\u4eca\u56de\u306fDocker\u3067\u304a\u624b\u8efd\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<h2>\uff11\u3001Docker \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n<p>\u3000\u30fbHyper-V<\/p>\n<p>\u3000\u307e\u305a\u3001Hyper-V\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002<\/p>\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u3092\u958b\u3044\u3066<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6613 size-large\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-1-1024x539.png\" alt=\"\" width=\"750\" height=\"395\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-1-1024x539.png 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-1-300x158.png 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-1-768x405.png 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-1.png 1139w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>\u30b7\u30b9\u30c6\u30e0\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u9078\u629e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6614\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-2-1024x539.png\" alt=\"\" width=\"750\" height=\"395\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-2-1024x539.png 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-2-300x158.png 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-2-768x405.png 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-2.png 1139w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>\u5de6\u30e1\u30cb\u30e5\u30fc\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u9078\u629e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6615\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-3-1024x539.png\" alt=\"\" width=\"750\" height=\"395\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-3-1024x539.png 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-3-300x158.png 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-3-768x405.png 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-3.png 1139w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>Windows\u306e\u6a5f\u80fd\u306e\u6709\u52b9\u5316\u307e\u305f\u306f\u7121\u52b9\u5316\u3092\u9078\u629e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6616\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-4.png\" alt=\"\" width=\"500\" height=\"425\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-4.png 500w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-4-300x255.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/p>\n<p>Hyper-V\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066OK\u30dc\u30bf\u30f3\u62bc\u4e0b<\/p>\n<p>&nbsp;<\/p>\n<p>\u3000\u30fbDocker\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff06\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n<p>\u3053\u3053\uff08<a href=\"https:\/\/hub.docker.com\/?overlay=onboarding\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/hub.docker.com\/?overlay=onboarding<\/a>\uff09\u304b\u3089<br>Docker Desktop Installer.exe \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<p>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\uff48\u305fexe\u3092\u5b9f\u884c\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u3000\u30fbDocker\u8a2d\u5b9a<\/p>\n<p>\u3000\u30bf\u30b9\u30af\u30e1\u30cb\u30e5\u30fc\u3067Docker Desktop\u3092\u53f3\u30af\u30ea\u30c3\u30af\u3067\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304d\u3001settings\u3092\u9078\u629e<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6617\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-5-1024x603.png\" alt=\"\" width=\"750\" height=\"442\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-5-1024x603.png 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-5-300x177.png 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-5-768x452.png 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-5.png 1155w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>\u3000Storage\u8a2d\u5b9a\u3067C\u30c9\u30e9\u30a4\u30d6\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u7f6e\u304d\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6618\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-6-1024x603.png\" alt=\"\" width=\"750\" height=\"442\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-6-1024x603.png 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-6-300x177.png 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-6-768x452.png 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-6.png 1155w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>\u5fc5\u8981\u304c\u3042\u308c\u3070\u3001Proxy\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<p>\u3000http:\/\/(\u30e6\u30fc\u30b6\u540d):(\u30d1\u30b9\u30ef\u30fc\u30c9)@(\u30d7\u30ed\u30af\u30b7\u30db\u30b9\u30c8):(\u30d7\u30ed\u30af\u30b7\u30dd\u30fc\u30c8)\/<\/p>\n<p>&nbsp;<\/p>\n<p>\u3000\u30fbAWSCLI\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff06\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n<p>\u3000\u3000\u3053\u3053\uff08<a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/install-cliv2-windows.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/install-cliv2-windows.html<\/a>\uff09\u304b\u3089Windows\u7248\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<p>\u3000\u3000\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305fmsi\u3092\u5b9f\u884c\u3057\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\uff12\u3001docker \u5404\u7a2e\u30a4\u30e1\u30fc\u30b8\u69cb\u7bc9<\/h2>\n<p>\u4ee5\u4e0b\u306e\u69cb\u6210\u3067\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">docker\n\u2502  docker-compose.yml\n\u2502  my.cnf\n\u251c\u2500data\n\u2502  \u251c\u2500dynamodb\n\u2502  \u251c\u2500minio\n\u2502  \u251c\u2500mysql\n\u2502  \u251c\u2500redis\n\u2502  \u2514\u2500wiremock\n\u2514\u2500init\n    \u2514\u2500mysql\n            create_tables.sql<\/pre>\n<p>docker-compose.yml<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">version: '3'\nservices:\n  hoge-mysql:\n    container_name: hoge-mysql\n    image: mysql:5.7\n    environment:\n      MYSQL_ROOT_PASSWORD: root\n      TZ: 'Asia\/Tokyo'\n    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci\n    volumes:\n      - .\/data\/mysql:\/var\/lib\/mysql\n      - .\/my.cnf:\/etc\/mysql\/conf.d\/my.cnf\n      - .\/init\/mysql:\/docker-entrypoint-initdb.d\n    ports:\n      - 3306:3306\n\n  hoge-redis:\n    container_name: hoge-redis\n    image: redis\n    ports:\n      - 6379:6379\n    volumes:\n      - .\/data\/redis:\/data\n\n  hoge-dynamodb:\n    container_name: hoge-dynamodb\n    image: amazon\/dynamodb-local\n    command: -jar DynamoDBLocal.jar -dbPath \/data\n    volumes:\n      - .\/data\/dynamodb:\/data\n    ports:\n      - 8000:8000\n\n  hoge-minio:\n    container_name: hoge-minio\n    image: minio\/minio\n    volumes:\n      - .\/data\/minio:\/data\n    ports:\n      - 9000:9000\n    environment:\n      MINIO_ACCESS_KEY: hoge\n      MINIO_SECRET_KEY: hogehoge\n    command: server \/data --compat\n\n  hoge-mockserver:\n    container_name: hoge-mockserver\n    image: rodolpheche\/wiremock\n    ports: \n      - 80:8080\n    restart: always\n    volumes:\n      - .\/data\/wiremock:\/home\/wiremock\n    command: [--record-mappings, --verbose]\n<\/pre>\n<p>my.cnf<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">[mysqld]\ncharacter-set-server=utf8\ncollation-server=utf8mb4_bin\n\n[client]\ndefault-character-set=utf8\n<\/pre>\n<p>create_tables.sql<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">DROP DATABASE IF EXISTS hogedb;\nCREATE DATABASE hogedb CHARACTER SET utf8 COLLATE utf8_bin;\nUSE hogedb;\n\nCREATE TABLE t_hoge\n(\n  id         INT(20) AUTO_INCREMENT,\n  name       VARCHAR(20) NOT NULL,\n  updated    DATETIME DEFAULT NULL,\n  PRIMARY KEY (`id`)\n);\n\nINSERT INTO t_hoge (name, updated)\nVALUES\n('hoge-one',now()),\n('hoge-two',now()),\n('hoge-three',now());\n<\/pre>\n<p>docker\u30d5\u30a9\u30eb\u30c0\u306b\u3066\u4ee5\u4e0b\u3092\u5b9f\u884c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">docker-compose up -d<\/pre>\n<p>\u3000docker\u306eDashBoard\u304b\u3089\u78ba\u8a8d\u3059\u308b<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-6619\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-7-1024x603.png\" alt=\"\" width=\"750\" height=\"442\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-7-1024x603.png 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-7-300x177.png 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-7-768x452.png 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-7.png 1155w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2>\uff13\u3001\u5404\u30a4\u30e1\u30fc\u30b8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u78ba\u8a8d<\/h2>\n<h3>3-1, mysql<\/h3>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 application.yml<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">spring.datasource:\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    url: jdbc:mysql:\/\/localhost:3306\/hogedb\n    username: root\n    password: root\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 HogeRepository.java<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Mapper\npublic interface HogeRepository {\n    Map&lt;String, Object&gt; select(String id);\n}\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185&nbsp; HogeRepository.xml<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"jp.co.ois.hoge.sample.HogeRepository\"&gt;\n    &lt;select id=\"select\" parameterType=\"string\" resultType=\"hashmap\"&gt;\n        SELECT * FROM t_hoge WHERE id = #{id}\n    &lt;\/select&gt;\n&lt;\/mapper&gt;\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u547c\u51fa\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Autowired\nHogeRepository hogeRepository;\nvoid testMysql() {\n    log.info(\"called.\");\n    Map&lt;String, Object&gt; data = hogeRepository.select(\"1\");\n    log.info(\"mysql: {}\", data);\n}\n\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>3-2, Redis<\/h3>\n<p>\u30fb\u30c7\u30fc\u30bf\u6295\u5165<\/p>\n<p>REDIS \u306eCLI\u30dc\u30bf\u30f3\u3092\u62bc\u4e0b<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-6620\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-8.png\" alt=\"\" width=\"321\" height=\"209\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-8.png 321w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/hoge6-8-300x195.png 300w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/p>\n<p>\u7acb\u3061\u4e0a\u304c\u3063\u305f\u30b3\u30f3\u30bd\u30fc\u30eb\u3067\u4ee5\u4e0b\u3092\u5b9f\u65bd<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># redis-cli\n127.0.0.1:6379&gt; set hoge HOGE\nOK\n127.0.0.1:6379&gt; get hoge\n\"HOGE\"\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 application.yml<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">spring.redis:\n    host: localhost\n    port: 6379\n    database: 0\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u8a2d\u5b9a\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Bean\npublic StringRedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {\n    StringRedisTemplate template = new StringRedisTemplate();\n    template.setConnectionFactory(redisConnectionFactory);\n    return template;\n}\n\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u547c\u51fa\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Autowired\nprivate StringRedisTemplate redisTemplate;\nvoid testRedis() {\n    log.info(\"called.\");\n    redisTemplate.opsForValue().set(\"\u307b\u3052\", \"\u3042\u3044\u3046\u3048\u304a\");\n    String value = redisTemplate.opsForValue().get(\"hoge\");\n    log.info(\"redis: {}\", value);\n}\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>3-3, minio(S3)<\/h3>\n<p>\u30fb\u30c7\u30fc\u30bf\u6295\u5165<\/p>\n<p>\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u3088\u308a\u4ee5\u4e0b\u3092\u5b9f\u884c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&gt;aws --endpoint-url http:\/\/127.0.0.1:9000 s3 mb s3:\/\/hoge-s3\nmake_bucket: hoge-s3\n\n&gt;echo HOGE &gt; hoge.txt\n\n&gt;aws --endpoint-url http:\/\/127.0.0.1:9000 s3 cp hoge.txt s3:\/\/hoge-s3\/hoge\nupload: .\\hoge.txt to s3:\/\/hoge-s3\/hoge\n\n&gt;aws --endpoint-url http:\/\/127.0.0.1:9000 s3 cp s3:\/\/hoge-s3\/hoge -\nHOGE\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u8a2d\u5b9a\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Bean\npublic S3Client s3Client() {\n    return S3Client.builder()\n            .endpointOverride(URI.create(\"http:\/\/localhost:9000\"))\n            .build();\n}\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u547c\u51fa\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Autowired\nS3Client s3Client;\nvoid testS3() {\n    log.info(\"called.\");\n    ResponseInputStream&lt;GetObjectResponse&gt; res = s3Client.getObject(\n            GetObjectRequest.builder().bucket(\"hoge-s3\").key(\"hoge\").build());\n    BufferedReader reader = new BufferedReader(new InputStreamReader(res));\n    reader.lines().forEach(s -&gt; {\n        log.info(\"s3: {}\", s);\n    });\n}\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>3-4, dynamoDB<\/h3>\n<p>\u30fbConfig\u3068credentials\u4f5c\u6210<\/p>\n<p>\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u3088\u308a\u4ee5\u4e0b\u3092\u5b9f\u884c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&gt;aws configure\nAWS Access Key ID [None]: hoge\nAWS Secret Access Key [None]: hogehoge\nDefault region name [None]: local\nDefault output format [None]: json\n<\/pre>\n<p>\u30fb\u30c7\u30fc\u30bf\u6295\u5165<\/p>\n<p>\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30f3\u30d7\u30c8\u3088\u308a\u4ee5\u4e0b\u3092\u5b9f\u884c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&gt;aws --endpoint-url http:\/\/localhost:8000 dynamodb create-table --table-name hoge-dynamo --attribute-definitions AttributeName=hoge_id,AttributeType=S --key-schema AttributeName=hoge_id,KeyType=HASH --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1\n{\n    \"TableDescription\": {\n        \"AttributeDefinitions\": [\n            {\n                \"AttributeName\": \"hoge_id\",\n                \"AttributeType\": \"S\"\n            }\n        ],\n        \"TableName\": \"hoge-dynamo\",\n        \"KeySchema\": [\n            {\n                \"AttributeName\": \"hoge_id\",\n                \"KeyType\": \"HASH\"\n            }\n        ],\n        \"TableStatus\": \"ACTIVE\",\n        \"CreationDateTime\": \"2020-03-31T17:23:00.802000+09:00\",\n        \"ProvisionedThroughput\": {\n            \"LastIncreaseDateTime\": \"1970-01-01T09:00:00+09:00\",\n            \"LastDecreaseDateTime\": \"1970-01-01T09:00:00+09:00\",\n            \"NumberOfDecreasesToday\": 0,\n            \"ReadCapacityUnits\": 1,\n            \"WriteCapacityUnits\": 1\n        },\n        \"TableSizeBytes\": 0,\n        \"ItemCount\": 0,\n        \"TableArn\": \"arn:aws:dynamodb:ddblocal:000000000000:table\/hoge-dynamo\"\n    }\n}\n\n\n&gt;aws --endpoint-url http:\/\/localhost:8000 dynamodb put-item --table-name hoge-dynamo --item \"{ \"\"hoge_id\"\": { \"\"S\"\": \"\"0001\"\" }, \"\"hoge_value\"\": { \"\"S\"\": \"\"hoge\"\" } }\"\n\n\n&gt;aws --endpoint-url http:\/\/localhost:8000 dynamodb scan --table-name hoge-dynamo\n{\n    \"Items\": [\n        {\n            \"hoge_id\": {\n                \"S\": \"0001\"\n            },\n            \"hoge_value\": {\n                \"S\": \"hoge\"\n            }\n        }\n    ],\n    \"Count\": 1,\n    \"ScannedCount\": 1,\n    \"ConsumedCapacity\": null\n}\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u8a2d\u5b9a\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Bean\npublic DynamoDbClient dynamoDbClient() {\n    return DynamoDbClient.builder()\n            .endpointOverride(URI.create(\"http:\/\/localhost:8000\"))\n            .build();\n}\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u547c\u51fa\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Autowired\nDynamoDbClient dynamoDbClient;\nvoid testDynamoDb() {\n    log.info(\"called.\");\n    Map&lt;String,AttributeValue&gt; keyMap = new HashMap&lt;&gt;();\n    keyMap.put(\"hoge_id\", AttributeValue.builder().s(\"0001\").build());\n    GetItemResponse res = dynamoDbClient.getItem(\n            GetItemRequest.builder().tableName(\"hoge-dynamo\").key(keyMap).build());\n    log.info(\"item: {}\", res.item());\n}\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>3-5, rodolpheche<\/h3>\n<p>\u30fb\u30b7\u30ca\u30ea\u30aa\u4f5c\u6210<\/p>\n<p>\u4ee5\u4e0b\u306e\u69cb\u6210\u3067\u30b7\u30ca\u30ea\u30aa\u30d5\u30a1\u30a4\u30eb\u3092\u914d\u7f6e<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">docker\n\u2514\u2500data\n  \u2514\u2500wiremock\n         \u251c\u2500__files\n         \u2502   \u2514\u2500hoge-res.json\u3000\u2026\u914d\u7f6e\u30d5\u30a1\u30a4\u30eb\n         \u2514\u2500mappings\n                 \u2514\u2500hoge.json\u3000\u2026\u914d\u7f6e\u30d5\u30a1\u30a4\u30eb\n<\/pre>\n<p>hoge.json<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n  \"request\": {\n    \"method\": \"POST\",\n    \"url\": \"\/hoge\/api\",\n    \"headers\": {\n      \"Content-Type\": {\n          \"matches\": \"application\/json\"\n      }\n    },\n    \"bodyPatterns\" : [\n      {\n        \"matches\" : \"(.*)hoge(.*)\"\n      }\n    ]\n  },\n  \"response\": {\n    \"status\": 200,\n    \"bodyFileName\": \"hoge-res.json\",\n    \"headers\": {\n      \"Content-Type\": \"application\/json\"\n    }\n  }\n}\n<\/pre>\n<p>hoge-res.json<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n    \"result\": \"HOGE\"\n}\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u8a2d\u5b9a\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Bean\npublic RestTemplate restTemplate() {\n    return new RestTemplate();\n}\n<\/pre>\n<p>\u30fbSpring boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185 \u547c\u51fa\u51e6\u7406<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@Autowired\nRestTemplate restTemplate;\n@Data\n@AllArgsConstructor\nstatic class HogeParam {\n    String value;\n}\nvoid testWeb() {\n    log.info(\"called.\");\n    String url = \"http:\/\/localhost\/hoge\/api\";\n    HogeParam param = new HogeParam(\"hoge\");\n    HttpHeaders headers = new HttpHeaders();\n    headers.setContentType(MediaType.APPLICATION_JSON);\n    HttpEntity&lt;HogeParam&gt; request = new HttpEntity&lt;&gt;(param, headers);\n    log.info(\"request: {}\", request);\n    ResponseEntity&lt;String&gt; res = restTemplate.postForEntity(url, request, String.class);\n    log.info(\"res: {}\", res);\n}\n<\/pre>\n<p>\u30fb\u5b9f\u884c\u7d50\u679c<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">17:41:16.875 [main] INFO jp.co.ois.hoge.sample.HogeApp - start ()\n17:41:18.859 main INFO  (StartupInfoLogger.java:55) logStarting - Starting HogeApp on NDYWM7A3420152 with PID 11692 (C:\\work\\masuda\\myrepo\\HogeDockerSample\\target\\classes started by horqu in C:\\work\\masuda\\myrepo\\HogeDockerSample)\n17:41:18.864 main INFO  (SpringApplication.java:651) logStartupProfileInfo - No active profile set, falling back to default profiles: default\n17:41:20.738 main INFO  (RepositoryConfigurationDelegate.java:249) multipleStoresDetected - Multiple Spring Data modules found, entering strict repository configuration mode!\n17:41:20.745 main INFO  (RepositoryConfigurationDelegate.java:127) registerRepositoriesIn - Bootstrapping Spring Data Redis repositories in DEFAULT mode.\n17:41:20.835 main INFO  (RepositoryConfigurationDelegate.java:187) registerRepositoriesIn - Finished Spring Data repository scanning in 51ms. Found 0 Redis repository interfaces.\n17:41:22.351 main INFO  (TomcatWebServer.java:92) initialize - Tomcat initialized with port(s): 8080 (http)\n17:41:22.374 main INFO  (DirectJDKLog.java:173) log - Starting service [Tomcat]\n17:41:22.375 main INFO  (DirectJDKLog.java:173) log - Starting Servlet engine: [Apache Tomcat\/9.0.33]\n17:41:23.483 main INFO  (DirectJDKLog.java:173) log - Initializing Spring embedded WebApplicationContext\n17:41:23.483 main INFO  (ServletWebServerApplicationContext.java:284) prepareWebApplicationContext - Root WebApplicationContext: initialization completed in 4491 ms\n17:41:28.325 main INFO  (ExecutorConfigurationSupport.java:181) initialize - Initializing ExecutorService 'applicationTaskExecutor'\n17:41:28.978 main INFO  (TomcatWebServer.java:204) start - Tomcat started on port(s): 8080 (http) with context path ''\n17:41:28.985 main INFO  (StartupInfoLogger.java:61) logStarted - Started HogeApp in 11.755 seconds (JVM running for 16.733)\n17:41:28.987 main INFO  (HogeRunner.java:45) run - start...[]\n17:41:28.987 main INFO  (HogeRunner.java:59) testMysql - called.\n17:41:29.041 main INFO  (HikariDataSource.java:110) getConnection - HikariPool-1 - Starting...\n17:41:29.725 main INFO  (HikariDataSource.java:123) getConnection - HikariPool-1 - Start completed.\n17:41:29.853 main INFO  (HogeRunner.java:61) testMysql - mysql: {name=hoge-one, id=1, updated=2020-02-27 17:39:48.0}\n17:41:29.853 main INFO  (HogeRunner.java:68) testRedis - called.\n17:41:30.238 main INFO  (EpollProvider.java:68) &lt;clinit&gt; - Starting without optional epoll library\n17:41:30.245 main INFO  (KqueueProvider.java:70) &lt;clinit&gt; - Starting without optional kqueue library\n17:41:32.367 main INFO  (HogeRunner.java:71) testRedis - redis: HOGE\n17:41:32.368 main INFO  (HogeRunner.java:78) testS3 - called.\n17:41:32.919 main INFO  (HogeRunner.java:83) lambda$0 - s3: HOGE \n17:41:32.919 main INFO  (HogeRunner.java:91) testDynamoDb - called.\n17:41:33.311 main INFO  (HogeRunner.java:96) testDynamoDb - item: {hoge_id=AttributeValue(S=0001, SS=[], NS=[], BS=[], M={}, L=[]), hoge_value=AttributeValue(S=hoge, SS=[], NS=[], BS=[], M={}, L=[])}\n17:41:33.312 main INFO  (HogeRunner.java:109) testWeb - called.\n17:41:33.330 main INFO  (HogeRunner.java:115) testWeb - request: &lt;HogeRunner.HogeParam(value=hoge),[Content-Type:\"application\/json\"]&gt;\n17:41:33.665 main INFO  (HogeRunner.java:117) testWeb - res: &lt;200,{\n    \"result\": \"HOGE\"\n},[Content-Type:\"application\/json\", Matched-Stub-Id:\"6a91cba7-1703-4e75-ba96-4d66db273cb7\", Vary:\"Accept-Encoding, User-Agent\", Transfer-Encoding:\"chunked\", Server:\"Jetty(9.4.20.v20190813)\"]&gt;\n17:41:33.666 main INFO  (HogeRunner.java:52) run - end...\n17:41:33.670 main INFO  (ExecutorConfigurationSupport.java:218) shutdown - Shutting down ExecutorService 'applicationTaskExecutor'\n17:41:33.827 main INFO  (HikariDataSource.java:350) close - HikariPool-1 - Shutdown initiated...\n17:41:33.847 main INFO  (HikariDataSource.java:352) close - HikariPool-1 - Shutdown completed.\n17:41:34.615 main INFO  (HogeApp.java:19) main - exit 0\n<\/pre>\n<p>&nbsp;<\/p>\n<h4>Docker\u30d5\u30a9\u30eb\u30c0\u69cb\u6210<\/h4>\n<p><a href=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/file\/docker.zip\">docker.zip<\/a><\/p>\n<h4>SpringBoot\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4e00\u5f0f<\/h4>\n<p><a href=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/file\/HogeDockerSample.zip\">HogeDockerSample.zip<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u4eca\u56de\u306f\u3053\u3053\u307e\u3067\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-6623 size-medium\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-300x290.jpg\" alt=\"\" width=\"300\" height=\"290\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-300x290.jpg 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-1024x990.jpg 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-768x743.jpg 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-1536x1486.jpg 1536w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2020\/05\/IMG_20191218_163620-2048x1981.jpg 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u308f\u3001\u732b\u597d\u304d\u30ea\u30fc\u30de\u30f3\u306e\u307b\u3052PG\u3067\u3059\u3002\u4eca\u56de\u306fDocker\u3067\u304a\u624b\u8efd\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002 \uff11\u3001Docker \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb \u3000\u30fbHyper-V \u3000\u307e\u305a\u3001Hyper-V\u3092\u6709\u52b9\u5316\u3057\u307e\u3059\u3002 \u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u3092\u958b\u3044\u3066 \u30b7\u30b9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6623,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"vkexunit_cta_each_option":"","footnotes":""},"categories":[6],"tags":[815,814,28,817,816,813,819,793,774,818],"class_list":["post-6612","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineer","tag-docker","tag-dynamodb","tag-hoge","tag-minio","tag-mysql","tag-redis","tag-s3","tag-spring-boot","tag-windows10","tag-wiremock"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts\/6612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/comments?post=6612"}],"version-history":[{"count":5,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts\/6612\/revisions"}],"predecessor-version":[{"id":10015,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts\/6612\/revisions\/10015"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/media\/6623"}],"wp:attachment":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/media?parent=6612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/categories?post=6612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/tags?post=6612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}