Dockerって難しいよね
Dockerコマンド関係メモ
正直触りまくってコマンドとか使い方を覚えてる人は化け物って思います。
おじさんは記憶力がなくなってきてるのでメモ残さないと無理!
とりあえずWEBを彷徨いながらWindows、Linux(Ubuntu)共にDockerを使える様にしています。
ただ使う上ではLinux系の方が情報も多いのでメモとしてはこっち基準です。
windous10上でGit Bashも入っています。(スクショが楽だから)
コマンドについて(Linux系)
復習も兼ねて基礎的なものを記載します。
コマンド | 意味・用途 |
---|---|
cd <Path> (current directory) |
指定したパスに移動する |
pwd (print working directory) |
今いるディレクトリの表示 |
mkdir <new folder> (make directory) |
新しいフォルダを作成する。 |
touch <new file> | 新しいファイルを作成する。 |
ls | カレントディレクトリのファイル、フォルダを一覧表示(list) |
rm <file> | ファイルを削除する。 |
rm -r <folder> | フォルダーを削除する |
reset | ターミナル表示をリセットする (今いるディレクトリはそのまま) |
これだけ羅列しても初心者にはわかりにくいと思うので写真で説明します。
cd / pwd / ls
Linux系(Ubuntu)でターミナルを開くとhome/ユーザー
位置にいます
WindowsだとC/ユーザー/user
位置にいます。
まずはターミナルを立ち上げ、pwd
と打ち込むと現在位置が分かります。
次にls
と打ち込むことで今いる場所のフォルダ・ファイル一覧が表示されます。
Windows的な使い方を言語化するならフォルダを開いて中身を確認するって感じです。
次にcd
だがデスクトップ上に移動する前提でいうと
cd Desktop
と打ち込むことでデスクトップ上に移動する。
これでデスクトップ上に移動した事となります。
cd /○○○/△△△
と指定すればダイレクトで指定したディレクトリに移動出来ます。
mkdir / touch
Windowsに慣れてると右クリック→新規作成→フォルダみたいにやってますが
ターミナル上の操作だとそうはいかんです。
前述で移動したデスクトップ上にフォルダを作ってその中になんかファイルを作るていで説明します。
作るフォルダの名前をqiita_test
とします。
mkdir qiita_test
これでフォルダ作成されます。
次にtouch
を使ってファイルを作成する。
ファイルを作成するにあたりmkdir
で作ったqiita_test
に移動しておく
移動先でls
と打ち込むと空のはず
そこでtouch qiita_test.txt
と入力すると・・・
新規ファイルとして作成されます。
いつも慣れている画面で行くと
ターミナルから作ったファイルを開くにはvim
やnano
等のエディターを用いると開けます。
Linux系だと設定ファイルの変更等でよく使用しますがここでは説明を割愛します。
rm / rm -r
次は削除について
rm
についてはファイル削除
前述のqiita_test.txt
を消してみる
てな感じで削除されます。
続いてrm -r
で作ったqiita_test
フォルダを削除してみます。
削除の際はディレクトリを前の階層(Desktop
)に移動しておくとよいと思います。
ちなみに前の階層にはcd ../
で戻る事が出来ます。
大分前振りが長くなりましたが基本的なLinux系コマンドは以上となります。
他にも多数ありますがまずはこれで
Dockerコンテナ内での作業でも使用するので使用頻度は多いと思います。
あとLinux系コマンドめっちゃ多いので詰まれば都度調べながらは未だに変わりません。
コマンドについて(Docker)
今回の説明でDocker Hubをメインとしています。
アカウント登録済み前提となります。
Docker Hub ← 公式です。
全部網羅出来ているとは思いません。
とりあえず使うであろうものを羅列しました。
また、リスト内の<IMAGE_ID>
や<CONTAINER_ID>
については下記図の部分を差します。
コマンド | 意味・用途 |
---|---|
docker -v | インストールしたDockerのバージョン確認 |
docker login | Docker Hubにログインする。 |
docker logout | Docker Hubからログアウトする。 |
docker pull <IMAGE_ID> | Docker Hubからイメージを持ってくる。 |
docker images | ホスト(PC)に今あるDockerのイメージのリストを確認する (コンテナの設計図データ) |
docker rmi <IMAGE_ID> | イメージの削除。 |
docker iamges -aq | xargs docker rmi | イメージの全削除 (要コンテナがないこと) |
docker run [option] <IMAGE_ID> [command] | イメージからコンテナを生成する (設計図からコンテナを立ち上げる) |
docker ps | 今あるアクティブなコンテナを確認する。 |
docker ps -a | すべてのコンテナを確認する。 |
docker rm <CONTAINER_ID> | コンテナを削除する。 |
docker ps -aq | xargs docker rm | コンテナの全削除。 |
docker system prune | コンテナの全削除。 |
docker stop <CONTAINER_ID> | STATUSがUpのコンテナを停止させる。 |
exit | 作業していたコンテナから抜ける。 (作業していたプロセスを切ってコンテナから抜ける) ( docker ps -a で確認するとSTATUSはExitedになっている ) |
docker restart <CONTAINER_ID> | 抜けたコンテナを再起動する。 |
docker exec [option] <CONTAINER_ID> [command] | 再起動したコンテナに入る。 (restartしておかないとエラー出ます) |
Ctrl +p +q
|
作業していたコンテナから抜ける。(detach) (作業していたプロセスを残したままコンテナから抜ける) ( docker ps -a で確認するとSTATUSはUpのまま) |
docker attach <CONTAINER_ID> |
Ctrl +p +q (detach)で抜けたコンテナに再度入る。(exitで抜けた場合は使わない) |
docker commit <CONTAINER_ID> <new image> | 触ったコンテナを更新して、更新内容をDocker imageにする。 |
docker tag <source> <target> | Docker Hubにpushするイメージの名前を新しくして保存する。 (要Docker Hubにrepositoryを作ってある事) |
docker push <IMAGE_ID> | Docker Hubにあるリポジトリにdockerイメージをpushする。 (要Docker Hubにrepositoryを作ってある事) |
簡単ですが以上が基本的なコマンドとなります。
恐らく突き詰めるともっとありますが道半ばなので今はこれで勘弁して下さい。
実際にDockerを触ってみる
文字ばっかりだとイメージが付きにくいのざっくりとだが流れをば
まぁ以降は蛇足感はありますが・・・
使うのはDocker Hubにある『hello-world』とこちらに書かれている『docker run -it ubuntu bash』を触ります。
ちなみにDocker Hub公式イメージ
①ログインからイメージを持ってくる(確認も含む)
docker login
をするとDocker Hubにログインします。
この際、user名とパスワードを入力します(Linuxはパスワードが表示されなのははじめ知りませんでした。)
docker pull hello-world
で公式よりイメージを持ってきます。
docker run hello-world
で持ってきたイメージからコンテナを生成します。
このhello-world
はコンテナ生成してターミナルにコメントを表示してコンテナを抜けて終了となります。
docker ps -a
でコンテナ一覧を確認するとhello-world
で生成されたコンテナ履歴が出ます。
ここの『STATUS』がexitedとなっているので抜け事もわかります。
次にhello-world
コメントにある『docker run -it ubuntu bash』を試してみます。
docker run -it ubuntu bash
あれ?イメージ持ってきてないけど?と最初は思いましたが
どうもホスト側(ローカル)にイメージがない場合はDocker Hubからイメージを勝手に持ってきます。
するとターミナルで
root@○○○○○○○:/#
となります。
ルート権限でコンテナ内のubuntuを使用出来る様になります。
ここでls
等を使いながら色々と環境構築をしていき
開発に必要な環境を作っていく事となります。
コンテナからはexit
で抜けれます。
docker ps -a
で確認するとubuntuが追加されてます。
docker images
でイメージを確認してもubuntuが確認出来ます。
②コンテナに再度入ってみる
docker ps-a
でコンテナを確認すると『STATUS』がExited
になっていると思いますが
この状態では再度コンテナ内に進入出来ません。
コンテナの再起動が必要となります。
それがdocker restart <CONTAINER_ID>
となります。
すると『STATUS』がUp
に変わりますのでこの状態でdocker run -it ubuntu bash
と打ち込めば
コンテナ内に入れます。
コンテナ内では普通のubuntuとして使用可能なのでmkdir qiita_test
とか全然できます。
ただこの時点で公式から持ってきたイメージから立ち上がったコンテナとは違うものになります。
しれっとコンテナが増えています。こっちが追加した方です。
再起動したコンテナには追加したqiita_test
がないことからもわかると思います。
③更新したコンテナから新しいイメージを作成する
docker commit <CONTAINER_ID> <new image>
これで新しいイメージとして保存されます。
<CONTAINER_ID>
は上記の図でいう所の新しく出来たコンテナ(9bc42039a04c
のこと)
<new image>
はubuntuを触ったからubuntu
に:qiitatest
はタグとなります。
これで手を加えたコンテナのイメージが出来ます。
④新しくしたイメージをDocker Hubに上げる(準備編)
公式のリポジトリからイメージを持ってきているが
勝手に手を加えてるのに公式に戻すってのはおかしいので
自身のアカウントでリポジトリを作成しておく必要があります。
但し、Docker Hubは無料で使える範囲は限られています。
無料だとリポジトリーは1つしか作成できないようです。
この辺りはプロジェクト単位か会社として有料版にした方がよいのでは?と思います。
今回は事前にアカウントを登録してかつ無料を享受したい立場として進めます。
『Create a Repository』をクリック
『Repository Name』を入力して『Create』をクリック
Public
or Private
についてはお好みです。
これでリポジトリを作成できます。
私はmy-first-repo
と命名しました。
pushする際、ユーザー名とリポジトリ名が必須となりますのであまり変な名前にしない方がよいかと
⑤新しくしたイメージをDocker Hubに上げる(pushする)
リポジトリ名がpullしてきたときと同じでは公式に勝手にいじったイメージをぶん投げるだけなので
リポジトリ先を変更する必要があります。
docker tag <source> <target>
<target>
の部分は自分のユーザー名と作ったリポジトリ名となります。
私の場合はtakoyakiya/my-first-repo
となります。
docker images
で確認すると追加されていることが分かります。
ただ、IMAGE_ID
は同じです。
pushする先が違うとの認識でOKと思います。
次はdocker push <image>
となります。
私の場合はdocker push takoyakiya/my-first-repo
です。
Docker Hub側でpushされたことが確認出来ます。
まとめ
ざっくりとした流れは以上となります。
現時点ではまだまだ理解が浅く使いこなせていないのが実情です。
ただ、ローカル側でVENV等で仮想環境を一から構築するよりは
この環境で行く!って方が楽ちんなのは確かです。
後はdocker run ~
以降の物理層とのマウント関係オプションが理解出来れば御の字です。
Author And Source
この問題について(Dockerって難しいよね), 我々は、より多くの情報をここで見つけました https://qiita.com/bobrock/items/26a5ae31fbaffa0f0b9f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .