任意のDockerコンテナ上でbashを起動する
結構な頻度でdockerを使ったことがない人から"どうやって操作するの?"って聞かれるのでまとめます
まずDockerはイメージとコンテナがあり、イメージからコンテナまたはコンテナからイメージを作ることができます
普通(?)はイメージからコンテナを作ってそこで遊ぶはずなので、ここではコンテナを操作するということですね
イメージからコンテナを起動する
多くの人は目的に近いイメージから派生させてカスタムしてると思います
カスタムする方法はDockerfileやdocker-composeなどがありますね
もちろんコンテナからイメージを作れるのでそれでもOKです
まぁとりあえずコンテナを操作したいのですからdocker-composeでもなんでもよいのでコンテナを起動しましょう
例えば下記のようにするとubuntuコンテナを起動できます
docker run -it ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
7996ebd2246a: Pull complete
de532f9a4f9f: Pull complete
7de2709b2a83: Pull complete
70b6ac64a142: Pull complete
23caf550e032: Pull complete
Digest: sha256:30e04ddada6eb09c12330c7df72cad1573916c7100168c34076808169ff6d805
Status: Downloaded newer image for ubuntu:latest
root@75def10f3f33:/#
はい。rootで操作できてますね
これで目的は達成です
既に存在する起動済のコンテナに対して操作したい
先程のでもよいですが、あの例のままでは毎回別のコンテナとして起動してしまいます
多くの場合、起動済みのコンテナに対して接続したいはずですね
そのためにまずは操作する対象のIDを手に入れます
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7316979b7143 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds serene_ptolemy
17f439cf0d99 ubuntu "/bin/bash" 16 seconds ago Exited (0) 11 seconds ago dazzling_heyrovsky
75def10f3f33 ubuntu "/bin/bash" 7 minutes ago Exited (130) About a minute ago jovial_keller
ここで、操作したい対象コンテナIDを7316979b7143とします
操作対象のコンテナは起動(STATUS=UP)してないとダメです
コンテナ内を操作する
docker exec -it 7316979b7143 /bin/bash
root@7316979b7143:/#
このようにdocker execコマンドで操作できます
標準入出力等を使うので-itオプションを付けて、コマンドにはbashを指定して起動しています
ただそれが実行されるだけなのでコマンドはbash以外でも良いです
ここではコンテナ内を操作したいのでbashを指定しています