はじめに
Dockerってほんとに便利ですよねぇ。
以下では、Dockerのインストール方法とよく使うコマンドを書いていきます。
Dockerとは
- アプリケーションとその依存関係を”コンテナ”と呼ばれる包装にパッケージ化できるプラットフォーム
- HyperVisorによるゲストOS仮想化と比べると、軽量でリソース効率的と言われている
以下のようなコンテナのイメージのバージョンのことをTagという。
「nginx:1.14-perl」のようにTagを指定する。
DockerFile
DockerFileに、取り込むimageのTagや起動後にインストールしたいパッケージ、実行したいコマンドを記載することができる。
FROM ubuntu:18.04
RUN apt-get -y update && apt-get install -y apache2
CMD ["apachectl","-D","FOREGROUND"]
FROM:元にするイメージを指定
RUN:Buildするときに実行したいコマンドを書く(インストールコマンドなど)
CMD:コンテナ実行時に実行したいコマンドを書く
CMDの例
- shell形式
CMD service mysqld start - exec形式
CMD ["apachectl","-D","FOREGROUND"]
参考
データ管理
コンテナは停止後にデータが消えてしまう。ホストOS上の特定のディレクトリをvolumeとしてmountするなどの方法がある。
ネットワーク管理
コンテナ同士でデータをやり取りする方法がいくつかある。
詳しくは以下の記事を参照(私の記事です)。
Dockerのインストール(Ubuntu 18.04)
sudo apt-get remove docker docker-engine
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install -y docker-ce
sudo docker -v
出力例
Docker version 24.0.5, build ced0996
よく使うコマンド
ローカルのイメージの確認
docker images
イメージの実行
docker run hello-world
docker run docker/whalesay cowsay hello world
ローカルにイメージがなければDocker Hubから取得して実行します。
上記のようにTagを指定しない場合、latestのタグが付いているイメージが実行されます。
コンテナを対話的なモードで起動し、ターミナルに接続する
docker run -it —rm -p 10081:80 ubuntu:18.04
ホストの10081ポートをコンテナの80ポートにフォワーディングするという設定になっています。
サーバとして動くようなコンテナでは、この「-d」を指定しないと、コンテナが終了するまでプロンプトに戻ってこなくなってしまうので、これは指定必須です。
—rmを指定すると、実行後に自動的にコンテナを削除します。
—nameを指定すると、その名前でそのコンテナに対して操作ができるので、コンテナIDをコピペしなくて済みます。
参考
Docker Hubからdockerユーザのwhalesayというイメージをダウンロード
docker pull docker/whalesay
Dockerfileからdocker-whaleイメージを作成する
docker build -t docker-whale .
ローカルイメージの詳細確認
docker inspect docker-whale
ローカルイメージの構築履歴表示
docker history docker-whale
ローカルイメージのタグ付け
docker tag イメージID ユーザ名/docker-whale:latest
Docker Hubへのログイン
docker login
タグ付けしたイメージのpush
docker push ユーザ名/docker-whale
ローカルイメージの削除
docker rmi –f docker-whale
起動中のコンテナ一覧を表示する
docker ps
停止中のものも含めて全てのコンテナ一覧を表示する
docker ps -a
停止中のものも含めて全てのコンテナ一覧を表示する(コンテナIDのみを表示)
docker ps -aq
全てのコンテナを削除
docker rm $(docker ps -aq)
該当のIDのコンテナを起動/停止/再起動する
docker start/stop/restart [コンテナID]
起動状態のコンテナにログイン
docker attach [コンテナID]
なお、tomcatコンテナなど、本来バックグラウンドで実行されることを前提としているコンテナにはattachではコンソールに入ることができません。よって、以下のような手順を踏みます。
docker run -d -name tomcat -p 8080:8080 tomcat:tag
docker exec -it tomcat bash
コンテナからイメージを作成する
docker commit [コンテナID] ubuntu_img(イメージ名)
コンテナの/app/data.txtをホストの/home/userにコピーする
docker cp [コンテナIDかコンテナ名]:/app/data.txt /home/user
参考:
https://qiita.com/gold-kou/items/44860fbda1a34a001fc1