Open9

Dockerってやつが便利らしいので、VMの代わりの開発環境として使ってみる。

くまさんくまさん

とりあえずdebianのイメージをpullしてくる

> docker pull debian

確認

> docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
debian       latest    72b624312240   8 days ago   124MB
くまさんくまさん

立ち上げる前に、現在の状況を確認

> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

今は何もない。

先程pullしてきたイメージからdebianを起動してみる。

> docker run -it debian
root@908d23d47128:/#

なんか別のシェル?が立ち上がったっぽい。これでdebianの中に入れたのかな?

(docker run --name hogehoge -it debian で名前をつけて作成できる)

ここからはctrl+p -> qで抜けられるらしい。(これをデタッチと呼ぶみたい)
普通にexitするとコンテナも停止してしまうらしい。気をつけないとな。

とりあえず抜けてみる。
抜けられないとおもったら、ctrp + p -> qじゃなくて、ctrl押しながらp押しながらqだった。

root@908d23d47128:/# > 

わかりにくいけど、とりあえず抜けられた。

ここでさっきのpsコマンドで状況を確認してみる。

> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
908d23d47128   debian    "bash"    5 minutes ago   Up 5 minutes             friendly_pascal

これでコンテナは立ち上がったまま抜けられたことを確認できた。

くまさんくまさん

さっき抜けたdebianに、もう一度入ってみる。このことをアタッチって呼ぶらしい。

> docker attach friendly_pascal
root@908d23d47128:/#

さっきnameをちゃんと指定しておけばよかった。けどとりあえずもう1度入れたので良しとする。

そしたら今度はexitしてみる。

root@908d23d47128:/# exit
exit
> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

普通にexitできた。docker psコマンドで確認してもちゃんと終了されているっぽい。

-aで立ち上がってないコンテナも確認できるらしいので試してみる。

> docker ps -a
CONTAINER ID   IMAGE     COMMAND        CREATED          STATUS                          PORTS     NAMES
908d23d47128   debian    "bash"         10 minutes ago   Exited (0) About a minute ago             friendly_pascal

ちゃんと表示されてる。

くまさんくまさん

さっきexitしたコンテナをもう1度起動してみる。

今度はrunではなくstartをするらしい。

> docker start friendly_pascal
friendly_pascal
> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS         PORTS     NAMES
908d23d47128   debian    "bash"    13 minutes ago   Up 7 seconds             friendly_pascal

これで再度起動できた。
docker stopコマンドもあるらしいけどとりあえず起動したままやりたいことをやっていく。

くまさんくまさん

このスクラップの目的が、Dockerを使ってVMの代わりに開発環境として使ってみることなので、さっきのdebianにアタッチしてc言語のコードを書いてコンパイルするまでやってみる。

とりあずホームディレクトリに移動

root@908d23d47128:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@908d23d47128:/# cd
root@908d23d47128:~# ls
root@908d23d47128:~#

vimでhello worldを書いてみる。

root@908d23d47128:~# vim hello.c
bash: vim: command not found

vimが入ってないらしい。
ならばインストールしよう。

root@908d23d47128:~# sudo apt install vim
bash: sudo: command not found

ほう。

sudoつけなくてもapt updateとapt upgradeはできそうなのでした。
というかrootでログインされてるのか。

普通にapt install vimでインストールできた。

くまさんくまさん

気を取り直して、cのコードを書いていく。

root@908d23d47128:~# cat hello.c
#include <stdio.h>

int     main(void)
{
        printf("Hello, World!\n");
        return (0);
}

コンパイルしてみる。

> gcc hello.c
bash: gcc: command not found

ですよね。
apt install gccでインストール

気を取り直して

root@908d23d47128:~# gcc hello.c
root@908d23d47128:~# ./a.out
Hello, World!
root@908d23d47128:~#

いけた!

くまさんくまさん

そしてこのファイルは保存されるのか気になるので、exitしてみる。

root@908d23d47128:~# exit
exit
root@908d23d47128:~# exit
exit
> 

何故か1回では抜けられなかったけど一応抜けれた。

> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ちゃんとコンテナは終了できたっぽい。

再度起動してさっきのファイルが残ってるか確認してみる。

> docker start friendly_pascal
friendly_pascal
> docker attach friendly_pascal
root@908d23d47128:/# cd
root@908d23d47128:~# ls
a.out  hello.c
root@908d23d47128:~#

ちゃんと残ってた。

dockerって、必要なものとかは全部Dockerfileに書いておかなきゃいけなくて、再起動するたびに全部元に戻るみたいなイメージがあったけど、そんなことはないらしい。

これなら私の用途的には普通にVMの代わりに使えそう。
他にも色々試してみたいことはあるけど今日はここまで。