20210915のdockerに関する記事は8件です。

/usr/bin/env: 'ruby\r': No such file or directory

経緯 mac で動いていたdockerfileをwindows端末で動かそうとすると表題のエラーが出たため解決方法を記載する。 原因 Windows で作成したスクリプトを Unix 環境で実行すると command not found や No such file or directory など予期せぬエラーが出る場合があります。これらの大抵の原因は改行コードによるものです。Windows 側で指定しなければデフォルトでは CR+LF で保存されます。狭義での"改行"とは Unix でも標準である LF のみです。 解決方法 ステータスバーに表示されている改行コード(CRLF)をクリックしてLFに変更する。 私の場合は、作成していたrailsアプリのentrypoint.shと、bin\railsの2ファイルの改行コードを変更することになった。 vscodeのデフォルトの改行コードの設定をautoから¥nに変更する。 デフォルトの改行コードを変更するには、ユーザー設定/ワークスペース設定でfiles.eol項目を変更する。設定エディタで「files.eol」あるいは「eol」を検索して、その値を"\n"か"\r\n"に指定する。 ただし、これは既存のファイルの改行コードを変更してくれるものではなく、新規に作成するファイルの改行コードを規定するものであることには注意しよう。既存のファイルの改行コードを変更するには、上に示した方法を使用する必要がある。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerを使ってLivebookとGrafanaをサーバ上でイゴかす(もちろんHTTPS)

はじめに Dockerを使って、LivebookとGrafanaをサーバ上でイゴかします1 LivebookはElixirで楽しめるノートブックです Grafanaは全然わかっていませんが、https://github.com/nginx-proxy/acme-companion/tree/7f1b75460d2a4ba9aa81e6da06c3119b41ef94db#readme のサンプルで使われていたのでそのまま使ってみました ホスト名とIPアドレスの紐付けはこの記事では書いていません Google Domains、お名前.com等お使いのサービスのDNS設定にてAレコードを登録しておいてください できあがったもの どうぞご自由にお使いください Time4VPSのLinux VPS - Linux 2 でイゴかしています RAM: 2GB OS: Ubuntu 20.04 LTS 月額 3.99EUR だれも使っていないであろう状態でメモリは以下のようになっていました $ free -m total used free shared buff/cache available Mem: 1987 588 115 52 1283 1177 Swap: 0 0 0 Livebook https://livebook.torifuku-kaiou.tokyo https://livebook.torifuku-kaiou.app Password: enjoyelixirwearethealchemists Grafana https://grafana.torifuku-kaiou.app 構成図 https://github.com/nginx-proxy/acme-companion より この記事の場合、app1がLivebook、app2がGrafana、app3はまだないということになります Automated creation/renewal of Let's Encrypt (or other ACME CAs) certificates using acme.sh. docker-compose.yml ここで、いきなり、docker-compose.ymlと.envを書いておきます ここがこの記事のハイライトです たったの2ファイルです これだけでイゴきます docker-compose.yml version: "3.3" services: nginx-proxy: image: nginxproxy/nginx-proxy container_name: nginx-proxy ports: - 80:80 - 443:443 volumes: - certs:/etc/nginx/certs - vhost:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro nginx-proxy-acme: image: nginxproxy/acme-companion container_name: nginx-proxy-acme volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - acme:/etc/acme.sh - certs:/etc/nginx/certs - vhost:/etc/nginx/vhost.d - html:/usr/share/nginx/html environment: - DEFAULT_EMAIL=${EMAIL} - NGINX_PROXY_CONTAINER=nginx-proxy depends_on: - nginx-proxy grafana: image: grafana/grafana container_name: grafana environment: - VIRTUAL_HOST=${GRAFANA_HOST} - VIRTUAL_PORT=3000 - LETSENCRYPT_HOST=${GRAFANA_HOST} - LETSENCRYPT_EMAIL=${EMAIL} depends_on: - nginx-proxy-acme livebook: image: livebook/livebook:0.2.3 container_name: livebook environment: - VIRTUAL_HOST=${LIVEBOOK_HOST} - VIRTUAL_PORT=8080 - LETSENCRYPT_HOST=${LIVEBOOK_HOST} - LETSENCRYPT_EMAIL=${EMAIL} - LIVEBOOK_PASSWORD=enjoyelixirwearethealchemists depends_on: - nginx-proxy-acme volumes: certs: vhost: html: acme: .env EMAIL=torifuku.kaiou@gmail.com GRAFANA_HOST=grafana.torifuku-kaiou.app LIVEBOOK_HOST=livebook.torifuku-kaiou.tokyo,livebook.torifuku-kaiou.app Dockerのインストール 話は前後しますが、Dockerのインストールが必要です https://docs.docker.com/engine/install/ubuntu/ 上記とプラス sudo apt install docker-compose 実行 適当なディレクトリにdocker-compose.ymlと.envを格納しておきます DNSの設定は済んでいるものとします docker-compose configで正しく環境変数が埋め込まれてていることを確認しておきましょう $ sudo docker-compose config $ sudo docker-compose up -d docker-compose.yml を書くまでにやったこと 思い出を書いておきます https://github.com/nginx-proxy/acme-companion/tree/7f1b75460d2a4ba9aa81e6da06c3119b41ef94db#readme に書いてあるdockerコマンドのサンプルをそのまままずサーバ上で実行してみました そうすると、あっけなく成功したので自信を得て、docker-compose.ymlにしてみました 一発で動いたわけではなく、エラーが発生してログとの格闘はあるにはありましたが、ここでは最終成果のみ書いておきます 最初の実験はAzure 仮想マシンで実施しました その公式に書いてあるコマンドは以下のようなもので、メールアドレスとホスト名は自分が使うものに置き換えました $ sudo docker run --detach \ --name nginx-proxy \ --publish 80:80 \ --publish 443:443 \ --volume certs:/etc/nginx/certs \ --volume vhost:/etc/nginx/vhost.d \ --volume html:/usr/share/nginx/html \ --volume /var/run/docker.sock:/tmp/docker.sock:ro \ nginxproxy/nginx-proxy $ sudo docker run --detach \ --name nginx-proxy-acme \ --volumes-from nginx-proxy \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ --volume acme:/etc/acme.sh \ --env "DEFAULT_EMAIL=torifuku.kaiou@gmail.com" \ nginxproxy/acme-companion $ sudo docker run --detach \ --name grafana \ --env "VIRTUAL_HOST=docker-study-ip.westus.cloudapp.azure.com" \ --env "VIRTUAL_PORT=3000" \ --env "LETSENCRYPT_HOST=docker-study-ip.westus.cloudapp.azure.com" \ --env "LETSENCRYPT_EMAIL=torifuku.kaiou@gmail.com" \ grafana/grafanaa ここでいろいろ詰まってしまうのではないかとヒヤヒヤしていたのですが、公式の記述がしっかりしているおかげで何も詰まることはなくすんなり成功体験ができました $\huge{ありがとうございます!}$ 後記 以前からLivebookをhttps://livebook.torifuku-kaiou.tokyo にて全世界に公開していました けっこう手動でやっていました asdfによるErlang, Elixirのインストール Erlangのインストールがけっこうハマりがち Nginxのインストール certbotのインストール SSL証明書の取得(期限が近くなったら更新) Livebookのgit clone Livebookが新しくなったらgit pull とかとか nginx letsencrypt docker composeでググってみて見つかった先人の方々の記事を読みました ありがとうございます! jwilder/nginx-proxyというDocker Imageを使うといいよという記事をたくさん目にしました jwilder/nginx-proxyへアクセスすると、nginx-proxy/nginx-proxyにリダイレクトされました あとは、nginx-proxy/nginx-proxyのほうを読み込みました というか私にとってはむしろnginx-proxy/acme-companionのREADMEがとてもわかりやすかったです docker-compose.ymlを書くときのImage名は最新のREADMEにあわせて書いてみました Wrapping Up 次は自作のPhoenixアプリをぶら下げてみようとおもいます2 Enjoy Elixir イゴかす = 動かす。西日本の一部の方言(たぶん)。NervesJPではおなじみ ↩ あくまでもおもっています ↩
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【覚書】GitHub Pages を WSL2 + Docker Desktop で動かす

Windows Home 環境で Ruby を入れて Jekyll を動かそうとしたところ、 bundle installでhttp_parser.rbがエラって何時間も立ち往生。 さすがにイライラしたので、あきらめて Docker でやることにした。 環境構築 ※ 全部管理者権限のコマンドプロンプトでやること。 まず Chocolatey を入れる。 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) choco -v でバージョンが出れば成功 次に WSL を使えるように設定を変える dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 一旦再起動して、そのあとに Chocolatey から WSL2 と Docker Desktop を入れる cinst -y wsl2 docker-desktop 再起動して、Docker Desktop が正常に起動できれば完了。 サーバーを起動する プロジェクトのルートディレクトリに docker-compose.yml を追加して、以下をコピペ version: "3.7" services: app: environment: - JEKYLL_ENV=docker image: jekyll/jekyll:pages command: jekyll serve --force_polling volumes: - ./docs:/srv/jekyll ports: - 4000:4000 ※ルートディレクトリ直下にindexを置いてる場合はvolumesを .:/srv/jekyll にする そうしたらあとは Docker Desktop が立ち上がっている状態で docker-compose up で http://localhost:4000/ にサーバーが立ち上がるはず。 .gitignore 普通の node.gitignore を使っている状態だと、 サーバーを立ち上げた瞬間新しいファイルが大量に作られるので、 以下を追加する。 _site .jekyll-cache
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

puppeteer用のDockerFile (alpine)

ブラウザー操作を自動化して情報取得するためにpuppeteerを使いはじめました。alpineベースで日本語対応まで動作確認したものをここで公開しておきます(2021/9現在) いろいろやっていたら今はPlaywrightの方が流行のようなのでそちらも書きました(2021/9/15) Dockerファイル 日本語対応のためにフォントを追加しています。 DockerFile FROM alpine # Installs latest Chromium package. RUN apk add --no-cache \ chromium \ nss \ freetype \ harfbuzz \ ca-certificates \ ttf-freefont \ nodejs \ yarn RUN apk add --no-cache curl fontconfig \ && curl -O https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \ && mkdir -p /usr/share/fonts/NotoSansCJKjp \ && unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \ && rm NotoSansCJKjp-hinted.zip \ && fc-cache -fv # Tell Puppeteer to skip installing Chrome. We'll be using the installed package. ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # Puppeteer v10.0.0 works with Chromium 92. RUN yarn add puppeteer@10.0.0 サンプル yahoo.js const puppeteer = require('puppeteer') ;(async () => { const browser = await puppeteer.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage' ] }) try { const page = await browser.newPage() await page.goto('https://www.yahoo.co.jp/') await page.screenshot({ path: 'yahoo.png', fullPage: true }) } catch (e) { console.error(e) } finally { browser.close() } })() 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GitHub Actionsで複数のDockerfileをまとめてビルド

要約 単一のGitリポジトリ(モノレポ)でマイクロサービスを管理する場合,複数のDockerfileをまとめてビルドする必要がある.この記事ではGitHub Actionsで複数のDockerfileをまとめてビルドし,GitHub Container Registry(ghcr.io)へプッシュする方法を述べる. 動作例を以下に示す. ディレクトリ構成 ビルドするDockerfileとプロジェクトのディレクトリ構成を以下に示す.プロジェクトルートの配下にあるauthor, front, front-admin, paper, thumbnailがそれぞれのサービスをあらわす.各サービスのコンテナイメージをビルドする場合,それぞれのディレクトリ(例: author)へ移動し,docker buildを実行する必要がある. . ├── author │   ├── Dockerfile │   ├── main.py │   └── requirements.txt ├── front │   ├── Dockerfile │   ├── main.py │   └── requirements.txt ├── front-admin │   ├── Dockerfile │   ├── main.py │   └── requirements.txt ├── paper │   ├── Dockerfile │   ├── main.py │   ├── requirements.txt └── thumbnail    ├── Dockerfile    ├── main.py    └── requirements.txt 構成ファイル GitHub Actions用の構成ファイルを次に示す.jobs.<job_name>.strategy.matrix.targetにターゲットを列挙する.コンテナレジストリはGitHub Container Registy(ghcr.io)に設定した.コンテナへ付与するタグはGitのコミットハッシュを使った.コンテナのビルド時のターゲット(context)とタグ名を変数 matrix.target で組み立てることで複数のコンテナイメージのビルドを実現した. image-build.yml name: Build container images on: push: branches: - master jobs: build-and-push: runs-on: ubuntu-20.04 permissions: contents: read packages: write strategy: matrix: target: ["author", "front-admin", "front", "paper"] steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Log in to the Container registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set image tag for master if: github.ref == 'refs/heads/master' run: | COMMITID=$(git rev-parse --short ${{ github.sha }}) echo "DOCKER_TAG=master-${COMMITID}" >> $GITHUB_ENV - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: ./${{ matrix.target }} push: true tags: ghcr.io/cdsl-research/${{ matrix.target }}:${{ env.DOCKER_TAG }} おわりに GitHub Actionsでのコンテナイメージの並列ビルドが思った以上に簡単にできた.targetに指定するDockerfileの存在するサブディレクトリを自動的に検出できるとハードコードが必要なくなり良いと思った.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker とVisual Studio Code を使った Go (Golang) 開発環境構築

Golang の開発環境を Docker と Visual Studio Code で約 3 分で構築する手順を解説します Docker と Visual Studio Code を組み合わせて開発環境を準備する利点については 次の記事を参照してください: 【Docker】【Visual Studio Code】 PC に言語をインストールせずにプログラム開発しよう | ultra code 開発のためのエディターとして Visual Studio Code を利用する利点については 次の記事を参照してください: ファイルやプログラムの編集には Visual Studio Code を使おう | ultra code この手順で開発環境が構築できる理屈については次の記事を参照してください: 【Docker】【Visual Studio Code】 PC に言語をインストールせずにプログラム開発しよう | ultra code あらかじめインストールしておくアプリケーション Docker Desktop Visual Studio Code Remote Development 拡張機能 Golang のインストールは必要ありません 手順 手順内の解説はなるべく省いており、詳細の解説はすべての手順の後に用意してあります 1. Docker Compose のためのファイル準備 プロジェクトフォルダーを新規作成、Visual Studio Code で開き、次の 2 つのファイルを新規作成します: project/ +---Dockerfile +---docker-compose.yml Dockerfile FROM golang:1.17.0-bullseye # Visual Studio Code Remote Development 拡張機能がデフォルトで開くディレクトリーであるため WORKDIR /workspace # 2021-06-10 時点で Visual Studio Code でコードのフォーマットや Lint などの支援を受けるのに必要なモジュール # モジュール未インストール時に Visual Studio Code を開き、次のコマンドで一覧表示されたものです: # Ctrl + Shift + P -> Go: Install/Update Tools RUN go get github.com/uudashr/gopkgs/v2/cmd/gopkgs RUN go get github.com/ramya-rao-a/go-outline RUN go get github.com/cweill/gotests/... RUN go get github.com/fatih/gomodifytags RUN go get github.com/josharian/impl RUN go get github.com/haya14busa/goplay/cmd/goplay RUN go get github.com/go-delve/delve/cmd/dlv # div-dap のインストール方法は次のドキュメントを参考にしました: # https://github.com/golang/vscode-go/blob/v0.26.0/docs/dlv-dap.md#updating-dlv-dap RUN GOBIN=/tmp/ go get github.com/go-delve/delve/cmd/dlv@master \ && mv /tmp/dlv $GOPATH/bin/dlv-dap RUN go get github.com/golangci/golangci-lint/cmd/golangci-lint RUN go get golang.org/x/tools/gopls docker-compose.yml version: "3.8" services: golang: build: . image: yourrepository/golang:development 2. Developing inside a Container のための設定ファイルの追加 Visual Studio Code の画面左下のステータスバーの項目 (リモートクィックアクセス) をクリック -> [Remote-Containers: Add Development Container Configuration Files…] をクリック: すると、どのように設定を作成するかを尋ねるメニューが表示されるので、 [From ‘docker-compose.yml’] をクリック: すると次のファイルが追加されます: project/ +---.devcontainer/ +---devcontainer.json +---docker-compose.yml 3. 拡張機能や Lint の設定を追加 .devcontainer/devcontainer.json に設定を追加します: .devcontainer/devcontainer.json - "settings": {}, + "settings": { + "go.lintTool": "golangci-lint", + "go.lintFlags": [ + "--fast" + ] + }, // ~~~ - "extensions": [] + "extensions": [ + "golang.go" + ] コピー & ペースト用: "settings": { "go.lintTool": "golangci-lint", "go.lintFlags": [ "--fast" ] }, "extensions": [ "golang.go" ] 参考: Integrations | golangci-lint Go with Visual Studio Code 4. コンテナーを起動して Visual Studio Code で開く Visual Studio Code の画面左下のステータスバーの項目 (リモートクィックアクセス) をクリック -> [Reopen in Container] をクリック 5. Golang プロジェクトの初期化 ターミナルを開き、次のようにコマンド実行: go mod init <repository path> 例: go mod init github.com/yukihiko-shinoda/hello-world-golang ※ リポジトリーのパスは後から変えることもできます すると、ファイル: go.mod が作成されます 6. 利用することがわかっているパッケージを依存関係としてファイル: go.mod に追加 例: AWS SDK (https://github.com/aws/aws-sdk-go-v2) の場合: go get -d github.com/aws/aws-sdk-go-v2 ※ または、コードに import 文を書いてから、   コマンド: go mod tidy でファイル: go.mod に反映させることもできます 7. コーディング開始 例: ファイル hello_world.go を作成: hello_world.go package main import "fmt" func main() { fmt.Println("hello world") } 直接実行して動作確認: go run hello_world.go 次のコマンドで、main パッケージの main() を実行可能: go run . 参考: Go by Example: Hello World 解説 Docker と Visual Studio Code による開発環境構築の基本的な理屈については 次の記事を参照してください: 【Docker】【Visual Studio Code】 PC に言語をインストールせずにプログラム開発しよう | ultra code ここでは Golang 特有の内容について解説します Dockerfile について FROM golang:<tag> Golang は公式イメージが提供されています Golang 以外に必要なツールが特にない場合はこのイメージを使うと良いでしょう: Golang - Official Image | Docker Hub タグの意味なども上記 Docker Hub の [Description] タブに記載されていますので さらっと確認しておきましょう RUN go get <package> これらのモジュールを環境にインストールしないと Visual Studio Code で Golang のコードフォーマットや Lint などの支援を受けることができません ちなみに、インストールしなかった場合、 Visual Studio Code がダイアログでインストールを促してくれます しかし、Dockerfile の RUN 命令を使わずにインストールした場合は 環境を再構築することになった時、 必ずこれらのモジュールをインストールし直す時間を浪費することになります Dockerfile にインストールするよう記載しておいた方が 環境を再構築することになった際も時間が節約できる可能性が高くなるのでおすすめです (Docker は構築の結果をキャッシュするため) 参考: Best practices for writing Dockerfiles | Docker Documentation
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Go (Golang) Docker と VisualStudioCode による開発環境構築

Golang の開発環境を Docker と Visual Studio Code で約 3 分で構築する手順を解説します Docker と Visual Studio Code を組み合わせて開発環境を準備する利点については 次の記事を参照してください: 【Docker】【Visual Studio Code】 PC に言語をインストールせずにプログラム開発しよう | ultra code 開発のためのエディターとして Visual Studio Code を利用する利点については 次の記事を参照してください: ファイルやプログラムの編集には Visual Studio Code を使おう | ultra code この手順で開発環境が構築できる理屈については次の記事を参照してください: 【Docker】【Visual Studio Code】 PC に言語をインストールせずにプログラム開発しよう | ultra code あらかじめインストールしておくアプリケーション Docker Desktop Visual Studio Code Remote Development 拡張機能 Golang のインストールは必要ありません 手順 手順内の解説はなるべく省いており、詳細の解説はすべての手順の後に用意してあります 1. Docker Compose のためのファイル準備 プロジェクトフォルダーを新規作成、Visual Studio Code で開き、次の 2 つのファイルを新規作成します: /project +---Dockerfile +---docker-compose.yml Dockerfile FROM golang:1.17.0-bullseye # Visual Studio Code Remote Development 拡張機能がデフォルトで開くディレクトリーであるため WORKDIR /workspace # 2021-06-10 時点で Visual Studio Code でコードのフォーマットや Lint などの支援を受けるのに必要なモジュール # モジュール未インストール時に Visual Studio Code を開き、次のコマンドで一覧表示されたものです: # Ctrl + Shift + P -> Go: Install/Update Tools RUN go get github.com/uudashr/gopkgs/v2/cmd/gopkgs RUN go get github.com/ramya-rao-a/go-outline RUN go get github.com/cweill/gotests/... RUN go get github.com/fatih/gomodifytags RUN go get github.com/josharian/impl RUN go get github.com/haya14busa/goplay/cmd/goplay RUN go get github.com/go-delve/delve/cmd/dlv # div-dap のインストール方法は次のドキュメントを参考にしました: # https://github.com/golang/vscode-go/blob/v0.26.0/docs/dlv-dap.md#updating-dlv-dap RUN GOBIN=/tmp/ go get github.com/go-delve/delve/cmd/dlv@master \ && mv /tmp/dlv $GOPATH/bin/dlv-dap RUN go get github.com/golangci/golangci-lint/cmd/golangci-lint RUN go get golang.org/x/tools/gopls docker-compose.yml version: "3.8" services: golang: build: . image: futureys/golang:development 2. Developing inside a Container のための設定ファイルの追加 Visual Studio Code の画面左下のステータスバーの項目 (リモートクィックアクセス) をクリック -> [Remote-Containers: Add Development Container Configuration Files…] をクリック: すると、どのように設定を作成するかを尋ねるメニューが表示されるので、 [From ‘docker-compose.yml’] をクリック: すると次のファイルが追加されます: /project +---.devcontainer +---devcontainer.json +---docker-compose.yml 3. 拡張機能や Lint の設定を追加 .devcontainer/devcontainer.json に設定を追加します: .devcontainer/devcontainer.json - "settings": {}, + "settings": { + "go.lintTool": "golangci-lint", + "go.lintFlags": [ + "--fast" + ] + }, // ~~~ - "extensions": [] + "extensions": [ + "golang.go" + ] 参考: Integrations | golangci-lint Go with Visual Studio Code 4. コンテナーを起動して Visual Studio Code で開く Visual Studio Code の画面左下のステータスバーの項目 (リモートクィックアクセス) をクリック -> [Reopen in Container] をクリック 5. Golang プロジェクトの初期化 ターミナルを開き、次のようにコマンド実行: go mod init <repository path> 例: go mod init github.com/yukihiko-shinoda/hello-world-golang ※ リポジトリーのパスは後から変えることもできます すると、ファイル: go.mod が作成されます 6. 利用することがわかっているパッケージを依存関係としてファイル: go.mod に追加 例: AWS SDK (https://github.com/aws/aws-sdk-go-v2) の場合: go get -d github.com/aws/aws-sdk-go-v2 ※ または、コードに import 文を書いてから、   コマンド: go mod tidy でファイル: go.mod に反映させることもできます 7. コーディング開始 例: hello_world.go package main import "fmt" func main() { fmt.Println("hello world") } hello_world.go ファイルを作成 go run hello_world.go で直接実行して動作確認 go run . で main パッケージの main() を実行可能 参考: Go by Example: Hello World 解説 Docker と Visual Studio Code による開発環境構築の基本的な理屈については 次の記事を参照してください: 【Docker】【Visual Studio Code】 PC に言語をインストールせずにプログラム開発しよう | ultra code ここでは Golang 特有の内容について解説します Dockerfile について FROM golang:<tag> Golang は公式イメージが提供されています Golang 以外に必要なツールが特にない場合はこのイメージを使うと良いでしょう: Golang - Official Image | Docker Hub タグの意味なども上記 Docker Hub の [Description] タブに記載されていますので さらっと確認しておきましょう RUN go get <package> これらのモジュールを環境にインストールしないと Visual Studio Code で Golang のコードフォーマットや Lint などの支援を受けることができません ちなみに、インストールしなかった場合、 Visual Studio Code がダイアログでインストールを促してくれます しかし、Dockerfile の RUN 命令を使わずにインストールした場合は 環境を再構築することになった時、 必ずこれらのモジュールをインストールし直す時間を浪費することになります Dockerfile にインストールするよう記載しておいた方が 環境を再構築することになった際も時間が節約できる可能性が高くなるのでおすすめです (Docker は構築の結果をキャッシュするため) 参考: Best practices for writing Dockerfiles | Docker Documentation
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerで手元のイメージから派生したイメージを作る

Dockerで手元のイメージから派生したイメージを作る BaseとなるDockerfile Dockerfile https://github.com/piuccio/cowsay を グローバルインストールしておく FROM node:14 RUN npm install -g cowsay ビルドしてcowsay-imageでタグ付けする $ docker build -t cowsay-image . $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE cowsay-image latest 2d25113e504d 3 minutes ago 946MB コンテナを立ち上げてbashに入って実際にcowsayがグローバルインストールしてあるか確認 $ docker run -it cowsay-image bash root@8888888:/# cowsay hoge ______ < hoge > ------ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || root@8888888:/# Baseを元に派生したイメージを作成する Dockerfile ローカルで派生したイメージを作るにはFROMに先程作成したイメージ名を指定するだけ!! FROM cowsay-image CMD [ "cowsay", "hoge" ] $ docker run -it evolution-cowsay ______ < hoge > ------ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || CMDなどに設定するコマンドを色々試したい時 bashで色々試せるので、Baseイメージ内でコマンド打って検証する $ docker run -it cowsay-image bash root@ce25bb3685b6:/# cowsay Usage: cowsay [-e eye_string] [-f cowfile] [-h] [-l] [-n] [-T tongue_string] [-W column] [-bdgpstwy] text If any command-line arguments are left over after all switches have been processed, they become the cow's message. If the program is invoked as cowthink then the cow will think its message instead of saying it. Options: --version Show version number [boolean] -e Select the appearance of the cow's eyes. [default: "oo"] -T The tongue is configurable similarly to the eyes through -T and tongue_string. [default: " "] -W Specifies roughly where the message should be wrapped. The default is equivalent to -W 40 i.e. wrap words at or before the 40th column. [number] [default: 40] -f Specifies a cow picture file (''cowfile'') to use. It can be either a path to a cow file or the name of one of cows included in the package. [default: "default"] --think Think the message instead of saying it aloud. [boolean] -b Mode: Borg [boolean] -d Mode: Dead [boolean] -g Mode: Greedy [boolean] -p Mode: Paranoia [boolean] -s Mode: Stoned [boolean] -t Mode: Tired [boolean] -w Mode: Wired [boolean] -y Mode: Youthful [boolean] -h, --help Show help [boolean] -n If it is specified, the given message will not be word-wrapped. [boolean] -r Select a random cow [boolean] -l List all cowfiles included in this package. [boolean] root@ce25bb3685b6:/# cowsay -b fugo ______ < fugo > ------ \ ^__^ \ (==)\_______ (__)\ )\/\ ||----w | || || root@ce25bb3685b6:/# cowsay -w fugo ______ < fugo > ------ \ ^__^ \ (OO)\_______ (__)\ )\/\ ||----w | || || root@ce25bb3685b6:/# cowsay -y fugo ______ < fugo > ------ \ ^__^ \ (..)\_______ (__)\ )\/\ ||----w | || || root@ce25bb3685b6:/# cowsay -t fugo ______ < fugo > ------ \ ^__^ \ (--)\_______ (__)\ )\/\ ||----w | || ||
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む