Dockerの勉強を始めました。これらの知識を忘れないようにメモとして残します。なお、本投稿はUbuntu20.04上で動作することを前提として書いています。
#Dockerのインストール
下のコマンドでDockerをインストールできます。
$ apt install docker docker-compose
#イメージ関連
他の人が作成したイメージをDockerHubからダウンロードができます。これにより自分で作る必要がなくなります。
- DockerHubに置いてあるイメージを探す
このNAME
欄に書かれている名前がイメージ名です。
$ docker search nginx #nginxを探す
$ docker search -f is-official=true nginx #公式のみ検索する場合
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14228 [OK]
- イメージをローカルにダウンロードする
ここで入力する名前は、先のイメージ名を使ってください。
$ docker image pull nginx #イメージ(nginx)をダウンロードする
- ローカルにダウンロード済みのイメージを調べる
$ docker image ls
- ローカルにダウンロード済みのイメージを削除する
$ docker image rm nginx #nginxのイメージを消す
$ docker image prune -f #使用していないイメージをすべて消す
#コンテナの起動・停止・削除
イメージをダウンロードしたら、そのイメージからコンテナを作成します。
- コンテナの実行
コンテナを作成し実行します。
--rm
はコンテナが終了すると同時にコンテナを削除します。
--it ~~ bash
はコンテナ実行直後にbashを実行してキーボード入力を受け付けます。
--name
はコンテナに名前を付けます。
-d
はコンテナをバックグラウンドで実行し続けます。
$ docker container run --rm -it nginx bash #コンテナを作成・実行し、そのコンテナにbashで入り、bash終了後はコンテナを破棄する
$ docker container run --name websv -d nginx #バックグラウンドでwebsvというコンテナ名で実行し続ける
- コンテナの検索
作成したコンテナを検索します。
$ docker container ls #現在実行中のコンテナのみ表示する
$ docker container ls -a #停止しているコンテナも表示する
- コンテナの停止
$ docker container stop websv
- コンテナの再開
$ docker container restart websv
- コンテナの削除
$ docker container rm websv #コンテナ名websvを削除する
$ docker container prune -f #停止しているコンテナを全て削除する
#実行中のコンテナへの操作
バックグラウンドで動いているコンテナに対し操作を行います。
- コンテナでシェルを実行する
$ docker container exec -it websv bash #コンテナwebsvにbashで入る
$ docker container exec websv bash -c "echo 'Hello'" #コンテナwebsvでechoコマンドを実行する
- コンテナの標準出力を見る(ログを見る)
公式のnginxイメージではアクセスログは標準出力に出ます。(コンテナからデータを取り出す必要はありません。)
$ docker container logs websv
#コンテナ起動時のオプション
コンテナの起動オプションには、便利なものがたくさんあります。
- ポートフォワード
-p
を使えばホストに入ってきた通信をポートフォワードしてコンテナに渡すことができます。下の例ではホストのTCP8080に来た通信をコンテナのTCP80に転送しています。なおUDPを受ける場合には、-p 514:514/udp
と書きます。(syslog:UDP514の例)
$ docker container run --name websv -d -p 8080:80 nginx
- ファイルのマウント
ホストに置いてあるファイルやフォルダをコンテナにマウントします。下の例ではホストの/home/hoge/index.html
でコンテナの/usr/share/nginx/html/index.html
を置き換えています。なおreadonly
を付けることにより、コンテナ側からホスト上のindex.html
への書き込みを禁止しています。
$ docker container run -d --name websv -p 8080:80 --mount type=bind,src=/home/hoge/index.html,dst=/usr/share/nginx/html/index.html,readonly nginx
#さいごに
色々調べてやっと簡単なページを作れるまでに至りましたが、まだまだ先が長そうです。