morimura-tech

dockerを実際に触ってみよう

2025-04-27

docker image をpullして立ち上げよう。

まずはDocker Hubからimageをpullしてみよう

docker pull httpd

これでapacheのdockerイメージを取得できた。

以下のコマンドは打たなくていい

docker pull httpd:2.4.57

など:で区切りtagを付与すると、バージョンの指定などができる。

docker create -p 8080:80 --name apache httpd

このコマンドはdocker createでコンテナを生成、-pでホストの8080ポートをコンテナの80ポートに繋ぐ(ホストの方を省略すると自動で設定される)—-nameでコンテナにapaheという名前をつけ、最後のhttpdがdockerイメージの名前をつけれる。--name オプションで割り当てなければ、デーモンはランダムな文字列から名前を生成します。

docker start apache

これでapacheというdockerコンテナを立ち上げます。

docker exec -it apache bash

docker execはpidが1ではないbashに繋がることによってexitしてもdockerコンテナが終了しないようにす。dockerコンテナはid1が終了すると自動的にコンテナ自体も終了する。

-i--interctiveと同じ意味を持つ。-iの意味はデバイスの入力を受け付けることを示すコマンド。これがないとキーボードを叩いても受け付けてくれない。STDINをツアタッチしていなくても開き続けるということらしい。(まだ詳しく理解していない)

STDIN は、STanDard INput(標準入力)の略。

-t—ttyと同じ意味を持つ。-tの意味はttyコマンドから来ており、偽の端末情報を登録し、ホスト側のターミナルで入力したものをdockerコンテナに移すようにしている。

要は、ホスト側のキーボードをdockerコンテナに接続しているようなもの。

TTYは、TeleTYpewriter の略。

以下が略さずに書いた例

docker exec --interactive --tty apache bash

ps使うためにapt install する。

apt update && apt install -y procps

私の場合だと、PIDが92に接続している。

root@ee1f3f4f70dc:/usr/local/apache2# ps aufx
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 92 0.2 0.0 3824 3128 pts/0 Ss 11:09 0:00 bash
root 100 0.0 0.0 6444 2520 pts/0 R+ 11:09 0:00 \_ ps aufx
root 1 0.0 0.0 7300 4420 ? Ss 11:09 0:00 httpd -DFOREGROUND
www-data 8 0.0 0.0 1998448 2852 ? Sl 11:09 0:00 httpd -DFOREGROUND
www-data 9 0.0 0.0 1932912 2852 ? Sl 11:09 0:00 httpd -DFOREGROUND
www-data 10 0.0 0.0 1998448 2900 ? Sl 11:09 0:00 httpd -DFOREGROUND
exit

で抜ける。

他にも、

docker attach apache

docker attach はPIDが1のところに標準入出力が接続される。それによって、exitコマンドを発行した場合、PIDが1のプロセス(ルートプロセス)が終了するのでコンテナも終了する。

httpdの場合、上のプロセス表のようにPID1がhttpdデーモン(httpd 0DFOREGRAND)になっているため、コマンドを打ってもbashに繋がらず、操作できない。

docker ps

で現在稼働しているコンテナの一覧を表示することができる。

docker ps -a

現在存在しているコンテナ一覧を表示

docker images

でdockerのimageを確認できる。

上記のやり方だと3回コマンドを打たなけらばならない

  • docker pull httpdでdockerイメージを引っ張ってくる
  • docker crate --name apache httpdでdockerコンテナをapacheという名前で生成
  • docker start apacheでapacheというdockerコンテナを立ち上げなければならない

これはめんどくさい

ということで、これらを一つのコマンドで行う。

  • なぜか入れない()

    docker run -d -it --name apache2 httpd /bin/bash
docker run -d -p 8080:80 --name apache2 httpd

これにより3つのコマンドが1つになった。もし、httpdイメージがなければdocker hubから勝手にpullしてくれる。あれば、それを使う。-dはバックグラウンドで実行させる。-dをつけないとlogが常に出た状態になる。(logを確認したいなら-dをつけなくてもいい)

最後にdockerで何かトラブルが起きたら(立ち上がらないなど)、

docker logs apache

docker logs コンテナ名でlogを確認することをお勧めする。

これで基本的なコンテナの立ち上げができるようになった

dockerイメージをコマンドで作る


docker commit apache apacheps

これで、psをインストールした状態のイメージが生成できる.

docker run -d --name apacheps apacheps

でdockerコンテナを作成、起動

docker exec apacheps

で中にはいいて、

ps aufx

すると、インストールしていないのにpsが打てる。

docker hubに上げてみる

docker login

でdocker hubにログイン

docker tag apacheps soyokaze0125/apacheps:test

docker tag [元のイメージの名前] [docker hubアカウント]/[イメージ名]:タグ

docker push soyokaze0125/apacheps:test

これでdocker hubにアップロードする。

docker image を消す

docker stop apacheps

でapchepsコンテナを止める

docker rm apacheps

でコンテナを削除。

ただしイメージは残っているので、ストレージ圧迫の原因になる。

docker rmi apacheps

apacheの方もやる。apacheの方のイメージ名はhttpd

【図解】Dockerの全体像を理解する -前編- - Qiita

Dockerのiオプション、tオプションについてのメモ

docker exec -it の -it の意味