VagrantとDockerの基本操作をまとめておく

ネットワーク

前置き

仮想マシン環境を用意するVagrant(+ VirtualBox)とコンテナ環境を用意するDockerの導入を以前の記事でまとめましたが、今後のネットワーク動作を体験していく工程に進む前に、それぞれの最低限確保しておく知識と動作(コマンド)をまとめておきます。

Windows11でwingetを使ってVagrantとDockerの環境構築
前置き仮想環境を使ってネットワークのおべんきょをしたかったので、DockerとVagrantを使える環境を構築して仮想マシンとコンテナを使えるようにします。所持しているPCの1台目(Windows10)は、過去にDocker Desktop...

今後の記事では、この記事のコマンドを知っている前提で書いていけたらいいのかなと思います。

基本的にニッチなコマンドは紹介せず、押さえておきたい部分のみの紹介になると思います。

ただ、私自身が勉強しながらネットワークを体験していくので、今後の記事で必要だと感じたら、この記事に情報を追加していくと思います。

なお、記事内のコマンドは、公式のものを引用しているので、プレースホルダはそれに準拠する形になります。(Vagrantは英小文字でDockerは英大文字でした)

Vagrant

前提知識

VagrantにはBoxというイメージファイルVagrant Cloudに存在しており、このイメージファイルをダウンロードしてきてローカル環境に仮想マシンを構築します。

準備に関わるもの

init

公式Docs

vagrant init [name [url]]

環境構築記事でも使用しましたが、仮想マシンの初期化(Vagrantfileの作成)です。

nameはBox名を指定する部分で、基本的にはVagrant CloudのNewタブに書いてある通りの名前でOKです。

本来は、box addやbox listというコマンドと併用しながら使うことで、イメージを管理しながら使うことが可能ですが、今回はinitだけで構築します。
※ 今後のネットワーク体験次第でここの記事に記述が必要だと感じた場合は、box addなどのコマンドの説明を追記します。

具体例

vagrant init ubuntu/focal64

初期化の際に使用するBoxイメージを[ubuntu/focal64]で指定しています。

上記コマンドにより、空のディレクトリにVagrantfileが作成されて、内部にubuntu/focal64の記述が書かれます。

起動・停止に関わるもの

status

公式Docs

vagrant status [name|id]

仮想マシンの状態を確認するコマンドです。

poweroffが停止状態で、runningが起動状態です。

defaultを使うので、nameは指定しなくても大丈夫です。

up

公式Docs

vagrant up [name|id]

仮想マシンを起動するコマンドです。

こちらもdefaultを使用するので、name指定は無しで大丈夫です。

現時点で調べた限りでは、今後複数の仮想マシンを立てて通信するような場合でも、Vagrantfileの記述により複数のホストを立てることが可能だと思われるので、そのあたりも大丈夫そうです。

halt

公式Docs

vagrant halt [name|id]

仮想マシンを停止するコマンドです。

こちらもdefaultを使用するので、name指定は無しで大丈夫です。

接続に関わるもの

ssh

公式Docs

vagrant ssh [name|id] [-- extra_ssh_args]

仮想マシン内部にSSH接続を行うコマンドです。

このコマンドを実行後に、ubuntu内へ入ってhost内でのlinuxコマンドによる操作を受け付けるようになります。

引数無しだとdefaultに入ることになりますが、今後2台以上の仮想マシンを起動する際は、host名を指定することになると予想されます。

ちなみにLinux環境から出てくるときは、以下のコマンドを使います。

exit

Docker

前提知識

DockerにはコンテナのイメージファイルDocker Hubに存在しており、このイメージファイルをダウンロードしてきてローカル環境に仮想コンテナを構築します。

また、Windows上にコンテナを立てる場合の他、仮想マシンの上にコンテナを立てる場合も今後の展開によっては出てくると思います。

その場合、Dockerfileと言われるものを用意してbuildを行う工程が必要になってきます。Dockerfileに関する構築は、一段階レベルがアップしますので、別記事で方法をまとめることとします。

ここでは、Windows上でコンテナを作成して、起動したコンテナに接続するために必要な基本的コマンドを扱います。

準備に関わるもの

pull

公式Docs

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Docker Hubからイメージを取得します。

Vagrantのinitよりは、上記で紹介されなかったbox addというコマンドに近い仕様となっています。

images

公式Docs

docker images [OPTIONS] [REPOSITORY[:TAG]]

Docker Hubから取得したイメージの一覧を表示します。

こちらもVagrantで紹介されなかったbox listに近い動作となります。

run

公式Docs

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Docker Hubから取得したイメージを基にコンテナを作成・起動します。

コンテナは複数作成してテストすることが予想されるので、後述の接続コマンドを使いやすくするためにも、下記具体例のようにnameなどのオプションをつけることを推奨します。

具体例

docker run -it -d --name ubuntu_focal ubuntu:20.04

バージョンがfocalのubuntuイメージを使ってコンテナを起動します。

  • コンテナの名前はubuntu_focal
  • -dによりバックグラウンドで起動(デタッチド:run後、プロセス内に入らない)
  • -itにより標準入力とターミナルがアタッチされコンテナがすぐに終了しない
    • これは、ubuntuコンテナのRootプロセスがbashでありbashの終了がコンテナの終了条件のため
    • 必要なコンテナでrunの時に付け忘れると、startコマンドを普通に打ってもすぐ終了する

起動・停止に関わるもの

ps

公式Docs

docker ps [OPTIONS]

コンテナ一覧を表示します。

オプション無しだと起動中のもののみ表示して、[-a]オプションを付けると停止中のものも含めて表示します。

Vagrantでいうstatusに近い挙動です。

start

公式Docs

docker start [OPTIONS] CONTAINER [CONTAINER...]

コンテナを起動します。

runと違って-dが無くてもバックグラウンドで起動します。

必須の情報としてはコンテナID(CONTAINER)の指定があります。複数コンテナを起動する場合は、半角スペースで区切って複数羅列する記述になります。

Vagrantでいうupに近いです。

stop

公式Docs

docker stop [OPTIONS] CONTAINER [CONTAINER...]

コンテナを停止します。

オプションは基本使用しないと思うので、コンテナID(CONTAINER)を指定してあげればOKです。複数コンテナを停止する場合は、半角スペースで区切って複数羅列する記述になります。

接続に関わるもの

attach

公式Docs

docker attach [OPTIONS] CONTAINER

コンテナに接続(アタッチ)します。

このコマンドを実行後に、コンテナ内のBashに入り、コマンドによる操作を受け付けるようになります。

Bashから抜けるコマンドは2つあります。

  • exit:Bashを終了します。結果的にコンテナが終了する場合が殆どです。
  • Ctrl + P, Ctrl + Q:Bashから離脱します。コンテナは終了しません。

後者は、VS Codeなどでコマンドが効かない(IDEのショートカットキーとして作動)場合があります。そのような環境では、下記のexecコマンド具体例のようにすると、コンテナを終了せずにexitを使うことも可能となります。

exec

公式Docs

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

コンテナ内で指定したコマンドを実行します。

下記のコマンドにより、コンテナ内で新しいBashを起動して入ることも可能です。

具体例

docker exec -it ubuntu_focal /bin/bash

ubuntu_focalというコンテナのbashを実行します。

  • -itによりrunの項目での説明通り、ubuntuコンテナでbashが勝手に終了しないようにします
  • 新しいBashなので、exitコマンドで退出してもコンテナがstopしない

最後に

ここまで覚えれば、あとはLinuxコマンドによってネットワークの様々な体験が出来る準備が整ったといえるでしょう。

タイトルとURLをコピーしました