こんにちは。'20/4/20からWebエンジニアのインターンを始めた専門1年の18歳です。
エンジニア歴10日なので、間違った表現があればご指摘いただけると幸いです。
What
Dockerコンテナを起動 → コンテナに入るまでの手順
環境・前提
・Docker version 19.03.8
・docker-compose version 1.25.4
・macOS Catalina 10.15.4
・プロジェクトがある(元々あるか、GitHubなどからcloneしてきた)
・Dockerのインストールが済んでいる
Why
4/20からWeb開発の長期インターンを始めました。
しかし、初業務×リモート作業という状況の中、ローカルでの統合開発環境しか使ってこなかった僕にとって「Dockerの中に入って...」という表現すらよく理解できていませんでした。
そんな駆け出しエンジニア様のサポートに少しでもなれば幸いです。
How
####1. 現在のコンテナを確認
ターミナルを起動し、プロジェクトのあるディレクトリ内で
$ docker-compose ps # コンテナ一覧表示
を実行します。コンテナが存在すればコンテナの名前や状態(起動していないときStateの項目はExit)が表示されているはずです。
もし、上記のコマンドを実行し、
ERROR: Couldn't connect to Docker daemon. You might need to start Docker for Mac.
とエラーメッセージが出ていたら、Macのナビゲーションバーを確認してください。
このようなDockerのアイコンが表示されていなければDockerアプリケーションが起動していませんので、アプリを起動した状態にしてください。
####2. コンテナ起動
コンテナがあることが確認できたら、それらを起動していきます。
$ docker-compose up # プロジェクト内のコンテナすべて起動
最初の起動には少し時間がかかるかもしれません。コンテナの数が少なければ30秒程度ですが、2,3分かかる場合もあります。起動が成功すると、コマンドラインにUse Ctrl-C to stop
と表示され、入力待ち状態($や#の表示)でないままになります。
####3. 起動の確認
コンテナを起動すると入力ができない状態になってしまうので、ここからは別のタブで操作していきます。
まず、ターミナルのウィンドウを選択した状態で⌘キー+T
を行い、別タブを開きます。このとき、現在のディレクトリはDockerを起動した先ほどのままなので移動する必要はありません。
先ほどの$ docker-compose ps
をここで実行すると、コンテナがきちんと起動していればStateの項目がUpになっています。
####4. コンテナに入る
※この後も【3.起動の確認】のように別タブの状態で進めていきます。
$ docker-compose exec #{container} ${command}
起動しているコンテナに対してコマンド実行を行うには、この操作が必要になります。Docker execコマンドは簡単に表現すると、『対象のコンテナで、対象のコマンドを実行する』というものです。(参考ページ)
今回はコンテナの中に入りたい。つまり、中でLINUX操作を行える必要があります。そのために、Bashを起動するとします。すると、
$ docker-compose exec #{container} bash
これでbashを起動する、コンテナに入るということになります。
そしてコンテナ名はdocker-compose.yml
の中に書かれています。(以下は一部)
version: '3'
services:
web: <-- サービス名(コンテナ名)
build: .
db: <-- サービス名(コンテナ名)
image: mysql:5
説明が長くなりましたが、つまるところコンテナ内に入るには
$ docker-compose exec web bash
ということになりますね!(コンテナ名はdocker-compose.ymlの内容によって変更して下さい)
End
僕自身Dockerを知ったのがつい9日前なので、まだまだ理解が追いついてない部分が多いです。
今回使用したDockerコマンドは'exec'と'ps'のみですが、他にもたくさんコマンドが用意されてるようですね。
今後も自身がつまづいた部分などを中心に情報発信できたらと思います。ありがとうございました!