はじめに
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のインストール手順を見てみます。以下のコマンドを入力するだけです。
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> | コンテナイメージを削除 |
このあたりのコマンドを押さえておけば、最低限コンテナの作成、実行、停止、削除くらいはできます。
実際に試してみる
ここから、上記で紹介したコマンドの一部を、下記の流れで実行していきたいと思います。
- nginxイメージからnginxのコンテナを実行
-
docker container run
コマンド -
docker container ls
コマンド
-
- nginxのコンテナを停止
-
docker container stop
コマンド
-
- nginxのコンテナを再起動
-
docker container start
コマンド
-
- nginxのコンテナを再度停止させ、削除
-
docker container stop
コマンド -
docker container rm
コマンド -
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 IDは4f67c83422ec
であると分かるので、これを指定します。
$ 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について紹介します。
次の記事