はじめに
Dockerを使用していると、イメージに何がある?コンテナ何が立ってるっけ?など起きてくると思います。
Dockerコマンドで
docker image ls
docker container ls
と打って確認するのも素早い手ですが、GUIでいつでも見れたら嬉しいですよね?
今回はDockerという拡張機能を使用し、VSCodeで現在使用しているイメージ、コンテナ、レジストリを確認できるようにしたいと思います!
前提
VagrantでDocker環境を作成する方法は次の記事で紹介しております。
今回の記事は、VSCodeの拡張機能Dockerに適応させることが目的なので、新たに何か出来ることが増えるわけではございません。
注意事項
今回紹介するのはローカル環境で使用することを前提として、提案しています。
本番環境のDocker環境として使用することは推奨しません。
行うこと
下準備編
本題編
忙しい人向け:行うこと
原理なんてどうでもいい!実行したい!という人向け。
既存のVagrantfileに以下の設定を追加する。
config.vm.network "forwarded_port", guest: 2375, host: 2375, host_ip: "127.0.0.1"
config.vm.provision "shell", inline: <<-SHELL
chmod +x /usr/local/bin/docker-compose
# この間に下記を追加
find /usr/lib/systemd/system/docker.service -type f -print | xargs sed -i -e "s*ExecStart=/usr/bin/dockerd*ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375*g"
echo export DOCKER_HOST=tcp://127.0.0.1:2375 >> .bashrc
# この間に上記を追加
systemctl start docker
systemctl enable docker
SHELL
既存のVagrant環境を破棄する。
vagrant destroy
再度、Vagrant環境を作成する。
vagrant up
次のコマンドを打ち、Hello-worldコンテナを追加する。
vagrant ssh -- docker run --name hello hello-world
確認できたら、Hello-worldコンテナは邪魔なので削除して終了。
コマンドから
vagrant ssh -- docker rm hello
vagrant ssh -- docker rmi hello-world
GUIから
- imagesのHello-world上で右クリックし、Remove Imageを選択
- Containerのhello上で右クリックし、Remove Containerを選択
以上です。
利用環境
ホストPC:現在使用しているPCのことです。
ゲストPC:VirtualBoxで作成する仮想マシンのことです。
ホストPC
Type | Version |
---|---|
Windows10 | Home |
VSCode | 1.28.2 |
拡張機能:Docker | 0.3.1 |
Vagrant | 2.1.5 |
VirtualBox | 5.2.18 |
Vagrant Box | bento/centos-7 |
ゲストPC
Type | Version |
---|---|
CentOS | 7.5 |
Docker-Engine | 18.06.1-ce |
Docker-compose | 1.23.0-rc3 |
目的物
上記の画像のように確認できるようにすることが今回の目的です。
拡張機能:Docker
この拡張機能は以下のことが出来ます。
そのため、追加して使いたい。
出来ること
- Dockerイメージのbuild push
- Dockerコンテナの削除
- Docker-Compose up down
- Dockerfileのシンタックスハイライト
- docker-compose.ymlのシンタックスハイライト
- Dockerイメージ、コンテナ、レジストリの閲覧
- etc...
本環境で出来ること
- Dockerコンテナの削除
- Dockerfileのシンタックスハイライト
- docker-compose.ymlのシンタックスハイライト
- Dockerイメージ、コンテナ、レジストリの閲覧
ホストPCにdockerが入っていることを前提にこの拡張機能は作成されている影響で、本環境の場合、フルに活用することは出来ない。
下準備
下準備 1. すでに環境を持っている人
環境を持っている場合は一度、Vagrant環境を削除する必要があります。
バックアップを取るなどして対応しましょう。
vagrant destroy
下準備 2. 環境を持っていない人
こちらでは、事前に準備したVagrantfileを使用します。
VirtualBox、Vagrantの設定については、
を参照して頂けると、設定することが出来ます。
本題
この工程が終わると以下の環境が手に入ります。
- ホストPCからvagrant sshを利用してDockerコマンドが打てるようになる
- ホストPCのVSCodeでDockerイメージ、コンテナ、レジストリの情報を見れるようになる
本題 1. Docker daemonを全てのIPから接続可能にする
ここではホストPCのVagrantfileを操作します。
Dockerのdaemonを全てのIPから接続可能とするためにPortを開放します。
config.vm.network "forwarded_port", guest: 2375, host: 2375, host_ip: "127.0.0.1"
※ port:2375を開放する理由は公式より、例として使用されているから。何番でも構わない。
※ ただし、port番号を変えた場合、以降登場する2375は全て、ここで変えたport番号を使用して下さい。
次のコマンドを
find /usr/lib/systemd/system/docker.service -type f -print | xargs sed -i -e "s*ExecStart=/usr/bin/dockerd*ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375*g"
下記の間に追加しましょう。
config.vm.provision "shell", inline: <<-SHELL
chmod +x /usr/local/bin/docker-compose
# ここに追加する
systemctl start docker
systemctl enable docker
SHELL
※ ここで追加したコードはdocker.serviceを検索し、ファイル内容を置換する。という処理をしています。
※ 個人的に良い書き方とは思っていないので、いい案がある方は教えて頂けると幸いです。
※ 気になった方はlinux 検索
やlinux 置換
などを調べてみると良いです。
本題 2. ゲストPCでDockerコマンドを打てるようにする
本題1を行っただけでは、スムーズにDockerコマンドが打てるようにはなっていません。
試しにVagrantにログインして、Dockerのバージョンを確認してみましょう。
PS C:\Users\YourName\vagrant-project> vagrant up
PS C:\Users\YourName\vagrant-project> vagrant ssh
[vagrant@localhost ~]$ docker info
そうすると、以下のようにエラーが発生すると思います。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
これは先程Dockerの起動方法を変更しているため、次のように打たないとDockerは反応しません。
[vagrant@localhost ~]$ docker -H 127.0.0.1:2375 info
...-H 127.0.0.1:2375を付けるの面倒くさいので、環境変数として設定します。
次のように設定しましょう。
[vagrant@localhost ~]$ export DOCKER_HOST=tcp://127.0.0.1:2375
ただ、これだとVagrantからログアウトすると、DOCKER_HOSTの設定は消えてしまいます。
そのため、環境変数の記入先である.bashrcに上記の内容を記述します。
確認のため、以下のコマンドを実施し、手順に従って行いましょう。
.bashrcの確認
[vagrant@localhost ~]$ ls -a
# 上記のコマンドを実施し、.bashrcがあればOK。ない場合は下記の操作を行う。
[vagrant@localhost ~]$ cd ~
.bashrcに追記する
[vagrant@localhost ~]$ echo export DOCKER_HOST=tcp://127.0.0.1:2375 >> .bashrc
この設定をVagrantでDocker環境を作成する時に行ってほしいので
Vagrantfileに追記します。
config.vm.provision "shell", inline: <<-SHELL
chmod +x /usr/local/bin/docker-compose
find /usr/lib/systemd/system/docker.service -type f -print | xargs sed -i -e "s*ExecStart=/usr/bin/dockerd*ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375*g"
# ここに追加する
echo export DOCKER_HOST=tcp://127.0.0.1:2375 >> .bashrc
systemctl start docker
systemctl enable docker
SHELL
追記をしたら、Vagrantを再設定する必要があるため、一度Vagrant環境を廃棄し、再度作成します。
PS C:\Users\YourName\vagrant-project> vagrant destroy
PS C:\Users\YourName\vagrant-project> vagrant up
本題 3. ホストPCからゲストPCに対してDockerコマンドが叩く方法
これはほとんど補助的な役割です。
なぜならコマンドの実行が遅いからです。
vagrant ssh
してからdockerコマンドを実行する場合と、これから試す方法では実行時間に5秒ほど時間がかかります(環境によって差が生じます)。この時間はvagrant ssh
を実行する時間分です。
それを考慮の上使用してください。
hello-worldコンテナを作成する
vagrantはsshのあとに--
を追加することでコマンドを実行させることが出来ます。
そのため、以下のコードでhello-worldコンテナが作成可能です。
vagrant ssh -- docker run --name hello hello-world
確認できたら、Hello-worldコンテナは邪魔なので削除して終了。
コマンドから
vagrant ssh -- docker rm hello
vagrant ssh -- docker rmi hello-world
GUIから
- imagesのHello-world上で右クリックし、Remove Imageを選択
- Containerのhello上で右クリックし、Remove Containerを選択
これで完了です!
お疲れ様でした!