{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2021-01-06--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"0ecd5f30-6ba2-59db-af76-f6a332711a80","html":"<h3>Docker-Compose</h3>\n<ul>\n<li>Define and run multi-container application with Docker.</li>\n<li>여러 개의 컨테이너를 동작시키기 위해 도커 어플리케이션을 정의하고 실행하는 도구</li>\n</ul>\n<h3>docker-compose.yml</h3>\n<ul>\n<li>컨테이너 실행에 사용되는 옵션과 컨테이너 간 의존성을 모두 docker-compose.yml 파일에 적어두고, docker-compose 명령어를 사용하여 컨테이너를 실행 및 관리</li>\n</ul>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/63637afeecc8e3d76b6e1cec00dc77d5/3fe45/001-01.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 699px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 106.25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABJ0AAASdAHeZh94AAACF0lEQVQ4y51UWXbjMAzLbWasXaKW2Fk6978UhqRdJ+1r0qYffLIkCwJIUIeyXEHzCUsnnDhSbfApw1r7qziUuaP0ihoMlmzgrcE0TTDG6A8yvhKHUjtSqXDOoY2IQAGxRqQeEIqH8w7WvMKQ2gZoccwWS3HwwfFaQWLpwvYz46eAmQEzA8okB4sLWQwGbq1hzAsKkYYo+AnoxpB0MpIwNOiN0PqAC5HZchpCUBBluh18BLrlkHbJb5VZVs9sHRdqQnQTQkxIuSCm9AOGDJgZ0FgHihb/msWVZb+RwbklzKMrWMp5B3xeFAVcqyy5O5NDjitD74Oykz35+b5AxvD4/j3dvg95lyxJtyCqOC4XjOXMNjqic5wub7x22lnGuIa4IGxj3JphZ+jFhyy5lqwS851M+fkdQNIje5ltVfjyfY3nW5X7bpvAJi68QXyJAE3T30+dsEnepK/ypw+pOJTGkvkmx4CeKy3SnfN73l7uZRoDuTJ1ZnetVovxZ/q+Zx/ZZzV2JjVs4U4RUIorO+89GzuosWXUuV/Hp8bWHLLEGldjn8lqkeQiqbrktGiL8rw2LZrk8fYafQEoANLLgzxG8wjpLpixhLw8Xr6T1wfkxtJ8bWzplFySPrAh8KHo98MCpoBhDevs94A1OZyPHcuyqNduXfG4ME9aj4vBko81gXJUsN+92JJsTrxIFIZzy9xy8/p8qSdfi//aIYP1RuutOAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 01\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/63637afeecc8e3d76b6e1cec00dc77d5/3fe45/001-01.png\"\n        srcset=\"/devHistoryBlog/static/63637afeecc8e3d76b6e1cec00dc77d5/8ff5a/001-01.png 240w,\n/devHistoryBlog/static/63637afeecc8e3d76b6e1cec00dc77d5/e85cb/001-01.png 480w,\n/devHistoryBlog/static/63637afeecc8e3d76b6e1cec00dc77d5/3fe45/001-01.png 699w\"\n        sizes=\"(max-width: 699px) 100vw, 699px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<h4>version</h4>\n<ul>\n<li>docker-compose.yml 파일의 첫 줄에는 파일 규격 버전을 적는다. </li>\n<li>파일의 규격에 따라 지원하는 옵션이 달라진다. <a href=\"https://docs.docker.com/compose/compose-file/compose-versioning\">참고</a></li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">1| version: &quot;3.1&quot;</code></pre></div>\n<h4>services</h4>\n<ul>\n<li>실행하려는 컨테이너들을 정의</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\"> 2| services:\n 3|   ca-db:\n       ...\n18|  ca-was:\n       ...</code></pre></div>\n<h4>image</h4>\n<ul>\n<li>베이스 이미지를 지정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">4| image: mariadb:10.4</code></pre></div>\n<h4>build</h4>\n<ul>\n<li>도커파일을 이용하여 베이스 이미지 지정</li>\n<li>도커 파일의 경로나 이름이 다르면 아래와 같이 지정</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">5| build:\n6|   context: ./docker\n7|   dockerfile: Dockerfile.db</code></pre></div>\n<h4>restart</h4>\n<ul>\n<li>재시작 옵션</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">8| restart: always\n\n# no : \n    container를 재시작 시키지 않는다. (default)  \n# on-failure[:max-retries] :\n    container가 정상적으로 종료되지 않은 경우(exit code가 0이 아님)에만 재시작 시킨다. \n    max-retries도 함께 주면 재시작 최대 시도횟수를 지정할 수 있고, 테스트 서버 등과 같은 리모트에 설정하면 좋을 것 같다.  \n# always : \n    container를 항상 재시작시킨다. \n    exit code 상관 없이 항상 재시작 된다.\n# unless-stopped : \n    container를 stop시키기 전 까지 항상 재시작 시킨다.</code></pre></div>\n<h4>environment</h4>\n<ul>\n<li>docker run 명령어의 —env, -e 옵션과 동일, 환경변수</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\"> 9| environment:\n10|   MYSQL_ROOT_PASSWORD: flatron123!\n11|   MYSQL_DATABASE: webca</code></pre></div>\n<h4>volumes</h4>\n<ul>\n<li>DB의 데이터를 로컬에 저장</li>\n<li>sql을 /docker-entrypoint-initdb.d/ 에 저장하면 DB가 start 될 때 sql 문을 순차적으로 실행한다</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">12| volumes:\n13|   - ./ca-db-data:/var/lib/mysql\n14|   - ./docker/mysql-conf/init.sql/:/docker-entrypoint-initdb.d/</code></pre></div>\n<h4>ports</h4>\n<ul>\n<li>HOST:CONTAINER 형식으로 호스트로 들어온 포트를 해당 컨테이너의 포트로 포워딩</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">15| ports:\n16|   - 3333:3306</code></pre></div>\n<h4>depends_on</h4>\n<ul>\n<li>서비스 간 의존 관계를 지정</li>\n<li>명시된 컨테이너가 먼저 생성되고 실행</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">26| depends_on:\n27|   - ca-db</code></pre></div>","fields":{"tagSlugs":["/tags/docker/","/tags/docker-compose/"],"slug":"/history/posts/2021-01-06--001"},"frontmatter":{"title":"Docker-Compose 내용 정리","tags":["docker","docker-compose"],"date":"2021-01-06","description":""}}},"pageContext":{"slug":"/history/posts/2021-01-06--001"}},"staticQueryHashes":[]}