MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

初心者のためのDockerの使い方メモ

目次

はじめに

近年、効率的なソフトウェア開発において、

Dockerは広く使われています。

 

今回は、Docker初心者の自分が、

一からDockerを勉強した際のメモです。

 

自分の場合、冒頭の本を一冊読んでから、

あとは自分のやりたいことをネットで

調べながらDockerを勉強しました。

この本は、初心者にもかなりわかりやすく説明していると思います。

 

Dockerとは?

Dockerは、Virtual BoxやParallelsなどのような、

VMを作成するソフトウェアの一つですが、

Linuxのコンテナ技術を使って、

VMを軽量で高速に起動、停止などを可能にしたものです。

www.docker.com

つまり、

より気軽に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を手動で変更できます。

qiita.com

 

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です。

kubernetes.io

 

インストール

基本的に下記の通りに実施します。

docs.docker.com

MacとWindowsは、docker desktopをインストールすれば、

一緒にインストールされます。

Linuxは個別にcurlでインストールする必要があります。

 

docker_compose.yaml内で使う変数を設定する

基本的には、環境変数をシェルスクリプトのように、利用できますが、

.envファイルを使うと、ファイルに保存した値をデフォルト値として利用できます。

docs.docker.com

 

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

qiita.com

参考資料


Docker & Kubernetes入門 – (1) 概要編

qiita.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com