20220115のdockerに関する記事は10件です。

今使ってるLinuxをDockerイメージ化する

はじめに Dockerfileで宣言するFROM centos:7などのベースイメージは公式で配布するもの使用するのが一般的ですが、こういったベースイメージは実は自前の物を使う事もできます1。今回は自分が使用しているシステムをそのままDockerイメージ化する方法をまとめて置きます。 Dockerイメージの作り方 Linuxでベースイメージを作るにはそのままで稼働できるファイルの群れ、すなわちルートファイルシステム2が必要です。今回は使用中のLinuxシステムをそのままイメージ化することが目的なのでシステム自体を圧縮してファイル化します。 1. 全体のシステムをコピーする rsyncを使ってシステムのスナップショットを作ります。その時、/dev, /proc/, /sys/, /run, /mntは現在のマシーンに依存するディレクトリーなので除外します。 下記の例では/mnt/copyにシステムをコピーします。 rsync -avz /* /mnt/copy/ --exclude '/dev' --exclude '/proc' --exclude '/sys' --exclude '/run' --exclude '/mnt' 2. 除外したディレクトリーを生成する 除外したディレクトリーもまたシステムに必要なものなので空のディレクトリーを生成します。 mkdir /mnt/copy/sys /mnt/copy/dev /mnt/copy/proc /mnt/copy/run /mnt/copy/mnt 3. tar.gzに圧縮する 軽量化のためにtar.gzを使います。また、この時、ルートが/になるようにすることが重要です。今回は /mntの中で-Cオプションを使いました。 cd /mnt tar -czvf my-linux.tar.gz -C copy . 4. Tarballを使ってイメージを作る Tarballをそのままimportする方法3とDockerfile1を使う方法があります。 Tarballをそのまま取り入れる docker import my-linux.tar.gz Dockerfileでイメージをビルドする Dockerfile FROM scratch ADD my-linux.tar.gz / CMD ["/bin/bash"] docker build --tag my-linux:lastet . Create a base image, https://docs.docker.com/develop/develop-images/baseimages/ ↩ root ファイルシステム, https://www.ibm.com/docs/ja/aix/7.2?topic=tree-root-file-system ↩ docker import, https://docs.docker.com/engine/reference/commandline/import/ ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Docker】コマンドメモ

いつも必要になるたびに調べている docker のコマンドをメモしたい。 なので、自分のメモのためにこの投稿を作りました。 イメージやコンテナの整理 コンテナを全削除する $ docker ps -aq | xargs docker rm イメージを全削除する $ docker images -aq | xargs docker rmi 改行コードについて この記事が素晴らしすぎた。 そのほか自分の過去のメモ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker コマンドチートシート

はじめに 自分用にチートシートっぽく書いています(勉強中なので間違った情報が記載されているかもしれません)。 随時追記するかも。。 ビルド Dockerfileがある階層で実行  →  イメージが作成される % docker build . ビルド(Name&Tag付き) % docker build -t {Name}:{Tag} . コンテナ情報一覧(起動コンテナ) % docker ps コンテナ情報一覧(すべてのコンテナ) % docker ps -a コンテナを作成+起動 % docker run {コンテナ名} コンテナ起動 作成済みのコンテナを起動する % docker start {コンテナ名} コンテナ作成+起動(名前付き) % docker run --name {名前} {イメージ名} コンテナ停止 % docker stop {コンテナ名} コンテナ削除 コンテナが停止していないと削除できない % docker rm {コンテナ名} イメージ情報一覧 % docker images イメージの詳細取得 % docker image inspect {IMAGE_ID} イメージ削除 % docker rmi {IMAGE_ID} イメージ削除(使用されていないイメージの削除) 一括で削除される % docker image prune イメージIDからコンテナ起動→停止時にコンテナ削除 コンテナを停止する際に、自動的にコンテナの削除を行なってくれる % docker run --rm {IMAGE_ID} コンテナにファイル(フォルダー)を追加 % docker cp {追加したいファイル名} {コンテナ名}:{保存先ディレクトリー} コンテナから特定のファイル(フォルダー)を取得 % docker cp {コンテナ名}:{取得したいファイルのディレクトリー} {対象ファイル名} イメージのName,Tag修正 !修正前のイメージは残る! % docker tag {既存のName}:{既存のTag} {修正後のName}:{修正後のTag} ボリューム一覧 % docker volume ls ボリューム削除 % docker volume rm {ボリューム名} Docker Hub編 Docker Hubへpush・pullを行う。 予めアカウントを作成して、リポジトリを作成する(以下のコマンドの挙動確認を行うのにはFree版でOK)。 push pushしたいイメージの{REPOSITORY名}をDocker Hub側で作成したユーザー名とリポジトリ名で合わせる必要がある 例えば、作成したユーザー名がtaroでリポジトリ名がtest-repoの場合はpushするイメージの{REPOSITORY名}はtaro/test-repoである必要がある。 % docker login % docker push {ユーザー名}/{リポジトリ名} pull デフォルトでlatestがpullされる % docker pull {ユーザー名}/{リポジトリ名}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Go(Gin)✕Docker✕delve✕vsCodeでデバッグできるようにする最小構成】

ディレクトリ構成 Goアプリケーションはapplicationディレクトリ以下にある。 *(アスタリスク)で囲んでいるファイルがポイント。 . ├── .vscode │   └── **launch.json** ├── README.md ├── application │   ├── **Dockerfile** │   ├── controllers │   ├── db │   ├── go.mod │   ├── go.sum │   ├── main.go │   ├── models │   ├── server │   ├── services │   ├── **start.sh** │   ├── tests │   ├── tmp │   └── vendor ├── **docker-compose.yml** └── tmp docker-compose 8080:8080はもともとあったアプリケーション用のport。 2345:2345をデバッガ用のportとして追記。 version: '3' services: api: ports: - 8080:8080 - 2345:2345 Dockerfile FROM golang:1.16 WORKDIR /go/src/app/application COPY go.mod ./ COPY go.sum ./ RUN go mod download COPY . . EXPOSE 8080 COPY start.sh /usr/local/bin/start.sh RUN chmod 775 /usr/local/bin/start.sh CMD ["start.sh"] start.sh DEBUG=dap DEBUG_PORT=2345 docker compose up -d このコマンドでデバッグのためのコマンドを実行してくれる。 (環境変数によって処理を分岐) コマンドの詳しい意味は参考記事を閲覧してください。 #!/bin/bash # DEBUG=dap DEBUG_PORT=2345 docker compose up -d でリモート接続用コマンドを実行できる if [ "${DEBUG}" = "dap" ];then go build -gcflags='all=-N -l' -o app dlv dap -l 0.0.0.0:${DEBUG_PORT} --log --check-go-version=false elif [ "${DEBUG}" = "rpc" ]; then dlv debug --continue --check-go-version=false --accept-multiclient --headless -l 0.0.0.0:${DEBUG_PORT} main.go else go run main.go fi launch.json 参考にした記事ほど複雑な設定をせずともデバッグを開始できました。 { "version": "0.2.0", "configurations": [ { "name": "Launch Package", "type": "go", "request": "launch", "mode": "auto", "program": "${fileDirname}" } ] } コンテナがしっかり立ち上がるまで待たないとビルドエラーみたいなのがでて混乱するので、コンテナ立ち上がり後はしっかり待つようにしたほうがいいです。(せっかちなので困惑しました) 参考記事
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

kubeadmin join が動かない (kubelet isn't running or healthy.)

Kubernetes に node を追加する際に sudo kubeadm join とするも以下のエラーでうまく動作しなかった際のメモです。 [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... [kubelet-check] Initial timeout of 40s passed. [kubelet-check] It seems like the kubelet isn't running or healthy. [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused. syslog を良く見るとこんなエラーが。 "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\"" 動いているものと見比べた結果以下のような設定を追加することで解決しました。ここに情報がありました。 /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } うーん、前にインストールした時はこんな設定追加した覚え無いんだけどな・・・。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dockerのコンテナーに入るコマンド

docker exec 実行中のコンテナでコマンドを実行 docker exec -it コンテナID bashShell 例:docker exec -it ubuntu_bash bash docker attach 実行中のコンテナにアタッチする docker attach コンテナID 例:docker attach test execとattach区別 execでコンテナに入り : 新しターミナル開くため、コンテナ停止せず、exitする attachでコンテナに入り: 直接コンテナに入るため、コンテナを停止して、exitする
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Nuxt.js+TypeScript+Composition APIの開発環境をDockerで構築

環境 MacOS:11.5.2 Nuxt.js:2.14.12 CompositAPI:^1.4.3 Node.js:16.13.2 docker:20.10.7 docker-compose: 1.29.2 ディレクトリ構成(完成後) project ├── README.md ├── application │ ├── assets │ ├── components │ ├── layouts │ ├── middleware │ ├── node_modules │ ├── nuxt.config.ts │ ├── package-lock.json │ ├── package.json │ ├── pages │ ├── plugins │ ├── static │ ├── store │ └── tsconfig.json ├── docker │ └── Dockerfile └── docker-compose.yml nuxtプロジェクトを生成 ルートディレクトリを作成し移動 mkdir project cd project nuxtアプリケーションを生成 npx create-nuxt-app application ##設定情報 ? Project name: project_name ? Programming language: TypeScript ? Package manager: Npm ? UI framework: Vuetify.js ? Nuxt.js modules: Axios - Promise based HTTP client ? Linting tools: ESLint ? Testing framework: None ? Rendering mode: Single Page App ? Deployment target: Server (Node.js hosting) ? Development tools: jsconfig.json (Recommended for VS Code if you're not using typescript) ? Continuous integration: None ? Version control system: Git 参考:https://nuxtjs.org/ja/docs/get-started/installation 設定についての補足 - Programming language:TypeScriptを選択 - Package manager:npm、yarnお好みで選択 - UI framework:勉強のためVuetify.jsを選択 - Testing framework:使用するフレームワーク未定のめ選択せず - Rendering mode:SSRは必要ではないためSPAを選択 - Development tools:typescriptを使用するため、jsconfig.jsonは不要 動作確認 Dockerで構築するため不要だが、一応確認。 cd application npm run dev (中略) ╭───────────────────────────────────────╮ │ │ │ Nuxt @ v2.15.8 │ │ │ │ ▸ Environment: development │ │ ▸ Rendering: client-side │ │ ▸ Target: server │ │ │ │ Listening: http://localhost:3000/ │ │ │ ╰───────────────────────────────────────╯ ℹ Preparing project for development 12:11:06 ℹ Initial build may take a while 12:11:06 ℹ Discovered Components: .nuxt/components/readme.md 12:11:06 ✔ Builder initialized 12:11:06 ✔ Nuxt files generated 12:11:06 ✔ Client Compiled successfully in 6.68s ℹ Waiting for file changes 12:11:15 ℹ Memory usage: 375 MB (RSS: 497 MB) 12:11:15 ℹ Listening on: http://localhost:3000/ 12:11:15 No issues found. localhost:3000にアクセスし、nuxtプロジェクトが立ち上がっていることを確認。 Typescript対応 nuxt.config.jsをnuxt.config.tsへ変更 公式ドキュメント参考 https://typescript.nuxtjs.org/ja/ 拡張子を.tsに変更。 記述方法が.jsのままでエラーが出るため下記を変更。 nuxt.config.js(変更前) import colors from 'vuetify/es5/util/colors' export default { // (中略) } nuxt.config.ts(変更後) import colors from 'vuetify/es5/util/colors' // 追記 import { NuxtConfig } from '@nuxt/types' // 変更 const config: NuxtConfig = { // (中略) } // 追記 export default config tsconfig.jsonの編集 Vuetifyの型定義ファイルの読み込みエラーが発生するので、tsconfig.josnの型定義にvuetifyを追加する。 application/tsconfig.json "types": [ "@nuxt/types", "@nuxtjs/axios", "@types/node", "vuetify" // 追記 ] Composition APIをnuxt.jsに導入 参考:https://typescript.nuxtjs.org/ja/ applicaitonフォルダ直下で下記のコマンドを実行 Composition APIをインストール npm install @vue/composition-api プラグインのインストール nuxt.jsプロジェクト内で@vue/composition-apiプラグインを使用する必要があるため、プロジェクト内でプラグインの使用を宣言する。 application/pluginsの直下に「composition-api.js」を作成。 application/plugins/composition-api.js import Vue from 'vue' import VueCompositionApi from '@vue/composition-api' Vue.use(VueCompositionApi) nuxt.config.tsで@vue/composition-apiプラグインを登録する。 application/nuxt.config.ts const config: NuxtConfig = { // (中略) plugins: ['@/plugins/composition-api'] } 動作確認 CompositionAPIを使ったVueコンポーネントを試しに作成する。 application/views直下に「composition.vue」を作成。 application/views/composition.vue <template> <div> Name: {{ fullName }} <br> Message: {{ message }} </div> </template> // typescriptを使用するため lang="ts"とする。 <script lang="ts"> // composition APIを使用するためのインポート import { defineComponent, computed, ref } from '@vue/composition-api' interface User { firstName: string lastName: string } export default defineComponent({ setup () { const user: User = { firstName: 'yamada', lastName: 'taro' } const fullName = computed(() => `${user.firstName} ${user.lastName}`) const message = ref('Composition test') return { fullName, message } } }) </script> 参考:https://typescript.nuxtjs.org/ja/cookbook/components/ npm run devで開発サーバを立ち上げた後、「http://localhost:3000/composition 」にアクセスし、NameとMessageが表示されていることを確認。 Dockerで開発環境を構築する Dockerfileの作成 application/docker直下に、Dockerfileを作成 application/docker/Dockerfile # 公式で最新の最新の LTS バージョンがインストールを推奨とあったので、最新のLTSのイメージを使用 # https://nodejs.org/en/ FROM node:16.13.2-alpine # ADDやCOPY、CMDを実行するフォルダを指定 # 指定しないと、package.jsonのインストール時にエラーになる WORKDIR /var/www RUN apk update # Macのlocalhostからdockerコンテナにアクセスするために必要 ENV HOST 0.0.0.0 # 待ち受けポートを明示 EXPOSE 3000 docker-compose.ymlの作成 applicationフォルダ直下に「docker-compose.yml」を作成 application/docker-compose.yml version: "3" services: web-front: build: ./docker container_name: web-front networks: - web-network volumes: - ./application:/var/www/ - node-modules:/var/www/node_modules ports: - "3000:3000" restart: always tty: true command: sh -c "npm install && npm run dev" networks: web-network: volumes: node-modules: それぞれの設定についてメモ # buildに使用するDockerfileの相対パス build: ./docker # 必須ではないが、生成されるコンテナ名を毎回同じにしたいため指定 container_name: web-front # ゆくゆくはバックエンド側のコンテナと通信を行いたいため指定 networks: web-network # nuxtプロジェクトをDockerfileで指定したWORKDIRにマウント # node_modulesを保存しておくためのvolumeを指定 volumes: - ./application:/var/www/ - node-modules:/var/www/node_modules # web-networkのポートとコンテナの待ち受けポートをマッピング # nuxtはデフォルトで3000ポートを使用 ports: - "3000:3000" # コンテナの軌道に失敗した場合、リスタートするよう設定 restart: always # コンテナの出力を標準出力に出力するために設定 tty: true # コンテナ起動後に実行するコマンド command: sh -c "npm install && npm run dev" ※dockerは勉強不足のため、間違っていたらアドバイスいただけると嬉しいです。 動作確認 docker-compose.ymlのあるディレクトリで下記コマンドを実行 docker-compose up コンテナ上で開発サーバが立ち上がったのを確認したら「localhost:3000/」へアクセスし、nuxtプロジェクトのトップ画面が表示されるのを確認。 githubにプッシュする applicationフォルダに.gitがあるため、削除 ※ルートディレクトリ直下に.gitを生成するため、削除をしておかないとgit addでエラーとなる cd application rm -rf .git Githubでプッシュするリポジトリを作成。 作成すると、Githubのリポジトリへのpush方法が案内されるので、ルートディレクトリ直下で案内にしたがってコマンドを実行。 参考までに echo "# project" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin git@github.com:{githubID}/{プロジェク名}.git git push -u origin main 以上。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでRails 6 + postgresの開発環境構築

DockerでRails6の開発環境を構築するときにやったこと。 対象 dockerについてなんとなく知っていて、これからrails,postgreでwebアプリの開発環境を用意しようとしている方向けです。 自分の備忘録も兼ねて書いてみました。 環境 ホスト環境 macOS Caterina 10.15.5 Docker version 20.10.2 構築しようとする環境 ruby 2.7 postgresql 10.7 rails 6.1.1 rails用のDockerfileの作成 Dockerfileの作成します。DockerfileとはDockerイメージを実行する際に実行するコマンドをまとめたものです。 $ touch Dockerfile 上記で作成したDockerfileに以下のコマンドをお好きななエディタで記述していきます。 まずはベースとなるイメージを設定します。ベースはruby2.7のイメージを使用し、nodeのイメージは後ほど使用します。 また、環境変数LANGを設定します。 Dockerfile FROM node:14.10 AS node FROM ruby:2.7 ENV LANG "C.UTF-8" mysqlを削除して、postgresqlをインストールします。 Dockerfile RUN apt-get update -qq && \ apt-get remove -y --purge mysql\* && \ apt-get install -y build-essential libpq-dev postgresql-client && \ rm -rf /var/lib/apt/lists/* コンテナの起動順を制御するために、dockerizeをインストールします。 Dockerfile ENV DOCKERIZE_VERSION v0.6.1 RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz コンテナ起動時に実行するコマンドを指定するためにentrykitをインストールします。 Dockerfile ENV ENTRYKIT_VERSION 0.4.0 RUN wget https://github.com/progrium/entrykit/releases/download/v${ENTRYKIT_VERSION}/entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz \ && tar -xvzf entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz \ && rm entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz \ && mv entrykit /bin/entrykit \ && chmod +x /bin/entrykit \ && entrykit --symlink 日本語フォントのインストールをします。 Dockerfile RUN cd /tmp && \ mkdir noto && \ curl -O -L https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip && \ unzip NotoSansCJKjp-hinted.zip -d ./noto && \ mkdir -p /usr/share/fonts/noto && \ cp ./noto/*.otf /usr/share/fonts/noto/ && \ chmod 644 /usr/share/fonts/noto/*.otf && \ fc-cache -fv && \ rm -rf NotoSansCJKjp-hinted.zip ./noto yarnとnodeをnodeイメージからコピーし、シンボリックリンクの設定を行います。 Dockerfile ENV YARN_VERSION 1.22.5 COPY --from=node /opt/yarn-v$YARN_VERSION /opt/yarn COPY --from=node /usr/local/bin/node /usr/local/bin/ RUN ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg ワークディレクトリを作成します。 Dockerfile ENV APP_ROOT "/hoge_app" RUN mkdir $APP_ROOT WORKDIR $APP_ROOT 上記でインストールしたentrykitのprehookという機能を使用し、コンテナ起動前に時刻したいコマンドを設定します。 Dockerfile ENTRYPOINT [ \ "prehook", "ruby -v", "--", \ "prehook", "dockerize -timeout 60s -wait tcp://hoge_postgresql:5432", "--", \ "prehook", "bundle install -j4 --quiet", "--", \ "prehook", "yarn install --ignore-optional", "--" ] postgresql用のDockerfileの作成 Dockerfileの作成を行います。 $ mkdir docker $ mkdir docker/db $ touch docker/db/Dockerfile postgresqlのイメージをベースとして使用します。さらに言語の設定をします。 docker/db/Dockerfile FROM postgres:10.7 RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 ENV LANG ja_JP.utf8 docker-compose.ymlの作成 docker-compose.ymlを作成します。 Docker composeとはDockerのビルドや複数のコンテナの起動を簡単なコマンドで行えるようしたものです。docker-compose.ymlにdockerイメージをビルドするために使用するDockerfileの情報や起動するコンテナの情報などを記述します。 $ touch docker-compose.yml 上記で作成したdocker-compose.ymlに以下の内容を記述していきます。 railsが動くコンテナの設定をします。ここではDockerfileのパス(build)や、実行するコマンド(command)、環境変数(environment)、永続化するディレクトリ(volumes)、ポート番号(ports)を設定します。depends_onは起動順を指定します。このコンテナはpostgresqlコンテナの後に起動します。コンテナの外から入出力できるようにするためにstdin_openとttyをtrueに設定します。 ちなみにvolumesで設定した永続化するディレクトリはローカル環境をマウントすることによって実現されています。ここでcashedというオプションを使用している部分がありますが、これはMacでdockerを動かし開発する際に、ボリュームをマウントする際に動作が非常に遅くなるという問題を解決するために使用しています。ここで注意しなければいけないのは、cashedを使用したボリュームはホストからの見え方は信頼できますが、コンテナからの見え方は遅延が発生します。 docker-compose.yml version: '3' services: rails: &app_base build: . container_name: hoge_rails command: ["rails", "s", "-p", "3000", "-b", "0.0.0.0"] environment: RAILS_ENV_NAME: development DATABASE_HOST: hoge_postgresql WEBPACKER_DEV_SERVER_HOST: webpack WEBPACKER_DEV_SERVER_PUBLIC: webpack:3035 depends_on: - postgresql ports: - "127.0.0.1:3000:3000" stdin_open: true tty: true volumes: - .:/hoge_app:cached - node_modules:/hoge_app/node_modules - bundle:/usr/local/bundle - vendor - tmp - log - .git webpackerが動くコンテナを設定します。Dockerfileはrailsコンテナと同じものを使用しています。 docker-compose.yml webpack: <<: *app_base container_name: hoge_webpack command: "bin/webpack-dev-server" environment: NODE_ENV: development WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 ports: - '127.0.0.1:3035:3035' depends_on: - rails tty: false stdin_open: false postgresqlが動くコンテナを設定します。 docker-compose.yml postgresql: build: context: docker/db container_name: hoge_postgresql ports: - 5432:5432 volumes: - ./docker/db/volumes:/var/lib/postgresql/data:cached environment: POSTGRES_USER: root POSTGRES_PASSWORD: root hostname: postgres restart: always user: root ビルドしてコンテナを立ち上げる 作成したdocker-compose.ymlを使用してビルドを行います。 $ docker-compose build rails環境を構築 Gemfileを作成し以下を記述します。 $ touch Gemfile Gemfile source 'https://rubygems.org' gem 'rails', '~>6' rails newをします。途中、Gemfileを上書きするか聞かれるのでyと入力します。 $ docker-compose run rails rails new . --database=postgresql config/database.ymlを書き換えます。 config/datebase.yml default: &default adapter: postgresql charset: UTF8 encoding: UTF8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('DATABASE_USERNAME', 'root') %> password: <%= ENV.fetch('DATABASE_PASSWORD', 'root') %> host: <%= ENV.fetch('DATABASE_HOST', 'hoge_postgresql') %> database: <%= ENV['DATABASE_NAME'] %> development: <<: *default database: hoge_app_development test: <<: *default database: hoge_app_test production: <<: *default database: hoge_app_production username: hoge_app password: <%= ENV['HOGE_APP_DATABASE_PASSWORD'] %> DBを作成します。 $ docker-compose run rails rails db:create コンテナを立ち上げます。 $ docker-compose up -d ブラウザでlocalhost:3000を開きます。 「Yay! You’re on Rails!」が表示されれば成功です。 参考にしたサイト https://qiita.com/minamijoyo/items/711704e85b45ff5d6405 http://www.tohoho-web.com/docker/dockerfile.html https://laptrinhx.com/rails6nodocker-compose-huan-jingwowebpackermade-hanmete-gou-zhusuru-2906065143/ https://www.pressmantech.com/tech/6522 https://hfuji.hatenablog.jp/entry/2019/06/01/102617
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Amplifyの開発環境をdockerで作成

概要 AWS Amplifyの開発環境のdocker-compose.ymlとDockerfileを作成しました。 なぜ作ったか? 久しぶりにローカルでAmplifyでの開発を行おうとすると、nodeやpythonが古かったり、amplify pushにはpipenv、pip3が必要だと言われたりで環境を整えるのに時間がかかってしまったので、開発環境のdocker化を行いました。 前提条件 amplifyでの開発をローカル環境で行なっている。 Dockerfileの作成 node.jsとpythonが入っているイメージを使用します。 Dockerfile FROM nikolaik/python-nodejs:python3.8-nodejs12 # amplify CLI RUN npm install -g @aws-amplify/cli WORKDIR /var/www/app docker-compose.ymlの作成 docker-compose.yml version: '3' services: amplify: build: ./ ports: - "8080:8080" - "20002:20002" volumes: - .:/var/www/app - ~/.aws/:/root/.aws/ tty: true command: "npm run serve" ビルドとコンテナ立ち上げ 上記の2ファイルをローカル環境のamplifyプロジェクトの直下におきます。 $ docker-compose build でビルドして $ docker-compose up でコンテナを立ち上げればローカル環境が立ち上がります。 この状態でlocalhost:8080をブラウザで開くと、起動を確認できます。 $ docker-compose exec amplify bash でコンテナの中に入り、 amplify pushを叩くこともできました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LimaでDocker

LimaというVM環境でDockerを構築する。 https://github.com/lima-vm/lima 検証環境 Mac OS Monterey 12.1 MacBook Pro (Intel CPU) HomeBrew インストール済み 必要なパッケージをインストール brew install lima docker インストールが完了するとlimactlというコマンドが使用可能になる limactl --version 追加で入れておきたいパッケージをインストール brew install docker-compose docker.yamlを用意する 構築用のyamlを適当なディレクトリにdocker.yamlという名前で作成。 バージョンによって推奨する内容が微妙に変わるようなので、以下のURLへアクセスして内容をdocker.yamlという名前でファイルとして保存する。 github /lima-vm/lima/examples/docker.yaml https://github.com/lima-vm/lima/blob/master/examples/docker.yaml もしくは、wgetを使って以下のようにファイルをダウンロードする。 wget https://github.com/lima-vm/lima/raw/master/examples/docker.yaml docker.yamlに追記 リソースを変更 docker.yamlに以下を追記してリソースを変更。 cpus: 2 memory: "8GiB" disk: "100GiB" ssh関係 docker.yamlに以下を追記してエラー回避。 ~/.sshのディレクトリ以下のファイル関係で問題がある場合、loadDotSSHPubKeysをfalseにしておかないとlimactl startコマンドでINFO[0003] [hostagent] Waiting for the essential requirement 1 of 5: "ssh"のループに陥る。 ssh: loadDotSSHPubKeys: false また、ポートを指定する場合は、上記に追記してポート番号を指定する ssh: loadDotSSHPubKeys: false localPort: 60006 実行 以下を実行して構築。 limactl start ./docker.yaml # --debugをつけると、エラーが発生した際に原因がわかりやすくなる # limactl start ./docker.yaml --debug 確認 構築出来ているか確認する limactl ls NAME STATUS SSH ARCH CPUS MEMORY DISK DIR docker Running 127.0.0.1:60006 x86_64 2 8GiB 100GiB /Users/ユーザ名/.lima/docker 仮想マシンに入る Dockerが構築されている仮想マシンに直接入るには、以下のコマンドを実行する。 入ったあとはexitで仮想マシンから出る。 limactl shell docker DOCKER_HOST 環境変数 .zshrcや.zprofile(MacOSのバージョンによっては.bash_profile)に DOCKER_HOST環境変数を追記して、Dockerのベースをlimaの仮想マシンで使用するように変更する。(Limaのバージョンによっては内容が少々変わる可能性がある) export DOCKER_HOST=unix:///${HOME}/.lima/docker/sock/docker.sock テスト nginxを構築 試しにnginxを構築 docker run --name nginx_test -d -p 8080:80 nginx http://localhost:8080/でnginxにアクセス出来るようになる。 nginxを削除 docker stop $(docker ps -aqf "name=nginx_test") docker rm $(docker ps -aqf "name=nginx_test")
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む