LoginSignup
3
1
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

①1日10分で理解するコンテナ技術入門 - Dockerのインストールと基本コマンド -

Last updated at Posted at 2024-06-10

はじめに

Qiita Engineer Festa 2024が始まりましたね。これを機に、1記事5~10分くらいを目安に読める、dockerからKubernetesまでの基本的な部分を紹介する記事を書こうと思います。

今回はdockerの初歩の初歩、Dockerのインストールと基本コマンドについて説明します。

Dockerのインストール方法

Dockerはいろいろなプラットフォームに対応しています。ここからお使いのプラットフォームを選択すればインストール方法が分かります。例えば、Windows, Macをお使いの方は、Docker desktop for windows, Docker desktop for Macをインストールするだけです。簡単!

CentOSのインストール例

Docker Desktop for xxxはGUIで簡単にインストールできるので、ここでは例として、CentOSのインストール手順を見てみます。以下のコマンドを入力するだけです。

CentOSにおけるdockerのインストール手順
 sudo yum remove docker \
                 docker-client \
                 docker-client-latest \
                 docker-common \
                 docker-latest \
                 docker-latest-logrotate \
                 docker-logrotate \
                 docker-engine
 
 sudo yum install -y yum-utils
 
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 
 sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
 
 sudo systemctl start docker

インストールできたかを確認するために、以下のコマンドでサンプルのコンテナを立ち上げてみます。

sudo docker run hello-world

以下のような出力が出ていれば成功です。私は諸事情でdockerではなくpodmanを使っているので皆さんとは出力が違うかと思いますが、イメージ的には以下のような感じになるはずです。

$ sudo docker run hello-world
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob 81df7ff16254 done
Copying config 5dd467fce5 done
Writing manifest to image destination
!... Hello Podman World ...!

         .--"--.
       / -     - \
      / (O)   (O) \
   ~~~| -=(,Y,)=- |
    .---. /`  \   |~~
 ~/  o  o \~~~~.----. ~~
  | =(X)= |~  / (O (O) \
   ~~~~~~~  ~| =(Y_)=-  |
  ~~~~    ~~~|   U      |~~

Project:   https://github.com/containers/podman
Website:   https://podman.io
Desktop:   https://podman-desktop.io
Documents: https://docs.podman.io
YouTube:   https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon:  @Podman_io@fosstodon.org

sudoなしでdockerコマンドを実行する

dockerインストール後、そのままの状態だと、dockerコマンドを実行する際に毎回sudoを入力する必要があり面倒なので、下記の手順でsudoなしで実行できるようにしておきます。

sudo groupadd docker

sudo gpasswd -a $USER docker

sudo systemctl restart docker

上記の手順実行後、再ログインするとsudoなしで実行できるようになります。

Dockerの基本コマンド

ここまでで無事にdockerがインストールできたと思います。ここからは、実際にdockerを使ってみましょう!
dockerを使う上で最低限覚えておくべきコマンドは下のコマンドです。

コマンド 説明
docker container run <image-name> 新しいコンテナを作成して実行
docker container ls 起動・停止しているコンテナの一覧を確認
docker container start <container-name> 停止しているコンテナを起動
docker container stop <container-name> 起動しているコンテナを停止
docker container rm <container-name> コンテナを削除(停止させてから実行する)
docker container exec <container-name> <command> 起動しているコンテナで指定したコマンドを実行
docker image build -t <image-name> . カレントディレクトリのDockerfileからコンテナイメージをビルドする
docker image ls コンテナイメージの一覧を確認
docker image rm <image-name> コンテナイメージを削除

このあたりのコマンドを押さえておけば、最低限コンテナの作成、実行、停止、削除くらいはできます。

実際に試してみる

ここから、上記で紹介したコマンドの一部を、下記の流れで実行していきたいと思います。

  1. nginxイメージからnginxのコンテナを実行
    1. docker container runコマンド
    2. docker container lsコマンド
  2. nginxのコンテナを停止
    1. docker container stopコマンド
  3. nginxのコンテナを再起動
    1. docker container startコマンド
  4. nginxのコンテナを再度停止させ、削除
    1. docker container stopコマンド
    2. docker container rmコマンド
    3. docker image rmコマンド

nginxイメージからnginxのコンテナを実行

docker container runコマンドを使います。-dオプションでバックグラウンドで起動し、-pオプションでコンテナのポートとホストのポートをポートフォワーディングしています。実際にアクセスする場合は、ホスト側のポート番号でアクセスします。

$ docker container run -d -p 10000:80 nginx
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Resolved "nginx" as an alias (/home/opc/.cache/containers/short-name-aliases.conf)
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob b7923aa4e8a6 done
Copying blob 9b3addd3eb3d done
Copying blob 5529e0792248 done
Copying blob 7b5f78f21449 done
Copying blob 09f376ebb190 done
Copying blob 57910a8c4316 done
Copying blob 785625911f12 done
Copying config 4f67c83422 done
Writing manifest to image destination
6ea50099132cd25e8c5d1cfbca34cfe9dd4f4f34017e7de1e332fa12b88f5b66

作成したコンテナを、docker container lsコマンドで確認してみます。

$ docker container ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                           COMMAND               CREATED             STATUS             PORTS                  NAMES
6ea50099132c  docker.io/library/nginx:latest  nginx -g daemon o...  About a minute ago  Up About a minute  0.0.0.0:10000->80/tcp  keen_goldstine

curlコマンドで、nginxにアクセスしてみます。

$ curl localhost:10000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

コンテナの80ポートとホストの10000ポートをポートフォワーディングしているので、ポート10000にアクセスします。現在操作しているのはコンテナが動作しているホストなので、localhostを指定しています。

nginxのコンテナを停止

それでは起動させたnginxのコンテナを、docker container stopコマンドで停止させます。停止させる際にコンテナ名かコンテナIDが必要になるので、docker container lsコマンドで確認します。

$ docker container ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS        PORTS                  NAMES
f2c433815e89  docker.io/library/nginx:latest  nginx -g daemon o...  2 seconds ago  Up 3 seconds  0.0.0.0:10000->80/tcp  optimistic_pare

コンテナIDはf2c433815e89だとわかりました。ではこのコンテナを停止してみます。

$ docker container stop f2
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
f2

コンテナIDを指定するときは、一意に識別できるところまで入力すればOKです。今回は1つしかコンテナがないので、fだけでも停止できます(ほかのコマンドでも同様です!)。

nginxのコンテナを再起動

停止させたnginxのコンテナを、docker container startコマンドで再起動してみます。このコマンドもコンテナIDを指定しますので、先ほど調べたf2c433815e89を指定します(fだけでよい)。

$ docker container start f
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
f

コンテナが起動したかを、docker container lsコマンドで確認してみます。

$ docker container ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS             PORTS                  NAMES
f2c433815e89  docker.io/library/nginx:latest  nginx -g daemon o...  5 minutes ago  Up About a minute  0.0.0.0:10000->80/tcp  optimistic_pare

起動していることが分かります。一応、curlも使ってみます。

$ curl localhost:10000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

ちゃんとスタートページが返ってきていますね。

nginxコンテナを再度停止させ、削除

まずは、docker container stopコマンドで再度停止させます。

$ docker container stop f
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
f

停止させたコンテナを、docker container ls -aコマンドで確認します。

$ docker container ls -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS                     PORTS                  NAMES
f2c433815e89  docker.io/library/nginx:latest  nginx -g daemon o...  7 minutes ago  Exited (0) 33 seconds ago  0.0.0.0:10000->80/tcp  optimistic_pare

STATUSがExitedになっているので、停止していることが分かります。
次に、このコンテナを削除します。コンテナの削除は、docker container rmコマンドで行います。例にもれずコンテナIDも指定します。

$ docker container rm f
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
f

削除されたかどうか、再度docker container ls -aコマンドで確認してみます。

$ docker container ls -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

何も表示されなくなりました。これで無事コンテナを削除することができました。

今ホストOSには、コンテナは削除されたものの、nginxコンテナの元になったコンテナイメージは残っています。コンテナイメージを確認するには、docker image lsコマンドを使います。

$ docker image ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx  latest      4f67c83422ec  11 days ago  192 MB

このコンテナイメージも削除してきれいな状態に戻しましょう。コンテナイメージの削除は、docker image rm <image-id>コマンドを指定します。このコマンドで指定するIDは、IMAGE IDである点に注意してください。docker image lsコマンドの出力から、IMAGE ID4f67c83422ecであると分かるので、これを指定します。

$ docker image rm 4
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Untagged: docker.io/library/nginx:latest
Deleted: 4f67c83422ec747235357c04556616234e66fc3fa39cb4f40b2d4441ddd8f100

docker imageコマンドも同様、一意に識別できるところまでIDを指定すればよいので、今回は4だけで大丈夫です。

まとめ

以上、Dockerのインストール方法から、とりあえず使うためのコマンド紹介でした。次回はもう少しdockerを使いこなすために、カスタムコンテナイメージを作成するためのDockerfileについて紹介します。
次の記事

参考

  1. https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/
  2. https://qiita.com/DQNEO/items/da5df074c48b012152ee
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1