目次
- 目次
- はじめに
- Dockerとは?
- 各OSにおけるDockerのインストール
- docker逆引き表
- 既存のdockerイメージを少し変更したい場合
- Dockerfile注意点
- Docker compose
- 手渡しでdocker imageを渡す方法
- dockerを使って様々なアプリを使うときのメモ
- 参考資料
- MyEnigma Supporters
はじめに
近年、効率的なソフトウェア開発において、
Dockerは広く使われています。
今回は、Docker初心者の自分が、
一からDockerを勉強した際のメモです。
自分の場合、冒頭の本を一冊読んでから、
あとは自分のやりたいことをネットで
調べながらDockerを勉強しました。
この本は、初心者にもかなりわかりやすく説明していると思います。
Dockerとは?
Dockerは、Virtual BoxやParallelsなどのような、
VMを作成するソフトウェアの一つですが、
Linuxのコンテナ技術を使って、
VMを軽量で高速に起動、停止などを可能にしたものです。
つまり、
より気軽にVMを使えるようにしたツールであるといえます。
VMを使うことで、開発環境の管理や、
他のプラットフォーム上での実行がしやすくなります。
たとえば、自分のコンピュータで作成したアプリケーションを
他のコンピュータで動かしたい場合、
OSとライブラリ、そしてアプリケーションのファイルを
すべて一つのdockerイメージにまとめ、
それをコピーしてdocker上で起動すれば、
自分のアプリケーションを、
他のコンピュータやクラウド上で動かすことができます。
大抵の場合、
まずはじめに環境を立ち上げたり、
その環境のソフトウェアやOSのバージョンを合わせるのに
非常に時間がかかるため、Dockerを使うことで、
このようなことに悩む時間を短くすることができます。
当初、Dockerは開発用やテスト用に使われていましたが、
近年では、本番環境で使われることも多く、
Googleでは毎週20億個ものコンテナが起動されているようです。
各OSにおけるDockerのインストール
Mac
Windows10
下記ページ通りに、Windows10のコンパネからHyper-VをONして、
Windows版のdockerをインストールすればOKです。
docker逆引き表
よく調べ直しているコマンドをまとめておきます。
やりたいこと | コマンド |
---|---|
現在のディレクトリ内のDockerfileからDockerイメージを作る | docker build -t imagegroup/imagename:0.1 . |
イメージのリストを表示 | docker images |
使用していないイメージを削除 | docker rmi |
コンテナのバックグラウンド起動 | docker container run -d examle/examle:latest |
名前付きコンテナの起動 | docker container run -t -d --name test_container example/example: latest |
コンテナのリスト表示 | docker container ls |
起動したら削除するコンテナの起動 | docker container run -rm example/example |
コンテナの一時停止 | docker container stop container_ID |
コンテナの再実行 | docker container restart container_ID |
コンテナの削除 | docker container rm container_ID |
コンテナ内にbashで入る | docker container exec -it container_ID bash |
コンテナ内からファイルをコピーする | docker container cp example:/example/data.txt ./ |
すべてのコンテナを停止 | docker stop $(docker ps -aq) |
すべての止まっているコンテナを削除 | docker rm $(docker ps -aq) |
不要なファイルの削除 | docker system prune |
既存のdockerイメージを少し変更したい場合
基本的に新しいdockerイメージを作成するときは、
Docker fileを使って、新しいイメージを作成しますが、
少しだけ変更したい場合、(例えばちょっとpipでライブラリをインストールしたい場合)
などは、いちいちDockerfileを作るのは面倒です。
そんなときは、下記の記事の方法に従って、
docker containerを修正し、
docker commitをすると、既存のimageを手動で変更できます。
Dockerfile注意点
- RUNはdocker buildされる時に実行されるコマンド
各RUNコマンドでは状態は保持されないことに注意
またRUNコマンドはすべてrootで実施される。
コマンドに対話的な処理が入ったらエラーになる。
- CMDはdocker runされる時に実行されるコマンド
しかし、CMDでWebサーバなどを立ち上げると、
Ctrl+Cが効かないため、
そのような場合はENTRYPOINTを使うと良い。
- Imageの名前はどんな名前でもOKだが、docker hubを使う場合は、
ユーザ名/image名になるので、それを考慮して名前をつけると良い。
Docker compose
yaml形式の設定ファイルを使った、複数のコンテナ実行方法です。
複数のコンテナを起動して、協調して動くようなアプリを作ることができます。
このDocker composeと似た機能を持つツールして、
大規模なコンテナクラスタを起動し、
それぞれの死活管理、ロードバランサー、
ポート管理などを実施するライブラリが
Googleのkubernetesです。
インストール
基本的に下記の通りに実施します。
MacとWindowsは、docker desktopをインストールすれば、
一緒にインストールされます。
Linuxは個別にcurlでインストールする必要があります。
docker_compose.yaml内で使う変数を設定する
基本的には、環境変数をシェルスクリプトのように、利用できますが、
.envファイルを使うと、ファイルに保存した値をデフォルト値として利用できます。
docker composeでは難しいこと
下記のコマンドはdocker composeのyamlファイルからは利用できないようです。
docker save
docker load
手渡しでdocker imageを渡す方法
Dockerのイメージは
Docker Hubにアップロードして共有する方法が一般的ですが、
下記のコマンドでdocker imageをtarで固めて
$ docker save IMAGE > image.tar
下記のコマンドでdocker imageを読み込むようにすれば、
$ docker load < image.tar
tarファイルを手渡しすることで、
Dockerイメージを共有できます。
またこのtarファイルは、再度gzなどに
圧縮すると1/3ほどのサイズにすることができます。
dockerを使って様々なアプリを使うときのメモ
Julia
下記のリンクは、公式のJuliaのdockerイメージです。
こちらを使うことで、Juliaをdocker上で簡単に使うことができます。
最新の安定版のJuliaをdockerで起動し、REPLを使う
$ docker run -it --rm julia
ローカルのスクリプトをdocker内で動かす
$ docker run -it --rm -v "$PWD":/usr/myapp -w /usr/myapp julia julia hello_world.jl
指定したバージョンのjuliaをdockerで起動し、REPLを起動する
0.6の場合
$ docker run -it --rm julia:0.6
指定したバージョンのjuliaでローカルのスクリプトを動かす
$ docker run -it --rm -v "$PWD":/usr/myapp -w /usr/myapp julia:0.6 julia hello_world.jl
mysql
イメージのDL
$ docker pull mysql
mysqlサーバの起動
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d -p 3306:3306 mysql
mysqlへの接続
$ mysql -h 0.0.0.0 -P 3306 --protocol=tcp -uroot -p
参考資料
Docker & Kubernetes入門 – (1) 概要編
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。