[{"data":1,"prerenderedAt":692},["ShallowReactive",2],{"news-item-\u002Fja\u002Fnews\u002Flaunch-with-docker":3},{"id":4,"title":5,"body":6,"category":679,"created by":680,"date":681,"description":682,"extension":683,"meta":684,"navigation":685,"path":686,"sections":687,"seo":688,"stem":689,"thumbnail":690,"__hash__":691},"content_ja\u002Fja\u002Fnews\u002Flaunch-with-docker.md","Dockerの導入について",{"type":7,"value":8,"toc":664},"minimark",[9,17,21,27,49,55,64,70,73,79,82,88,97,178,184,187,190,228,231,241,247,253,259,265,271,277,283,289,295,301,307,313,316,322,325,331,334,340,343,349,352,358,361,367,370,375,378,384,387,393,400,406,409,417,422,432,436,439,442,448,451,457,460,466,469,475,478,481,487,490,496,505,511,514,520,523,529,532,538,541,544,547,550,556,559,562,565,568,574,577,583,586,592,595,601,604,610,613,618,622,627,631,634,638,642,647,652,658],[10,11,13],"h2",{"id":12},"i-dockerは何",[14,15,16],"strong",{},"I. Dockerは何？",[18,19,20],"p",{},"Dockerとは、アプリケーションを開発・配置 ・デプロイ・実施するためのオープンソースプラットフォームです。Dockerを使用すると、アプリケーションをインフラストラクチャから分離できるため、ソフトウェアを迅速に配信できます。 アプリケーションを管理するのと同じ方法でインフラストラクチャを管理できます。 コードを迅速にデプロイ、配置 、テスト、デプロイするためのDockerの方法論を利用することで、コードの書きから本番環境での実行までの遅延を大幅に減らすことができます。",[10,22,24],{"id":23},"ii-dockerの主なメリット",[14,25,26],{},"II. Dockerの主なメリット",[28,29,30,34,37,40,43,46],"ul",{},[31,32,33],"li",{},"仮想マシンとは異なり、Dockerは数秒で起動および停止します。",[31,35,36],{},"必要な各システムでコンテナを起動できます。",[31,38,39],{},"コンテナは、仮想マシンよりも高速に構築および削除できます。",[31,41,42],{},"作業環境の設定が簡単。",[31,44,45],{},"一度だけ設定するだけで、依存関係を再インストールする必要はありません。",[31,47,48],{},"他の部分に影響を与える環境を削除するときに、ワークスペースをクリーンに保ちます。",[10,50,52],{"id":51},"iii-インストール",[14,53,54],{},"III. インストール",[18,56,57,63],{},[58,59,60],"a",{"href":60,"rel":61},"https:\u002F\u002Fdocs.docker.com\u002Fget-docker\u002F",[62],"nofollow"," のURLを参照ください",[10,65,67],{"id":66},"iv-docker-image",[14,68,69],{},"IV. DOCKER IMAGE",[18,71,72],{},"Docker Imageは、コンテナーの作成に使用される読み取り専用のテンプレートです。 Imageは読み取り専用レイヤーで構成されます。 Imageの作成は、いくつかの追加のカスタマイズを使用して別のImageに基づくことができます。 つまり、Docker Imageは、OS、パッケージ、実行するソフトウェアなどの環境設定を保存する場所です。",[10,74,76],{"id":75},"v-container",[14,77,78],{},"V. CONTAINER",[18,80,81],{},"Docker Containerは、アプリケーションを実行するために必要なすべてのものが含まれているDocker　Imageから作成されます。 仮想化と見たいですが、コンテナは非常に軽いので、システムプロセスと見なすことができます。 コンテナの開始、停止、または再起動には数秒しかかかりません。 物理サーバーを使用すると、いくつかの普通な仮想マシンを実行する代わりに、Dockerコンテナーを実行できます。",[10,83,85],{"id":84},"vi-container-c-と仮想マシン-vmの比較",[14,86,87],{},"VI. CONTAINER [C] と仮想マシン [VM]の比較",[89,90],"img",{"className":91,"alt":94,"src":95,"style":96},[92,93],"block","mx-auto","","https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F28100010\u002Fcompare.jpg","width: 100%;",[98,99,100,119],"table",{},[101,102,103],"thead",{},[104,105,106,109,114],"tr",{},[107,108],"th",{},[107,110,111],{},[14,112,113],{},"CONTAINER",[107,115,116],{},[14,117,118],{},"VIRTUAL MACHINE",[120,121,122,134,145,156,167],"tbody",{},[104,123,124,128,131],{},[125,126,127],"td",{},"リソース",[125,129,130],{},"コンテナ内のプロセスは実際のリソースを直接使用しますが、オペレーティングシステムは、各プロセスに異なるリソース制限（または無制限）を規定できます。",[125,132,133],{},"すべてが仮想ハードウェアによって制限されます。",[104,135,136,139,142],{},[125,137,138],{},"実施",[125,140,141],{}," 実OSがソフトウェアを実行します。",[125,143,144],{},"実OS→仮想OS→ソフトウェアを実行している仮想OS。 （VPSの場合、ハイパーバイザータイプ1が実際のOSに置き換わります）",[104,146,147,150,153],{},[125,148,149],{},"パフォーマンス",[125,151,152],{},"実際のソフトウェアは実際のハードウェアで実行されます。 起動速度はほぼ通常のソフトウェアと同じです。",[125,154,155],{},"実ハードウェアは仮想OSを搭載する必要があります。 コンピュータが起動したため、ソフトウェアが使用されるまでに時間がかかりました。",[104,157,158,161,164],{},[125,159,160],{},"セキュリティー",[125,162,163],{},"同じコンテナ内のプロセスは、引き続き相互に影響を与える可能性があります。 ただし、通常、各コンテナは1つのプロセスのみを実行する必要があります。 異なるコンテナのプロセスは互いに影響を与えることはできません。",[125,165,166],{},"ソフトウェアに悪意のあるコードがあると、同じVM内の他のプロセスリソースに影響を与える可能性があります。",[104,168,169,172,175],{},[125,170,171],{},"サポートソフトウェア",[125,173,174],{},"Docker Engine, LXC Linux Container, Apache Mesos, CRI-O (Kubernetes)…",[125,176,177],{},"VirtualBox, VMWare, Microsoft Hyper-V, Parallels, Linux KVM, Docker Machine…",[10,179,181],{"id":180},"vii-dockerfile",[14,182,183],{},"VII. DOCKERFILE",[18,185,186],{},"Dockerfileは、DockerがImageをビルドするためのコンフィグファイルです。 基本Imageを使用することで初期Imageクラスを構築します。 いくつかの基本的なImage：python、ubuntu、alpine。 次に、追加のレイヤーがある場合は、ベースレイヤーの上にスタックされます。",[18,188,189],{},"コンフィグ：",[28,191,192,195,198,201,204,207,210,213,216,219,222,225],{},[31,193,194],{},"FROM：元のImageを指定します：python, ubuntu, alpine…",[31,196,197],{},"LABEL ：Imageにメタデータを提供します。 メンテナー情報を追加するために使用できます。 Imageのラベルを表示するには、dockerinspectコマンドを使用します。",[31,199,200],{},"ENV ：環境変数を設定します。",[31,202,203],{},"RUN ：Imageを構築するときにコマンドを作成できます。 パッケージをコンテナにインストールするために使用されます。",[31,205,206],{},"COPY ：ファイルとフォルダーをコンテナーにコピーします。",[31,208,209],{}," ADD ：ファイルとフォルダーをコンテナーにコピーします。",[31,211,212],{},"CMD ：実行可能コンテナのコマンドと引数を指定します。 パラメータはオーバーライドでき、CMDのみです。",[31,214,215],{},"WORKDIR ：次のような他のディレクティブの作業ディレクトリを設定します。例えば：RUN, CMD, ENTRYPOINT, COPY, ADD,…",[31,217,218],{},"ARG ：Imageのビルド中に使用される変数値を定義します。",[31,220,221],{},"ENTRYPOINT ：実行可能コンテナのコマンドと引数を指定します。",[31,223,224],{},"EXPOSE ：Imageのポートを定義します。",[31,226,227],{},"VOLUME ：データにアクセスして保存するためのディレクトリマウントポイントを作成します",[18,229,230],{},"例:",[232,233,238],"pre",{"className":234,"code":236,"language":237},[235],"language-text","FROM node:12-alpine\nRUN apk add git\nRUN mkdir -p \u002Fhome\u002Fnode\u002Fapp\nWORKDIR \u002Fhome\u002Fnode\u002Fapp\nCOPY package*.json .\u002F\nRUN npm install\nCOPY . .\nENV HOST=0.0.0.0 PORT=3334\nEXPOSE $PORT\nCMD [ \"node\", \".\" ]\n","text",[239,240,236],"code",{"__ignoreMap":94},[10,242,244],{"id":243},"viii-概念",[14,245,246],{},"VIII. 概念",[18,248,249,252],{},[14,250,251],{},"Docker Client："," ターミナルのコマンドでdockerと相互作用します。 DockerクライアントはAPIを使用してコマンドをDockerデーモンに送信します。",[18,254,255,258],{},[14,256,257],{},"Docker Daemon："," DockerAPIからのリクエスト用のDockerサーバーです。 Image、コンテナ、ネットワーク、およびボリュームを管理します。",[18,260,261,264],{},[14,262,263],{},"Docker Volumes："," アプリを使用および作成するためのデータを継続的に保存する場所です。",[18,266,267,270],{},[14,268,269],{},"Docker Registry："," Docker Imagesのプライベートストレージです。 Imageはレジストリにプッシュされ、クライアントはレジストリからImageをプルします。 独自のレジストリ、またはAWS、Google Cloud、MicrosoftAzureなどのプロバイダーのレジストリを使用できます。",[18,272,273,276],{},[14,274,275],{},"Docker Hub："," Docker Images最大のレジストリ（デフォルト）です。 Imageを検索して、Docker Hub（無料）に独自のImageを保存できます。",[18,278,279,282],{},[14,280,281],{},"Docker Repository："," 同じ名前でタグが異なるDockerイメージのセット。 例：node:12-alpine.",[18,284,285,288],{},[14,286,287],{},"Docker Networking："," コンテナを相互に接続できます。 この接続は、1つまたは複数のホスト上で行うことができます。",[18,290,291,294],{},[14,292,293],{},"Docker Compose："," このツールを使用すると、複数のDockerコンテナーでアプリを簡単に実行できます。 Docker Composeを使用すると、docker-compose.ymlファイルでコマンドを構成して再利用できます。 Dockerがインストールされた状態で利用できます。",[18,296,297,300],{},[14,298,299],{},"Docker Swarm："," コンテナーのデプロイを調整します。",[18,302,303,306],{},[14,304,305],{},"Docker Services："," 本番環境のコンテナーです。 サービスはImageのみを実行しますが、Imageを実行する方法を暗号化します。 使用するポート、サービスを実行するためのコンテナーのコピー数は、必要かつ即時のパフォーマンスを発揮します。",[10,308,310],{"id":309},"ix-dockerの基本なコマンド",[14,311,312],{},"IX. Dockerの基本なコマンド",[18,314,315],{},"image\u002Fcontainerリスト",[232,317,320],{"className":318,"code":319,"language":237},[235],"docker image\u002Fcontainer ls\n",[239,321,319],{"__ignoreMap":94},[18,323,324],{},"すべてのontainersリスト",[232,326,329],{"className":327,"code":328,"language":237},[235],"docker ps –a\n",[239,330,328],{"__ignoreMap":94},[18,332,333],{},"containerをストップ",[232,335,338],{"className":336,"code":337,"language":237},[235],"docker stop \u003CContainer名>\n",[239,339,337],{"__ignoreMap":94},[18,341,342],{},"ImageからContainerを実施かつContainer名を変更",[232,344,347],{"className":345,"code":346,"language":237},[235],"docker run –name \u003CContainer名> \u003CImage名>\n",[239,348,346],{"__ignoreMap":94},[18,350,351],{},"すべてのcontainerをストップ",[232,353,356],{"className":354,"code":355,"language":237},[235],"docker stop $(docker ps –a –q)\n",[239,357,355],{"__ignoreMap":94},[18,359,360],{},"containerログを表示",[232,362,365],{"className":363,"code":364,"language":237},[235],"docker logs \u003CContainer名>\n",[239,366,364],{"__ignoreMap":94},[18,368,369],{},"containerからImageをビルド",[18,371,372],{},[239,373,374],{},"docker build -t \u003CContainer名>",[18,376,377],{},"バックグラウンドで実行されるコンテナを作成",[232,379,382],{"className":380,"code":381,"language":237},[235],"docker run -d \u003CImage名>\n",[239,383,381],{"__ignoreMap":94},[18,385,386],{},"containerを起動",[232,388,391],{"className":389,"code":390,"language":237},[235],"docker start \u003CContainer名>\n",[239,392,390],{"__ignoreMap":94},[18,394,395,396],{},"See more: ",[58,397,398],{"href":398,"rel":399},"https:\u002F\u002Fdocs.docker.com\u002Freference\u002F",[62],[10,401,403],{"id":402},"x-初期設定",[14,404,405],{},"X. 初期設定",[18,407,408],{},"ステップ１: AWSのEC2にアクセス",[28,410,411,414],{},[31,412,413],{},"Tera Termツールを開く",[31,415,416],{},"HostにホストサーバIPを入力",[89,418],{"className":419,"alt":94,"src":420,"style":421},[92,93],"https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F04163035\u002Fhost-teraterm.png","width: 80%;",[28,423,424],{},[31,425,426,427],{},"usernameとkeyに入力してから、OKボタンを押下する\n",[89,428],{"className":429,"alt":94,"src":430,"style":431},[92,93],"https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F04163312\u002Fkey-teraterm.png","width: 60%;",[89,433],{"className":434,"alt":94,"src":435,"style":421},[92,93],"https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F04163531\u002FTerminal.png",[18,437,438],{},"ステップ２: Dockerをインストール",[18,440,441],{},"1. あなたのインステンスでパッケージを更新",[232,443,446],{"className":444,"code":445,"language":237},[235],"sudo yum update -y\n",[239,447,445],{"__ignoreMap":94},[18,449,450],{},"2. Dockerをインストール",[232,452,455],{"className":453,"code":454,"language":237},[235],"sudo yum install docker -y\n",[239,456,454],{"__ignoreMap":94},[18,458,459],{},"3. Dockerサービスを起動",[232,461,464],{"className":462,"code":463,"language":237},[235],"sudo service docker start\n",[239,465,463],{"__ignoreMap":94},[18,467,468],{},"4. ec2-userをdockerグループに追加して、sudoを使用せずにDockerコマンドを実行できるようにします。",[232,470,473],{"className":471,"code":472,"language":237},[235],"sudo usermod -a -G docker ec2-user\n",[239,474,472],{"__ignoreMap":94},[18,476,477],{},"ステップ３: GITの設定",[18,479,480],{},"1.  Gitをセットアップ",[232,482,485],{"className":483,"code":484,"language":237},[235],"sudo yum install git\n",[239,486,484],{"__ignoreMap":94},[18,488,489],{},"2.  デプロイを行いたいソースコードをGitからClone\u002Fpullする",[232,491,494],{"className":492,"code":493,"language":237},[235],"git clone https:\u002F\u002FusernameToken:passwordToken@gitlab.com\u002F\u003Cproject name>\u002F\u003Cgit name>.git\nまたは\ngit pull origin develop\n",[239,495,493],{"__ignoreMap":94},[18,497,498,499,504],{},"** usernameTokenはDeployToken名であって、passwordTokenは文字のランダムな文字列からGitで自動に作成する。(",[58,500,503],{"href":501,"rel":502},"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fuser\u002Fproject\u002Fdeploy_tokens\u002F",[62],"こちらを参照",").",[10,506,508],{"id":507},"xi-デプロイ",[14,509,510],{},"XI. デプロイ",[18,512,513],{},"1. ソースコード格納しているフォルダに移動",[232,515,518],{"className":516,"code":517,"language":237},[235],"cd \u003Cプロジェクトフォルダ>\n",[239,519,517],{"__ignoreMap":94},[18,521,522],{},"ソースのDockerfile-devファイルは以下により設定されること",[232,524,527],{"className":525,"code":526,"language":237},[235],"# Check out https:\u002F\u002Fhub.docker.com\u002F_\u002Fnode to select a new base image\nFROM node:12-alpine\nRUN apk add git\n    \n# Set to a non-root built-in user `node`\nUSER node\n    \n# Create app directory (with user `node`)\nRUN mkdir -p \u002Fhome\u002Fnode\u002Fapp\nWORKDIR \u002Fhome\u002Fnode\u002Fapp\n    \nENV NODE_ENV=\"\u003C環境名>\"\nENV PORT=\"3334\" ENV DEBUG=\"front:*\"\nENV SESSION_SECRET=\"session-secret\"\n    \n# Install app dependencies\n# A wildcard is used to ensure both package.json AND package-lock.json are copied\n# where available (npm@5+)\nCOPY package*.json .\u002F\nRUN npm install\n    \n# Bundle app source code\nCOPY . .\n    \n# Bind to all network interfaces so that it can be mapped to the host OS\nENV HOST=0.0.0.0 PORT=3334\nEXPOSE $PORT\nCMD [ \"node\", \".\" ]\n",[239,528,526],{"__ignoreMap":94},[18,530,531],{},"2. Imageソースをビルド",[18,533,534,537],{},[239,535,536],{},"docker build --no-cache -t \u003CImage名> -f Dockerfile.dev ."," (開発環境用)",[18,539,540],{},"* -t : Imageタグのオプション",[18,542,543],{},"* . : ソースフォルダ",[18,545,546],{},"* --no-cache: キャッシュ保存しない",[18,548,549],{},"3. ImageソースでContainerを起動",[232,551,554],{"className":552,"code":553,"language":237},[235],"docker run -dp \u003Cホスト·ポート>:\u003CContainerポート> --name \u003CContainer名> \u003CImage名>\n",[239,555,553],{"__ignoreMap":94},[18,557,558],{},"* --name: Container名を設定。名前は一意です。そうでない場合は、dockerが生成します。",[18,560,561],{},"* -p: containerポートを開く.",[18,563,564],{},"* -d: バックグラウンドモードをターンオン",[18,566,567],{},"4. nginxフォルダにアクセス",[232,569,572],{"className":570,"code":571,"language":237},[235],"cd nginx\n",[239,573,571],{"__ignoreMap":94},[18,575,576],{},"nginxフォルダ中にdefault.confとDockerfileファイルを含めている default.confファイル：",[232,578,581],{"className":579,"code":580,"language":237},[235],"server {\n    location \u002F {\n          proxy_set_header Host $host;\n          proxy_set_header X-Real-IP $remote_addr;\n          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n          proxy_set_header X-Forwarded-Proto $scheme;\n          proxy_pass http:\u002F\u002Fapp:3334;\n    }\n}\n",[239,582,580],{"__ignoreMap":94},[18,584,585],{},"Dockerfileファイル",[232,587,590],{"className":588,"code":589,"language":237},[235],"FROM nginx\nRUN rm \u002Fetc\u002Fnginx\u002Fconf.d\u002F* \nCOPY default.conf \u002Fetc\u002Fnginx\u002Fconf.d\u002F\n",[239,591,589],{"__ignoreMap":94},[18,593,594],{},"5. ソース用Image nginxをビルド",[232,596,599],{"className":597,"code":598,"language":237},[235],"docker build -t es\u002Fnginx .\n",[239,600,598],{"__ignoreMap":94},[18,602,603],{},"6. es\u002FnginxのContainerを起動",[232,605,608],{"className":606,"code":607,"language":237},[235],"docker run -dp 80:80 --link \u003CContainer名>:app --name nginx-proxy es\u002Fnginx\n",[239,609,607],{"__ignoreMap":94},[18,611,612],{},"ステップ３: ImageとContainerを表示",[28,614,615],{},[31,616,617],{},"imageリスト",[89,619],{"className":620,"alt":94,"src":621,"style":96},[92,93],"https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F28122425\u002Fimages-ec2.png",[28,623,624],{},[31,625,626],{}," containerリスト",[89,628],{"className":629,"alt":94,"src":630,"style":96},[92,93],"https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F28122548\u002Fcontainer-ec2-1024x87.png",[18,632,633],{},"ステップ4：Websiteにアクセス",[89,635],{"className":636,"alt":94,"src":637,"style":96},[92,93],"https:\u002F\u002Fs3-ap-southeast-1.amazonaws.com\u002Fhomepage-media\u002Fwp-content\u002Fuploads\u002F2021\u002F01\u002F28122802\u002Flogin-ec2-1024x490.jpg",[10,639,641],{"id":640},"xi-参照","XI. 参照",[18,643,644],{},[58,645,60],{"href":60,"rel":646},[62],[18,648,649],{},[58,650,398],{"href":398,"rel":651},[62],[18,653,654],{},[58,655,656],{"href":656,"rel":657},"https:\u002F\u002Fdocs.docker.com\u002F",[62],[18,659,660],{},[58,661,662],{"href":662,"rel":663},"https:\u002F\u002Fegghead.io\u002Flessons\u002Fnode-js-setup-an-nginx-proxy-for-a-node-js-app-with-docker",[62],{"title":94,"searchDepth":665,"depth":665,"links":666},2,[667,668,669,670,671,672,673,674,675,676,677,678],{"id":12,"depth":665,"text":16},{"id":23,"depth":665,"text":26},{"id":51,"depth":665,"text":54},{"id":66,"depth":665,"text":69},{"id":75,"depth":665,"text":78},{"id":84,"depth":665,"text":87},{"id":180,"depth":665,"text":183},{"id":243,"depth":665,"text":246},{"id":309,"depth":665,"text":312},{"id":402,"depth":665,"text":405},{"id":507,"depth":665,"text":510},{"id":640,"depth":665,"text":641},"tech talk","Briswell Vietnam Co Ltd","2021-03-18","I. Dockerは何？Dockerとは、アプリケーションを開発・配置 ・デプロイ・実施するためのオープンソースプラットフォームです。Dockerを使用すると、アプリケーションをインフラストラクチャから分離できるため、ソフトウェアを迅速に配信できます。 アプリケーションを管理するのと同じ方法でインフラストラクチャを管理できます。 コードを迅速にデプロイ、配置 、テスト、デプロイするためのDockerの方法論を利用することで、コードの書きから本番環境での実行までの遅延を大幅に減らすことができます。","md",{},true,"\u002Fja\u002Fnews\u002Flaunch-with-docker",null,{"title":5,"description":682},"ja\u002Fnews\u002Flaunch-with-docker","https:\u002F\u002Fhomepage-media.s3.ap-southeast-1.amazonaws.com\u002Fwp-content\u002Fuploads\u002F2026\u002F06\u002F05103100\u002Flogo-docker.png","Y7Z1EwUDcq17tmhvFQa8-NekhpDQIG1JjTZH-gv4dLo",1783674948175]