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 aufxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 92 0.2 0.0 3824 3128 pts/0 Ss 11:09 0:00 bashroot 100 0.0 0.0 6444 2520 pts/0 R+ 11:09 0:00 \_ ps aufxroot 1 0.0 0.0 7300 4420 ? Ss 11:09 0:00 httpd -DFOREGROUNDwww-data 8 0.0 0.0 1998448 2852 ? Sl 11:09 0:00 httpd -DFOREGROUNDwww-data 9 0.0 0.0 1932912 2852 ? Sl 11:09 0:00 httpd -DFOREGROUNDwww-data 10 0.0 0.0 1998448 2900 ? Sl 11:09 0:00 httpd -DFOREGROUND
-
psコマンド
psコマンドについて詳しくまとめました 【Linuxコマンド集】
ps auxf
(オプションの順番に意味はない) 操作端末のプロセスを表示し(a
)、端末操作意外のプロセスを表示すし(x
)、プロセスを改装で表示し(f
)、CPUやメモリの使用率なども表示する(u
)ということ。
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