ひろこま Hack Log

プログラミングや機械学習などの知識を記録・共有します

Docker初心者が最低限抑えておくべき10のコマンド

f:id:twx:20190429153732p:plain
Docker

Dockerのチュートリアル

Dockerそのものの解説は以下の資料が非常にわかりやすかったです。

www.slideshare.net

qiita.com

初心者がよく使うコマンド

Dockerの解説書を見るたびに「Dokcerコマンド多すぎィ!」という感情を抱くのですが、私(Docker歴2ヶ月の初心者)がよく使うコマンドは、実は10個くらいしかありません。そこで、毎回コマンドをコピペできるようにパターン化してみました。

f:id:twx:20190429163855j:plain
Dockerでよく使うコマンド

1. pull: イメージをダウンロードする

DockerHubからイメージをダウンロードするコマンドです。後述のrunで代用できるので、pull自体は実はあまり使いません。

docker pull [image_name]

2. build: イメージを作る

Dockerfileという、イメージのレシピを使ってイメージを作成するコマンドです。-tで、任意のイメージ名をつけられます。最後の引数 . はDockerfileがあるディレクトリのパスを意味しています。

docker build -t [image_name:tag] .

3. イメージの一覧を見る

イメージの一覧を見ます。

docker images

4. コンテナ化

イメージからコンテナを作成しコマンドを実行します。 --nameでコンテナに名前をつけられます。最後の引数は、コンテナ上で実行するコマンドです。コマンドを省略することもできます。その場合は、イメージごとにデフォルトで指定されているコマンドが実行されます。

docker run --name [container_name] [image_name] [command]

最後の引数はコンテナ上で実行するコマンドである、と上述しました。つまり、/bin/bashを与えれば、bashが実行されます。その際、-itオプションを付けることで、いま開いているターミナルを用いて標準入力を与えたり標準出力を得たりすることができます。(本当は違うのですが)-itオプションは、「コンテナでInTeractiveな操作ができる」というニュアンスで捉えています。

docker run -it --name [container_name] [image_name] /bin/bash


バックグラウンドで動かしたい時は-dオプションを付けます。例えば、何らかのサーバとして動かす場合です。このサーバにポート指定でアクセスしたい場合は、-pオプションでポートの設定をする必要があります。[ホスト側のポート番号:コンテナのポート番号の形式を-pオプションの引数に渡すことで、ホスト側のポートからコンテナのポートへポートフォワーディングできるようになります。

docker run -d --name [container_name] -p 8080:80 [image_name] [command]

上の例では8080を80にポートフォワーディングしています。 この仕組みを使って、DockerコンテナにSSHでログインすることもできるようになります(後述)

5. コンテナから脱出する

上述のdocker run -itを実行した結果、ターミナルでコンテナを操作できる状態になります。この状態から脱出し、元のホスト側の環境に戻るには以下の操作をします。

Ctrl p, Ctrl q

コントロールを押しながら「p」を押し、続けてコントロールを押しながら「q」を押します。

一方、SSHログイン先などから抜けるために使うexitコマンドを使うと、コンテナが落ちてしまいます。

6. コンテナに再度入る

上の操作でコンテナから抜けた後、もう一度コンテナに入るには以下のようにします。

docker attach [container_name]

7. コンテナの一覧を見る

コンテナの一覧を見ます。

docker ps

落ちているコンテナも含めてすべて見る場合は以下のようにします。

docker ps -a

8. コンテナを消す

コンテナを消します。

docker rm -f [container_id]

9. イメージを消す

イメージを消します。

docker rmi [image_name]

以上、よく使うコマンドした。commitpushなんかは、Dockerに慣れてきて自分でDockerイメージを作ったりDockerHubに投稿したりする中級者向けなので、今回は省略させていただきました。

10. おまけ: DockerコンテナにSSHログイン

DockerfileにSSHサーバを22番ポート立ち上げるコマンドを記述しておき、これでイメージを作ります。runするときに、適当なポート番号を22番にポートフォワーディングすれば、コンテナにSSHログインできるようになります。

Dockerfile

FROM ubuntu:16.04

RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:hogehoge' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

コンテナ化

docker run -d --name ssh-test -p 20022:22 ssh-test-image

ログイン

ssh root@xxx.xxx.xxx.xxx -p 20022

xxx.xxx.xxx.xxxはホスト側のIPアドレスと同じになります。

以上、今回はよく使うDockerコマンドをまとめてみました。

良い記事だと思っていただいた方は、SNSでのシェア、ブログからのリンク、「読者になる」ボタンのクリック、「★」ボタンのクリック、よろしくお願いします!

Koma Hirokazu 's Hacklog ―― Copyright © 2018 Koma Hirokazu