はじめに
Dockerfileを使って、さくっとタグをつけてビルドして、実行する方法を紹介します。
ビルドも実行も本来色々なオプションがありますが、今回はよく使うパターンとして紹介させていただきます。
Dockerfileからタグをつけてビルド
Dockerfileからタグをつけてビルドするコマンドは下記の通りです。-t
オプションでタグを指定します。
docker build -t {image name}:{tag name} {path/to/Dockerfile}
具体例
下記のようなDockerfile
を用意します。
FROM nginx:1.23.3
-t
でタグを指定してビルドします。Dockerfile
のパスは.
でカレントディレクトリを指定しています。
docker build -t nginx-image:test-tag .
イメージを確認するとタグ付きで作成されていることが確認できます。
❯ docker image ls | grep nginx-image
nginx-image test-tag 4193e7f130e5 4 weeks ago 142MB
イメージを実行
バックグラウンドで動かしてポートフォワード
バックグランドで実行して、ポートフォワードするコマンドは下記の通りです。--name
で実行するコンテナ名を指定、-d
でバックグラウンドで実行、-p
でポートフォワードします。
docker run --name {container name} -d -p {host port}:{container port} {image name}:{tag name}
具体例
先ほどビルドしたイメージを実行してみます。
docker run --name nginx -d -p 8080:80 nginx-image:test-tag
コンテナを確認すると指定した名前で実行されているのがわかります。また、localhost:8080
にアクセスするとnginxからレスポンスを受け取ることができます。
❯ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ff0019a7dbf nginx-image:test-tag "/docker-entrypoint.…" 8 seconds ago Up 7 seconds 0.0.0.0:8080->80/tcp nginx
❯ curl localhost:8080
<!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>
シェルに接続する
コンテナをバックグランドで実行するのではなく、実行しつつシェルに接続するコマンドは下記の通りです。シェルに接続するだけでなく、コマンドを実行することも可能です。
docker run -it {image name}:{tag name} {command}
具体例
同じイメージを実行して、bashに接続してみると、コンテナ上で色々コマンドを試せるようになります。
❯ docker run -it nginx-image:test-tag bash
root@ad5c1ea85e7a:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var