Help us understand the problem. What is going on with this article?

右も左も分からないdocker初心者が少しだけ触ってみた

More than 3 years have passed since last update.

はじめに

なぜやるか

あるイベントで知り合った学生に、「dockerって知ってますかw?」と聞かれたのですが、その時僕はdockerについて何も分からず、答えることができなかったので、少し調べてみることにしました。

Dockerって?

wikipediaにはこう書いてありました

Docker(ドッカー[2])はソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。
Linuxカーネルにおける「libcontainer」と呼ばれるLinuxコンテナ技術[3]とaufsのような特殊なファイルシステムを利用してコンテナ型の仮想化を行う[4]。VMware製品などの完全仮想化を行うハイパーバイザー型製品と比べて、ディスク使用量は少なく、インスタンス作成やインスタンス起動は速く、性能劣化がほとんどないという利点を持つ。

うーん、分からない。
まずコンテナってなに?

結局はこういうこと

VMはハイパーバイザ型のアプリケーションを使ってホストOSの上に仮想環境を作るものです。

しかし、コンテナは1つのホストOS上で複数のアプリケーションを分離させた環境で動かすことができる技術のことです。
つまり、アプリケーションごとに異なるOSを立ち上げることで分離し、運用します。そのOS自体は非常に軽量なため、大量のコンテナを起動させることができます。

なぜコンテナが注目されるのか

たとえば、今まで一つのサーバー上で複数のアプリケーションがホストOSのリソースを共有して使っていたとします。それらはどれかのアプリケーションが落ちてしまうと、サーバー自体の機能が果たせなくなります。

しかし、コンテナでサーバーを管理すると、ホストOSのリソースを共有することができ、さらにどれかのアプリケーションが落ちてしまっても、その他のアプリケーションには影響がないため、落ちたアプリケーションのみを再度立ち上げるだけでよくなります。

では実際に使ってみましょう

Dockerのインストール

mac

brew cask install docker

をターミナルで実行します。

これでdockerはインストールができました。

入ってくるコマンドは以下の3つです。

docker  # 実際にdockerを動かせる
docker-compose  # 複数のコンテナを管理できる
docker-machine  # Dockerホストを作成できる

今回はdockerコマンドのみを使ってみます。

docker run -it ubuntu /bin/bash

はい、おわりです。

これでubuntuが起動でき、rootユーザでbashが動いたと思います。

ちなみに、ローカルにubuntuのdockerイメージがない場合は、自動でDocker Hubからダウンロードするため、初回起動時は時間がかかるかもしれません。

ubuntuから抜けるときはexitを打つことで、抜けることができ、それと同時にコンテナも自動で終了します。

次に、Dockerfileを作成し、オリジナルのイメージを作ってみましょう

任意の作業ディレクトリを作成してください。

その中にDockerfileを作成します。また、appというディレクトリも作成します。このappをホストOSとdockerとで共有したいと思います。

今回、dockerイメージはubuntuをベースにします。

FROM ubuntu 

RUN useradd -g sudo test 
RUN passwd -d test
RUN apt-get update
RUN apt-get install sudo

COPY app /app

USER test

CMD ["echo","docker"]

このDockerfileをビルドするときは

docker build -f {Dockerfile名} -t {REPOSITORY}:{TAG} .

少し説明を付け加えると、Dockerfile内のRUNはbuildした時に実行されるコマンドです。
CMDはdockerを起動するときのdocker run -it {dockerイメージ名}をした時に実行されるコマンドです。

しかし、上記のrunのあとに/bin/bashなどの実行させたいコマンドを入力した場合は、CMDがオーバーライドされるため、/bin/bashが実行されます。

ログインユーザを作ることについてですが、プロセスがdocker内でrootとして実行されることを防ぐためです。必ず設定しましょう。

以上です。

DockerについてのコマンドとかはDockerの備忘録に書きました。

コンテナの削除などについてはこちらの方のgistをご参考ください。

さいごに

まだ私はdockerを勉強しはじめたばかりなので、間違っていることも多々あると思うので、ご指摘いただけるとありがたいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away