アメリエフの技術ブログ

Amelieff Staff Blog

docker超入門

こんにちはー
hr-kです。今回は仮想OSとかを簡単に扱えるツール、dockerの使い方を簡単に紹介しまーす。

dockerってなんぞ?

詳しい説明はdocker公式サイトにお任せしますがここでは簡単に説明しておきましょう。dockerは以下のような仮想環境を簡単に用意できるオープンソースのプラットフォームです。

  • 一台のサーバやPC内に簡単に複数のOSを含む環境を用意できる
  • 複数のサーバに分割する処理のテストもできる

はい、なんのこっちゃって話ですが、上の二つの性質はこんな時に便利なのです。

  • mac使ってるけど、CentOS向けのツールとか使いたいなぁ
  • サーバ内で開発してるんだけど、デプロイテスト用にまっさらな何も入ってない環境用意したいな
  • 今ある解析環境を汚染せずに、別の解析環境を構築したいな

本当はdocker imageとかcontainerとか色々説明することがあるんですが、この記事では、詳細な仕組みとかはぜーんぶ飛ばして、使い方だけ簡単に見ていきます。

dockerの使い方

dockerのインストール

dockerを使うには、まずお手元のPCやサーバにdockerをインストールしなきゃですね。Windows、Mac、Linux系のそれぞれのOSたちでインストール方法が異なるんですが、インストール自体は超簡単で、公式のインストールページに全部の場合について詳しく書いてます〜。

使い方

インストールできたら次は使い方ですねー。 基本的にdockerはコマンドで動かせます。WindowsならWindows Power Shellなど、Macならterminalなど、Linux系OSでもそれぞれの端末のコマンドラインから動かせます。

イメージを用意する

作りたい環境の種となるdocker imagedocker hubからダウンロードしまーす。ここではCentOSの最新版をdownloadしてみしょう

$ docker image pull centos:latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest

ってな感じでダウンロード完了。
コマンドの使い方は

docker image pull [imageの名前]:[tag]

ですー。

イメージがダウンロードされてるか確認して見よー

$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
centos                     latest              470671670cac        3 months ago        237MB

centosのlatestがありますね!

イメージからコンテナを作る

ダウンロードしてきたdocker imageはあくまで環境の種なので、この種から実際に僕たちがイジイジできるコンテナというものを作りませう。

$ docker run --name centoslatest -itd 470671670cac /bin/bash

これで作成アンド起動完了(docker runで作成するのは各コンテナにつき初めの一回でいいよ)。コマンドの使い方は

docker run --name [コンテナ名(任意の名前)] -itd [IMAGE ID] [コンテナ内で実行するコマンド]

です。起動してるか確認しましょうねー

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9534131509ed        470671670cac        "/bin/bash"         4 minutes ago       Up 4 minutes                            centoslatest

あい、作ったcentoslatestという名前のコンテナが起動していることがわかりますねー

コンテナにログインして作業

せっかく仮想環境作ったので、実際に作ったコンテナに入って中を見てよー

$ docker exec -it centoslatest /bin/bash
[root@9534131509ed /]# 

あい、dockerのコンテナに入れましたー。コマンドの使い方はこんな感じ。

docker exec -it [コンテナ名] [コンテナ内での実行コマンド]

入ったらそこはもう、最新のCentOSの世界

[root@9534131509ed /]# cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 

コンテナから出るときは普通にexitでOK

[root@9534131509ed /]# exit
$

ファイルの行き来

起動しているコンテナ内にファイルをコピーするには、コンテナ入ってない状態でこんな感じ

$ docker cp testfile.txt centoslatest:/data/

使い方は

docker cp [コンテナ内に持っていきたいファイル] [コンテナ名]:[コンテナ内でファイルを置く場所]

ファイルをコンテナから取り出す時にはこんな感じ

$ docker cp centoslatest:/data/test.txt ./data/

使い方は

docker cp [コンテナ名]:[コンテナ内の取り出したいファイルの絶対パス] [取り出したファイルを置く場所]

こんな感じで、dockerコンテナにファイルを入れたり、取り出したりできるのです。

動かしたり止めたり

現在動いているコンテナはdocker psコマンドで確認

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9534131509ed        470671670cac        "/bin/bash"         17 minutes ago      Up 17 minutes                           centoslatest

使ってないときに動かしてるのは、無駄に計算容量とかを消費してるだけなので止めましょー。止めるコマンドは

$ docker stop centoslatest

で使い方は

$ docker stop [停止したいコンテナ名]

止まったかどうかdocker psで確認してみよー

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

はい、何も表示されないってことは、止まってますね。 止まってるコンテナも含めて確認してみよう。

$ docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                       PORTS               NAMES
9534131509ed        470671670cac               "/bin/bash"              22 minutes ago      Exited (0) 2 minutes ago                         centoslatest

止まったcentoslatestがありますねぇ〜。
まあ、PCとかサーバの電源落とすと止まったりするので、docker stopしなくても止まることはあります。

もう一度動かすにはdocker start

$ docker start centoslatest
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9534131509ed        470671670cac        "/bin/bash"         25 minutes ago      Up 12 seconds                           centoslatest

はい、動き始めましたー。
コマンドの使い方は

$ docker start [動かしたいコンテナ名]

こんな感じでdocker コンテナは動かしたり止めたりできるのです。

まとめ

今回はdockerの操作でよく使うものを紹介しました
こんな感じで、自分のサーバやPC内に独立した仮想環境を作ってしまえば、解析環境が混ざるとかは起きないです。
BioInfoのツールのみなら最近はこの記事にちょっとだけ書いてますが、condaを用いた環境作成とかがかなり優秀なので、そっちでやっても良いですね。

サーバの環境を複数模擬したい場合にはdocker、解析環境だけ分けて作りときはcondaを活用する、みたいな感じで使い分けられると選択肢も広がるし、いろんなものが見えてくるかもですね。

ではでは〜