What is Docker container?->OSレベルでコンテナイメージを作成し、自信もイメージとして、パッケージ化している。
とりあえず、
docker container run hello-world
のcommandを実効してみると、hello-wordlというイメージかが起動され、コンテナが実効される。
この際以下の流れで物事が起きている。
1:docker クライアント(command)がdockerdemon(サーバ)に命令(demonとかクライアントとかは、docker公式ドキュメントを見ると分かる。)
2:docker demonが[hello-world]イメージをdockerhubから取得
3:docker demonがイメージからコンテナを作成。メッセージを常時するプログラムをここで実効
4:docker demonがメッセージをdockerクライアントに送信し、ターミナルに表示
docker container run -p 8080:80 nginx
--name
でコンテナに名前をつけられる。つけないと、適当に名前がつく。同じ名前のコンテナは作ることができないので、注意
docker container run --name mynginx -d -p 8081:80 ngix:1.9.15-alpine
-d
でコンテナをデーモンとして起動できる(バックグラウンドで実効)
-p 80:80
コンテナのhost portが80でmap port が80という意味。nginx
というイメージを使っている。
docker contaier ls
で現在動いているコンテナの確認
docker ps
でも可能
起動しているコンテナは
docker container stop <container name>
で停止可能
docker <サブコマンド> <操作> <オプション>
help, container, image
run, stop, rm, pull, image
--help, -d, -it, --name
docker container run <イメージ名> <コンテナで実行するcommand>
コンテナで実行するcommandは、imageごとにデフォルトで実行されるcommandが指定されているため、省略した場合には、それが実行される。
コンテナを直接操作したい場合には、-it
を用いる
-t
は--tty
オプションと-i
は--interactive
の二つをくっつけたオプション(-が省略形で、--が長い指定系)
-d,--detach
は、コンソールを離れ、バックグラウンドで起動するオプション。
フォアグラウンドで起動した場合には、コンソールでCtrl-P
Ctrl-Q
を行うとバックグラウンドに持っていける。
バックグラウンドで起動しているコンテナ端末に入るためには、container attach <コンテナ名>
を用いる。
バックグラウンドでただ、runする場合は、すぐにstopしてしまう。ただ、stopした場合でもコンテナのキャッシュが残るから、同名のコンテナを作ることはできない。
--rm
オプションは、コンテナが停止されたらコンテナを即破棄するオプションである。
docker container exec
ですでに稼働しているコンテナに対してcommand操作を行うことができるようになる。
docker container exec nginx_container date
docker container exex -it nginx_container bash
dcoker container exec nginx_container sh -c "echo 'hello docker' > /hello.txt"
docker container exec nginx_conatiner cat /hello.txt
docker conatiner inspect <コンテナ名>
で特定のコンテナの情報を知ることができる。
docker container run -d -p 8080:80 nginx
で起動したコンテナのlogを
docker container logs <コンテナID>
でlodで確認できる。
ログを継続して表示したい場合には-f
オプションを用いるdocker container logs -f <コンテナID>
-t, --timestamps
オプションで、ログにタイムスタンプをつけることができる。
コンテナの統計情報は
docker container stats
で見れるが、このままだとリアルタイムの情報を出力し続けてしまうので、
docker conatiner stats --no-stream
を用いる。
出したい情報を制限する場合には、--format
オプションを用いる。
docker conatier ls --format='tabale {{.ID}}\t{{.Names}}\t{{.Ports}}'
docker stop <コンテナ名>
でストップしたコンテナはdocker start <コンテナ名>
で再起動することができる。しかし、この場合、コンテナ上で書き込まれたデータなどは停止前の状態を引き継ぐので注意。
docker container restart <コンテナ名>
コンテナを再起動できる。この場合も、停止前の状態を引き継ぐ。
コンテナの本質は使い捨てができることなので、これらのcommandの使用はあまり推奨されていない。
停止して、状態を保持する必要があるなら、ボリューム機能などを用いて、データ永続化を行うのがよい。
コンテナの破棄はdocker conatiner rm <コンテナ名>
起動していないコンテナを全て削除する場合にはdocker container prune
を用いる。-f
を用いると消去の際の確認がなくなる。
docker container help
でcontainerカテゴリーのhelpを見ることができる。
docker contaier run --help
でdocker contaier run
のhelpを見ることができる。
たとえば、
docker search python
とすると、Docker Hub上に上がっているレポジトリの検索ができる。discriptionを全て表示する場合にはdocker search python --no-trunc
を用いる
docker search "is-official=true -f "stars=50" python
とかで、細かい指定ができる。
docker run -it -p 80:81 debian:buster /bin/bash
でdebian:buster
を土台とした、コンテナが作れる。このコンテナの中で色々操作したいから/bin/bash
を入れてる。
最初のdocker run
commandを打った段階で、コンテナの中に入れるので(-it
commandのおかげ)その中でapt getしたりして、必要なファイルを増やしていくのが、課題を進める大まかな流れになる。
-p 80:81
はlocalhost:80にアクセスすると、dockerコンテナの内部でポート81に置いて動いているアプリケーションに接続できるという意味になっている。
apt -y update && upgrade
をしないと、apt
コマンドが使える形にならない。debian"busster
や/bin/bash
の中に入っているバージョンが最新にならず、以降のインストールがうまくいかない。
apt install -y nginx
でnginxがコンテナの中にinstallできる。
service nginx start
をしないと、サービスがスタートしない
この状況で、http://127.0.0.1:80/
にアクセスすると、"Welcome to nginx!"の表示を見ることができ、実際にnginxが堂さしていることを確認できる。
apt-get install wget
を用いてwget
commandを使えるようにしないといけない。
curl
もいない。
wordpressのためには、mySQLが必要、mySQLのためには、phpMyAdmin(mySQLの操作がwebブラウザ上から可能となる)が必要、そのためには、Nginxが必要みたいな関係性が存在するみたい。
まずこのサイトからhttp://repo.mysql.com/
debian:busterの上で動くmysqlを取ってくることを考えた。
ポート番号の指定が大事。
-y
;処理中に現れるプロンプトに対して常にyesを返す。
-q --quiet
;実行時の処理状況の表示を省略
--no-remobe
;
update
;インデックスファイルの更新を行う。
upgrade
;サーバに対してインストールされている全てのパッケージの更新確認を行い、新しいバージョンが存在するパッケージに関しては更新を行う。
clean
aptを使用してローカルホストに蓄えられているrpmファイルの削除を行う。rpmファイルとは、多くのLinuxディストリビューションで使用されるバイナリによるソフトウェアのパッケージのこと。(すぐにcleanして問題ないのか?)
set -ex
があった方がいい場合があるみたいだが、なんで必要になっているのかよくわからん。
コマンドライン直打ちでできることがdocker fileになるとうまくできない。
nginx.confについて:ect/nginx/nginx.confにいる。