Do you know how to be built the Dockerfile? I'll talk about OCI image specification and docker image architecture. It's the way to build images, to p…
Base Imageは筆者の好みでubuntu (latest ※執筆時点では16.04) を使用していますが、もう少し軽量なImageを使ってもいいかもしれません。 Dockerイメージ作成 Dockerfileは下記の通りです。 FROM ubuntu:latest MAINTAINER hogehoge ENV ARCH amd64 ENV GOVERSION 1.7.5 ENV HOME /root ENV PATH $PATH:/usr/local/go/bin ENV GOPATH $HOME/work RUN apt-get update -y \ && apt-get install vim curl git -y \ && curl -s -o /tmp/go.tar.gz https://storage.googleapis.com/golang/go$GOVERSIO
Dockerfile内で例えば RUN wget https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_linux_amd64.zip みたいなことをする場合、バージョンの部分を変数にできないか調べた(バージョン上げる度に複数ヶ所直すのが面倒)。 ARGインストラクションを使えばよさそう。 Dockerfile reference - ARG ARGインストラクションはdocker build時に使用可能な変数で、コンテナに環境変数を設定するENVインストラクションとは性質が異なる。 Dockerfile reference - ENV ARGは以下のようにして使える。 ARG version="0.7.2" RUN wget https://releases.hashicorp.com/consul/${version}/con
Awesome-docker A curated list of Docker resources and projects View on GitHub Star Awesome Docker A curated list of Docker resources and projects If you would like to contribute, please read CONTRIBUTING.md first. It contains a lot of tips and guidelines to help keep things organized. Just click README.md to submit a pull request. If this list is not complete, you can contribute to make it so. Her
RUN cd /tmp RUN wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.4.tar.gz RUN tar zxvf nagios-4.0.4.tar.gz RUN cd /tmp/nagios-4.0.4 RUN ./configure --with-command-group=nagcmd よくあるtarballをダウンロード➡️解凍➡️configure➡️makeする流れ。 今回は/tmpにダウンロードして解凍、フォルダへ移動しconfigureすると考えていた。 しかし、docker buildでimageを作成する際、一命令毎にコンテナが作成される。 次の命令は前の命令のコンテナを基にした新しいコンテナで実行されるため、 カレントディレクトリは常に"/"となる。 この状態でbuil
photo by Daniel Ramirez Node.jsでツールをつくって公開するとき、または公開されているツールを使うとき、いちいちnodeの実行環境を整え、npmで大量のnode_modulesをインストールしなければならない。 普段からNode.jsの環境を整えている人ならいいけど、ためしに使ってみようかな?と思う層にはハードルがちょっと高い気がする。 ローカル環境を汚さず、もっと簡単に実行できないか? と考えた結果、Dockerのコンテナに実行環境をつくり、処理結果だけを返してくれるようにすれば便利なんじゃない?と思いついたので当記事で方法を紹介する。 Node.jsの実行用コンテナをつくる DockerでNode.jsの実行用コンテナをつくるためにDockerfileを書く。 DockerfileとはDockerのコンテナをつくるための設計書みたいなもの。 ここにどんなOS
はじめに Dockerイメージのビルドは構成次第で長い時間が掛かり、GitHub Actions上で行う場合に頻度が高くなると利用可能枠の圧迫につながります。Organization全体の限度枠をどのくらい占めているのか、及び残り利用枠が分かりにくいこともあり、先んじてキャッシュして備えることにしました。 効率のよいキャッシュを検討する キャッシュを目的としたActionはいくつかありましたが、今回は使いません。BuildKitプロジェクト成果物のソースコード内での利用形跡が見つからなかったためです。 BuildKitについて 以下のスライドが参考になります。Dockerfile内で効率よくキャッシュするコツにも触れているので、読まれたことがない方には特におすすめします。 BuildKitを併用してキャッシュした場合の時間については、以下のブログ記事にまとまっています。 やってみる 同様の
簡単に手順をまとめると Dockerfileにimageのつくりかたを書く docker buildでimageをビルドする 2でつくったimageにdocker tagで名前をつける sshでつなぐためにIPアドレスを調べる docker runでcontainerを起動 docker portで起動したcontainerの22番ポートはどのポートからNATされているか調べる 4,6で調べたIP, portにsshで接続する 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 $ cat Dockerfile FROM ubuntu
Learn how to use Docker to create images for development and production. Imagine that you have developed a full fledged working application and want other developers to contribute to the project. Now if the application consists of different components like UI, running server, database etc. The new developer should install the exact configuration of the entire stack on to his/her system before star
Multi-Stage Build docs.docker.com Docker の 17.05 (ce) から multi-stage build 機能が追加されました。 multi-stage build とは、ベースイメージを複数利用し、多段階で build を行う機能です。 利用シーンはビルド環境とランタイム環境の分離が挙げられます。 ビルド環境とランタイム環境を分けるとランタイムがネイティブである Go のような言語では Docker image を劇的に小さくすることができます。 golang の ベースイメージは 数百 MB ありますが、alpine のような 軽量 Linux イメージ単体では 数 MB のため、効果としては 90 % 以上のダイエットに繋がります。 Docker image サイズを小さくするメリットや、一般的なプラクティスについてはページ下部のリンクが非
ある時Dockerfile内でPATHを通したいと思い、テストコンテナで以下のコマンドを実行して正しい環境になっていることを確認していました。 やりたかったことはCentOS6.7にopenjdk1.8をインストールしている環境にScala-2.11.7をインストールするということです。 OpenJDK1.8が入っているコンテナに手動でScalaをインストール wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz tar xvzf scala-2.11.7.tgz mkdir /usr/local/scala mv scala-2.11.7 /usr/local/scala export PATH=$PATH:/usr/local/scala/scala-2.11.7/bin FROM takashioshikaw
dockerとは コンテナという仮想的な空間を提供して、その中でアプリケーションを実行できる docker公式 Dockerfileとは Dockerコンテナーの構成内容を書くみたい Makefileみたいなイメージ なんで読んだ? Dockerはなんとなく使えていたが、どんな構成になっているかわかっていなかった そのうちカスタムするんじゃね?知ってなきゃやばくね?って思った どのように構成を指定しているかをちゃんと理解したほうが良いと思った 対象 elastic公式の、Elasticsearchコンテナ ちょっと使うことがあったので elastic/elasticsearch-docker ざっと見る だめだ・・ 1行ずつ愚直に調べながら読むしかねぇ・・・ FROMは元となるDockerイメージを指定する命令文 elasticsearch-alpine-baseはAlpin Linuxを
ついに24日!!!! 皆様いかがお過ごしでしょうか? 今年も残すところ7日という事実に耐えられずお布団で震えています。 はじめに 続きそうなタイトルですが、続編を投稿するかは謎です。 その名の通り、Dockerのコードを読んだり準備したりする話です。 事前準備 イメージの構造がわからない状態で読み始めると辛くなるので 先にOCI image-specを読むことをオススメします。 なぜOCIかというと、Dockerのドキュメントより仕様としてしっかりまとまっているのと、 Dockerを参考にしているのもあって大枠は一致しているからです。 そこらへんをまとめたスライド https://speakerdeck.com/ladicle/container-image-architecture どこから読むか? とりあえず GTAG生成した後にls して雰囲気をつかみます。 drwxr-xr-x 1
docker-compose.yml �K vU �0� vU version: "2" services: datastore: image: busybox volumes: - mysql-data:/var/lib/mysql - redis-data:/data - app-tmp:/app/tmp mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' volumes_from: - datastore redis: image: redis:alpine ports: - '6379:6379' volumes_from: - datastore app: build: . ports: - '3000:3000' environment: MYSQL_USERN
はじめに Go 1.12 がリリースされましたね! TLS 1.3 の対応や Go Modules の改良がされたようです。 Go 1.12 is released - The Go Blog 今回は Go Modules が含まれている Go 1.12 を使用して、開発環境と本番環境の Dockerfile の作成を考えてみます。 開発環境は docker-compose、本番環境は Kubernetes などのオーケストレーションツールにデプロイすることを想定した Dockerfile の作成を考えます。 アプリケーションは、Go Modules を利用してライブラリ管理し、外部に HTTPS 通信するアプリケーションを想定して Dockerfile を作成しています。 Listen ポートは 8080 ポートです。 macOS High Sierra Version 10.13.6
DockerfileでDockerを実行したメモです。 Dockerfile DockerはDockerfileというファイルに環境構築のコードを記述することができます。 Dockerfileを作成することで、常に同じ構成の環境を構築したり、 Dockerfileを配布することで各個人で共通の環境を構築したりすることが出来ます。 Dockerfile作成 Docker Machineを起動してログインします。 インストールなどは下記記事を参照。 pppurple.hatenablog.com viでDockerfileを作成します。 「Dockerfile」という名前で拡張子なしで作成します。 これがDockerfileのデフォルトの名前のルールになっています。 FROMでベースイメージを指定します。 MAINTAINERで作成者の情報を指定します。 #を記述するとコメントになります。 $
Dockerは Dockerfile という独自のDSLで記載されたファイルからDockerイメージを作成するのだが、 普段かいてるitamae使えないかなと思ったらどうやら Packerというものと組み合わえるといけるらしい Packerを使ってChef/Puppet/AnsibleでDockerのイメージをつくる ただ僕が普段使っているのはItamae。。。Packerでは現状対応してないという。 Packerとは? VagrantとかTerafformとかを作っているHashicorp社製のソフトウェア 複数のプラットフォームのマシン、コンテナイメージを1つの設定ファイルから作成できる。 身近な例でいうと AMIの作成をコマンド一発で作れるようになる。 他にもbuild先を切り替えるとGCEとかVMwareとかのイメージが作れるようになる お題 rubyの2.3.1が動いていてrai
はじめに Docker公式のBest practices for writing Dockerfilesに ADDよりもCOPYが望ましい(ADDは使わない方が良い)との記述があるのを見つけたのでその理由を確認してみました。 TL;DR 理由は以下の2つに分けることができます。 ① Imageサイズの観点 ② セキュリティの観点 そもそもCOPYとADDはどう違うのか こちらの記事にて端的にまとめられていたので日本語訳してしまいます。 COPY - 明示的なコピー元とコピー先のファイルまたはディレクトリを指定して、ローカルファイルを再帰的にコピーします。 COPYでは、場所を宣言する必要があります。 ADD - ローカルファイルを再帰的にコピーし、存在しない場合は暗黙的にコピー先ディレクトリを作成し、アーカイブをコピー元としてローカルURLまたはリモートURLとして受け入れます。アーカイブ
で、この度DELLのXPS13を買って(たぶん)10年ぶりくらいにWindowsに帰ってきたので、さてはてどうしよう。離れてる間にWindows上でbashが動くようになってるものの、常用するにはまだ色々と怪しいっぽいし、さりとてmingwとかmsysとかcygwinとかで頑張るのもしんどい。マシンスペックに余裕があるので正攻法でVirtualBox入れてVMを立てるんでも良かったんだけど、折角なのでDockerでコンテナ立てて開発環境にする、というのに挑戦してみることに。 当然DB使うサービスの類いはそれぞれDockerfile用意してdocker-composeでセットにして環境を作っているんだけど(そちらについても試行錯誤してるのでそのうちまとめたい)、もっと小粒なproductやリモートの環境に入って色々する時の足場みたいな雑に使える環境用のdocker imageを作ってみようと
ここを読んだメモ。 www.centurylinklabs.com CMDでコマンドを指定していると,docker run image-name some commandのように上書きできる。 ENTRYPOINTは上書きさせたくないときに使う。ENTRYPOINTで指定されたコマンドを上書きするときはこう書くdocker run --entrypoint somecommand image-name。複数パラメータどうすんだろ。いるときはドキュメント見る。 実行するコマンドをexecにするかどうかって話 CMDとかENTRYPOINTは/bin/sh -cの引数としてコマンドを実行する。なので、docker psなどで実行中のプロセスを見るとCMDなどで指定したコマンドだけでなく/bin/shも見えるとのこと。 execで実行すると/bin/shを介さずに,PIDが1で実行される. ex
はじめに カスタマイズしたDockerイメージを使ってサービスを運用し続けていく場合、Dockerイメージのバージョン管理をプライベートな環境で行う必要が出てきます。プライベートDockerリポジトリとしては、Docker Hubのプライベートリポジトリを使うか、あるいはDocker Registoryを使ってローカルな環境にプライベートリポジトリを構築する形になるでしょう。 今回はプライベートDockerリポジトリの選択肢としてQuay.ioをご紹介します。 Quay.ioはプライベートDockerリポジトリをホストするサービスです。2014年8月にCoreOSに買収されたことで一気に注目されました。Quay.ioのは複数の有料プランが用意されています。料金プランのページにある通り、Dockerfileをアップロードすることでbuildしたり、ロボットアカウントがあったり、複数のユーザで
はじめに メイン機以外で定期実行されるクローラを作りたいと思ったわけですが、その場合ローカル環境に全く依存しない形が取れれば最高だということで、Docker環境の構築に乗り出しました。 全体図 Python実行環境とSeleniumHQ/docker-seleniumはDocker Composeを利用して別のコンテナとして立てます。 そしてSeleniumHQ/docker-seleniumを通じてVNC接続することで、簡単にクローラの挙動をチェックできます。 ちなみに、SeleniumHQ/docker-seleniumがあれば、ChromeやChromeDriverのセットアップは不要です。 環境構築 Docker 最近はWindows10 Homeでも簡単にインストールできるようになったようです。 Dockerのインストーラの指示に従っていれば使える状態になります。 VSCode(
もう、朝 寝れてないのでついでに明後日の登壇資料の準備をしている。あとは謎の挙動にぶつかってLDAP にキレていたのを Sleep で切り抜けたので明日、聡明な自分が解決してくれることを信じてます。 2021年3月11日にCLOUDNATIVE DAYS SPRING 2021 ONLINE に登壇しました(事前収録)。 発表では 主に Docker/Kubernetes でのCI 周りのツールの紹介などを行いましたが日々のコンテナイメージのレビューに憑かれた人に向けて多少楽になる一助になればいいと思いました(ほんなこつ???)が時間管理が無限に下手で本当に入門なだけになってしまいました。 結局、言いたいことの骨子をまとめてないからこんなことになるんやぞ!!! event.cloudnativedays.jp speakerdeck.com あとは所属組織でCloudNative Days
この記事は Dockerfile を初めて書くときに役立ったTipsをまとめたものです。 apt, apt-get, source コマンドとマルチステージビルドについて調べたことを挙げています。 (追記) Dockerfile で使用する推奨コマンドを apt から apt-get に変更しました。 公式の Dockerfile のベストプラクティスはこちら。また、こちらの @zembutsu 氏のスライドが大変助かりました。ありがとうございます。こちらで触れていない内容もありますので、ぜひご覧ください。 なお、下記内容の docker 実行イメージは Ubuntu 18.04を対象としています。 そのため Docker Desktop for Windows を利用する場合は、Linux container に切り替える必要があります。 apt または apt-get を使うと警告が出
Dockerは、ハイパーバイザー側の仮想化ソフトに比べて、飛躍的にサーバー集約を実現できる特徴がありますが、それだけではありません。Dockerの醍醐味は、OSとアプリケーションをパッケージ化する手順を自動化できるという点にあります。では、OSとアプリケーションのパッケージ化を自動化するとは、一体どういうことなのでしょうか?そこには、今までのコンテナ型のソフトウェアにはない斬新な考えがあります。それが、Dockerfileです。今回と次回は、Dockerfileを使ったOSとアプリケーションのパッケージ化の具体的な自動化手順について解説します。 Dockerfileを使ったイメージの作成 Dockerイメージの作成や、イメージからコンテナを起動する一連の手順は、dockerコマンドでコマンドラインから入力することで可能ですが、コンテナとなるベースイメージの入手やコンテナへのアプリケーション
FROM ubuntu:16.04 MAINTAINER iganari <iganari@qiita.com> # apt update RUN apt-get update RUN apt-get install -y sudo # add sudo user RUN groupadd -g 1000 developer && \ useradd -g developer -G sudo -m -s /bin/bash iganari && \ echo 'iganari:hogehoge' | chpasswd RUN echo 'Defaults visiblepw' >> /etc/sudoers RUN echo 'iganari ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers USER iganari # docker build --no-c
「モバイルSuicaの利用履歴を経費精算に簡単に出せるように編集するサービスの作成」の第一歩 まずはPythonでの開発を行うのでPythonを実行できる環境を作る 筆者の環境 windows PC (Core i7-7600 / 16GB) VS codeで編集 PythonとDockerの拡張機能は入れておくと便利 方針 Windows PCで開発しているので直接やるといろいろ面倒くさい Pythonの実行環境はDockerでコンテナを立てる 準備 Docker for Windowsをインストールする Hyper-Vの有効化など必要。 [docker-compose]もインストール ※[Docker] Windows 10 Pro 64bit に Docker と Docker Compose をインストールする Dockerfileを作る いろいろインストールするのでイメージをbu
Oracle JDKのRPMをコマンドでダウンロードする方法をまったく覚えられないので、Dockerイメージの作り方と合わせてメモ。 CentOS 7とUbuntu Linuxで、Oracle JDK 8をインストールするDockerfileを書いておきます。 追記) CentOSなどで使う、RPM形式のファイルをダウンロードしてインストールする場合は、Oracle JDK 8では2017年に ダウンロードURLの形式が大きく変わりました。よって、このエントリのURLではうまく動作しないのでご注意ください。 [Java] OracleJDKの取得方法が大きく変わりました | Developers.IO CentOS RPMをダウンロードしてインストール。 Dockerfile FROM centos:7 ENV JDK_VERSION 8u60 ENV JDK_BUILD_NO b27 E
私も始めるまではこの辺りさっぱりだったので、簡単な図で書いてみます。3日やったうえでの理解ですので、誤ってたらスミマセン…。よく出てくる言葉とコマンドの関連性はざっと以下のような感じになると思います。 Docker Hubからpullしてきたもの、もしくはDockerfileから作成するものがDocker イメージ Dockerfileはイメージの作成手順のようなもの Docker run時にローカルにイメージがなかったらDocker HubからイメージをpullしてきてDocker コンテナを起動する(つまりpull→runという順序でコマンドが実行される) Docker コンテナはDocker イメージをもとに作成される 実際にアプリケーションが動作するのはDocker コンテナ Docker コンテナから新しいイメージを作成(commit)できる Docker Hub Docker
This page was last edited on 24 February 2021, at 21:09. fedorahosted.org retirement Summary fedorahosted.org was retired on March 1st, 2017. If you are viewing this page, odds are it's after that date and you have been redirected here by attempting to go to some project on fedorahosted.org. If you are a user of a project formerly hosted at fedorahosted.org, please search for the new home the proj
Golangはシングルバイナリ(単体で動く実行ファイル)を出力してくれてありがたいのですが、それをコンテナ向けの軽量LinuxであるalpineやBusyBoxを使って動かそうとすると、ハマることが多い。 シングルバイナリじゃなかったのか、と思ってしまうのだが、どうやらデフォルトで一部のライブラリがダイナミックリンクになっているからである。 このあたりが参考になった。 golangでビルドしたバイナリをスタティックリンク (static link)にする これ、割とググればいろいろ出てくるのですが結局のところイマイチ最適解が見つからない。 何故かっていうと、中身に入っているライブラリなどで割かしビルド条件を変える必要があるため。 また、コンテナのサイズも小さくしたいので、いろいろとオプションを調べて、自分はこんな感じで落ち着いた。 ※ちなみに今回想定しているシングルバイナリは、Golang
In the previous article, we have deployed a typical Rails application using Docker. Once Docker has been set up, the install was quite straightforward: just retrieve an image from the Docker Index and run it! Now, you may wonder how easy it was to build that image. So let’s watch the making of the previous episode! For those who can’t wait, the “making of” is already published on GitHub as rails-m
Docker Hub に Debian のイメージがあるので、それを使えばいいんだけれど、タイムゾーンを JST にしたかったり、やっぱりなんか自分で作ってみたかったので試してみることに。 あくまでもスタートとなる Base Image だけを作りたいので、Packer とか Ansible とかは使わないことに。 アプリケーションを構築するときには使おうかな。 内容としては以下の記事を大いに参考している。というか、写経みたいなものです。 dockerのカスタムベースイメージを作成する - @znz blog Base Image の生成 Debian の Base Image は docker が github 上で公開しているツールを使えば、簡単に作成することができるみたい。 docker/docker · GitHub Base Image を作成するには docker ソースコード
Automated Buildとは 新しく立ち上がったDocker Hubは、ただのイメージの集積所ではなくBuildもできるようになった。 github、BitBacketと連携して、そこにあるリポジトリの状態から勝手にBuildしてくれる。 今回はtypesafe-activatorを取り込んだイメージを作るDockerfileを書いて、githubにpush、Docker Hubでbuildしてみた https://github.com/JAGAxIMO/docker-typesafe-activator https://hub.docker.com/ Dockerfileをgithubにpush こんなDockerfileを書いた。眠い目こすってやってたのでひどい事になってる 今回は @ringo さんのringo/scientificをベースに使ってみた FROM ringo/s
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く