未来電子テクノロジーでインターンをしているtokky08です。
Dockerについて勉強したのでアウトプットとして書いていきます。
プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。
#Dockerって何?
コンテナ型仮想化技術のことです。
パソコンの中にもう一つパソコンを作るイメージです。
#DockerとVMの違いとは
VM
- OSのバージョンの違いなどで構築に手間がかかる
- オーバーヘッドが大きい
Docker
- 仮装環境はコンテナと呼ばれるもので、オーバーヘッドが小さい
- 環境構築が容易
VMと違ってDockerは仮想化の単位ごとにOSを持つ必要がないため、より少ないリソースで素早く動作させることができる。
#イメージって何?
コンテナを起動するのに必要な設定ファイルをまとめたもの。
このイメージはDocker Hubからpullすることが多いです。
#コンテナって何?
イメージから作られるもの。
ミドルウェアの環境構築がされた実行環境。
#DockerでSassを使う
SASSのSCSS記法を触ってみたRuby
こちらの記事を参考にしました。
ファイル構成はこんな感じです。
docker-sass
- Dockerfile
- docker-compose.yml
- css
- style.scss
FROM ruby:2.5.1
RUN gem install sass
version: '2'
services:
scss:
build: .
volumes:
- .:/var/www/scss
stdin_open: true
tty: true
sassをインストールするためrubyの環境構築を行います。その上でsassをインストールします。これがDockerfile
の内容です。
$ docker-compose up -d
このコマンドでdocker-compose.ymlに記述した設定からコンテナ起動します。-d
はバックグラウンドで行うって感じです。
$ docker exec -it コンテナ名 bash
execでコンテナの中に入ります。
これで、一応流れとしてはひとまず終わりです。あとは、sassを使っていこうって感じです。
ファイル編集をホスト側で行い、その編集をコンテナ内にも反映させて作業を行います。これをバインドマウントを行うといいます。バインドマウントは-v ホスト側のパス:コンテナ側のパス
オプションで実行できますが、今回はdocker-compose.yml
に記述してます。
volumes:
- .:/var/www/scss
ここです。.
がホスト側のパスで/var/www/scss
がコンテナ側のパスです。
さて、execでコンテナ内に入ったのでvar/www/scss
に移動します。
root@2ffc40c8a946:/# cd var/www/scss
root@2ffc40c8a946:/var/www/scss# ls
Dockerfile css docker-compose.yml
見事、ホスト側にある[Dockerfile/css/docker-compose.yml]がコンテナ内にあることが確認できました。
cd
コマンドでcss
フォルダ内に移動します。
$ sass --watch style.scss:style.css
このsassコマンドを実行して、ホスト側で.scssファイルを編集してみましょう。
root@2ffc40c8a946:/var/www/scss/css# sass --watch style.scss:style.css
>>> Sass is watching for changes. Press Ctrl-C to stop.
>>> Change detected to: style.scss
write style.css
write style.css.map
見事、sassコマンドが機能しました。ホスト・コンテナ側両方のファイルをみてみると、新たにstyle.css
とstyle.css.map
ファイルが作成されていることが分かります。
これがバインドマウントを用いてファイル編集をする流れでした。
#まとめ
以前、sassの勉強会を開いた時windowsやubuntuの方がrubyの環境開発に苦戦していたのでDockerを使えばめっちゃ簡単じゃんと勉強して思いました。まだまだDockerについてよく分からない部分はありますがこれからも勉強して使いこなせるようにしたいです。勉強会を開く時などは環境構築が1番の山場だと言っても過言ではないのでDockerを使えば全員簡単に同じ環境が構築できるのですご!!と思いました。これからはDocker使わなければ・・・