Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2914

ゼロから始めるDocker入門

$
0
0
はじめに 実務でDockerの使用をしていますが 「雰囲気で使用してしまっている」 「言語化できていない」 ところがあったので基礎を学習し直しました。 実際に使用してみると自分の理解できていない部分が見えてくると思うので 私の記事を読んでいただけた方は自分の環境でも試してみると 内容が理解しやすいかもしれません。 記事のボリュームが大きくなりすぎてしまうため 記事を三部構成にしました。(途中から読んでも理解できる構成にしています。) Docker + Dockerコマンド ←今回はここ Dockerfile docker-compose 以上のような形で執筆いたします。 対象読者 Dockerを使ってみたいけどどのように使えば良いかわからない方 実務でなんとなく使っている方 短時間で主要部分を抑えたい方 この記事から得られること Dockerとは Docker imageからコンテナを作成 Dockerの基礎になるコマンド 前提 Docker Desktopの導入 目次 はじめに 対象読者 この記事から得られること 前提 目次 用語 コンテナ Docker Image Dockerのメリット Dockerのワークフロー 簡単チュートリアル ①Docker imageの取得 ②コンテナの作成 Docker client と Docker daemon Docker client Docker daemon dockerコマンド docker run docker run -it bash docker run --name <コンテナ名> docker run --rm docker run -v <ホスト側パス>:<コンテナ側パス> docker run -p <ホスト側ポート>:<コンテナ側ポート> docker run -it -u $(id -u):$(id -g) イメージ docker images docker rmi docker rmi -f docker tag <変更後のimage名> <変更前のimage名> docker image prune コンテナ docker ps docker ps -a docker rm docker rm -f docker system prune docker exec -it その他 docker network ls docker network rm docker inspect コマンド早見表 おわりに 参考文献 おすすめ教材 用語 頻繁にでてくる用語を整理します。 コンテナ コンテナとはDockerの持つ仮想化技術のことです。 Docker Image イメージとはコンテナのベースとなるものです。 ubuntu や alpine などのOSや MySQL や Ruby のようなものまであります。 イメージは レイヤ構造 になっていて、イメージやレイヤを重ねていくことによって一つのイメージを作成し コンテナ(環境) を作成していきます。 Dockerのメリット Docker環境を構築することは様々なメリットがありますが主なものを3点まとめました。 1. 環境構築が容易 2. 構築した環境の配布・共有することができ、誰でも同じ環境を作ることができる 3. Web業界でよく使用されている技術なので学んでおいて損がない Dockerのワークフロー Docker では Docker image を 使用・作成 してコンテナを作成していきます。 を Git で管理して GitHub などに push することでコンテナ(コンテナ)をチームのメンバーと共有します。 (他にも方法があると思いますが、この方法が一般的だと思いますので今回は省略します。) 簡単チュートリアル Dockerコマンドで挙動を確認しながら以下の流れを追っていきます。 ①imageを取得 ②コンテナを作成 ①Docker imageの取得 Docker Hub という Docker Registry から コンテナのベースとなる image を取得します。 pull コマンドを使えば取得できます。 今回は hello-world というimageを取得します。 下記リンクの左上の検索窓から色々な image があることを確認できます。 ターミナル docker pull hello-world ターミナル docker images # 以下のような形で出力されれば正常にimageを取得できています。 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 5 months ago 13.3kB ②コンテナの作成 今取得したimageを使ってコンテナを作成します。 docker images で確認できますがコンテナを作成するときは IMAGE ID を使用してコンテナを作成します。私の場合は d1165f221234 です。 ターミナル docker run d1165f221234 # 出力結果 ## hello-world imageからコンテナを実行すると以下のように出力されるようにプログラムされている。 Hello from Docker! This message shows that your installation appears to be working correctly. ## どのような手順を行ったのか To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. ## ubuntu はこちらのコマンドで実行できます。 To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ ## Dockerチュートリアル For more examples and ideas, visit: https://docs.docker.com/get-started/ Docker client と Docker daemon hello-world の出力結果の中に Docker daemon と Docker client という単語がでてきましたので簡単にご説明せていきます。 Docker はクライアント・サーバ型のアーキテクチャなのでクライアントとサーバがあります。 クライアントというのが Docker client サーバが Docker daemon のことです。 もっと詳しく知りたい方はドキュメントを見ると図も乗っているので理解しやすいです。 Docker client Docker を使用している自分(ホスト)のことです。 ホストが Docker daemon に命令を出して image や コンテナ を作成します。 命令というのは Docker run などのDockerコマンドのことです。 流れとしては Docker client からサーバーにある Docker daemon に命令を出して Dockerオブジェクト を操作しています。 Docker daemon Docker daemon は Docker client からの命令(コマンド)に従って Dockerオブジェクト を操作します。 dockerコマンド Dockerコマンドはたくさんありますが、その中でもよく使うコマンドをご紹介していきます。 docker-compose や Dockerfile については次回の記事以降で触れていきたいと思います。 docker run docker run コマンドは イメージ がなければ Registry からイメージを pull してコンテナを作成実行してくれるコマンドです。 docker run -it bash たとえば ubuntu のイメージを指定するとコンテナに入ることができます。 (※イメージにシェルが入っている必要があります。) -it は -i と -t をあわせたものです。 -i はinput(入力を可能にする) -t はtty(表示する) docker run --name <コンテナ名> docker run をしてコンテナをたてた場合コンテナ名は適当なものが勝手につけられてしまいます。 なにかと区別したい場合、管理したい場合は --name オプションでコンテナ名をつけてコンテナを作成することができます。 docker run --rm docker run を実行して作成されたコマンドは消えません。 コンテナを実行して終了したとき同時にコンテナの削除をしたいときは --rm フラグをつけると コンテナが削除されます。一時的にコンテナを立てたい時などに便利です。 --rm はリムーブの略です。 docker run -v <ホスト側パス>:<コンテナ側パス> ファイルを共有することができます。 具体的にいうとホスト側のファイルをコンテナ側にマウントするということです。 マウントをすることで、コンテナからホストのファイルやフォルダを操作することができます。 docker run -p <ホスト側ポート>:<コンテナ側ポート> コンテナで指定したポートをホスト側で公開することができます。 -p は publish の略で 公開 という意味があります。 たとえば docker run -it -p 8000:80 nginx と指定すれば ホストの port8000番にアクセスすることでコンテナの80番ポートを見ることができます。 docker run -it -u $(id -u):$(id -g) docker run をして立てたコンテナに入るとデフォルトだと rootユーザー であることがわかります。 ユーザーを変更したい場合は -u オプションをつけ userId や groupId を渡すことでそのユーザーでコンテナを起動することができます。 イメージ docker images 作成したイメージの一覧を見ることができます。 イメージの一覧なので images です。複数形なことに注意します。 docker rmi 作成したイメージを削除したいときに使うコマンドです。 消したいイメージのIDを指定して rmi をつけることでイメージの削除をすることができます。 rm はリムーブ(削除する) と i image(イメージ) という意味です。 rm と非常に似ているので注意します。 docker rmi -f -f フラグは強制的にという意味合いがあります。 どうしても削除したときは使用しましょう。 (削除できないときは立てたコンテナで使用しているイメージだったりとなんらかの原因があるはずなので多用はしないほうが良いかもです。) -f はforce(強制的)という意味です。 docker tag <変更後のimage名> <変更前のimage名> docker imageは基本的に作成したときは latest というタグがつけられます。 これを変更したいときは tag コマンドで任意のイメージ名(リポジトリ名とタグ名)をつけることができます。 docker image prune 使用していない全ての image の削除をすることができます。 イメージ一覧が綺麗になるので整理したいときに使えます。 prune を直訳すると 「透かす, 刈り込む, 刈る, 切り落とす, 切り払う, 切り下げる, 切り調える」 という意味です。(強そうですね、なんとなく理解できます。) 更に詳しく見たい方はドキュメントがわかりやすくまとめられています。 コンテナ docker ps 実行中のコンテナ一覧をみることができます。 docker ps -a -a オプションをつけることで終了しているコンテナを含め全てのコンテナを確認できます。 docker rm コンテナを指定して削除することができます。 docker rm -f 強制的に削除するときに -f オプションをつけます。 docker system prune 使用していない全ての コンテナ の削除をすることができます。 docker exec -it 実行中のコンテナでコマンドを実行することができます。 exec は execute(実行) の略です。 その他 docker network ls ユーザーが作成した全てのネットワーク一覧を確認することができる。 docker network rm 指定したネットワークを削除することができる。 docker inspect inspect のあとにコンテナIDやイメージIDを指定し、指定したものの情報を確認することができる。 コマンド早見表 コマンド オプション・フラグ・引数 意味 docker run -it, --name, --rm, -v, -p, -u, <イメージID> コンテナを作成、実行する docker images  イメージ一覧  docker rmi <イメージId> イメージ削除 docker tag <変更後のイメージ名> <変更前のイメージ名> イメージ名(リポジトリ・タグ)名の命名 docker image prune 使用していないイメージの一括削除 docker ps -a コンテナ一覧 docker rm <コンテナ名・ID> コンテナの削除 docker system prune 使用していないコンテナの一括削除 docker exec <コンテナ名・ID> コマンドを実行する docker network ls ネットワークの一覧 docker network rm <ネットワーク名・ID> ネットワークの削除 docker inspect <コンテナID, イメージID> 詳細の確認 おわりに Docker コマンドやそれに付随する オプション、フラグ は他にもたくさんあります。 全部を覚えることは難しいのでよく使うものから順番に使えるようにしていきます。 とはいえ、後に執筆予定の docker-compose を使用すれば上であげたような コマンドを省略して使用できる場合もあります。ただ、上であげたようなコマンドが土台となっていることが多いので抑えておくと理解が捗るかもしれません。 参考文献 Docker リファレンス Docker [アーキテクチャの理解] Docker Hub Dockerチュートリアル 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典(入力) 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典(tty) 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典(rm) これで完璧!Linux基本コマンドとオプションの使い方【一覧あり】 米国AI開発者がゼロから教えるDocker講座(Udemy) 入門 Docker おすすめ教材 どちらのサイトも、ものすごくわかりやすかったのでおすすめです! (※個人的な意見なので購入する際は自己判断でお願いします。(入門 Dockerは無料)) 米国AI開発者がゼロから教えるDocker講座(Udemy) 入門 Docker

Viewing all articles
Browse latest Browse all 2914

Trending Articles