hello foo bar Saba note | Dockerの基本的な使い方

Dockerの基本的な使い方

2019.9.28 (土)

Dockerの基本的な使い方

Dockerにはいろんな使い方があるのですが、その中でも最も基本的な使い方を説明します。すでにDockerがインストールされている状態を想定しているので、インストールと初期設定が終わっていることが前提になります。

ここではdocker pullでDockerhubからイメージを引っ張り出して構築します。Dockerhub

現時点ではversion 19.03.2を前提に話をすすめます。(2019-09-28時点)

$ docker --version
Docker version 19.03.2, build 6a30dfc

Dockerを運用するディレクトリを作成します。

$ mkdir -m 755 ~/mydocker
$ cd mydocker

DockerhubからCentOS7の最新をおとします。

$ docker pull centos:latest
latest: Pulling from library/centos
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Image is up to date for centos:latest
docker.io/library/centos:latest

これでOK。

Digest:のコードを控えておいてdocker runします。docker runはこれだけでいろんなオプションが詰め込まれすぎていて一冊本かけるんじゃないかというレベルなので、基本的なところだけおさえておきましょう。

  • –privileged: systemctlが使えるように権限を与えます。
  • –name: 実行するコンテナ名をつけます。(わかりやすい名前にした方がいい)
  • –it: コンソールに結果を出すオプション。tarとかの-vみたいなやつです。
  • -p: httpの実際のポートとDockerのhttpポートを指定します。-p [実態側]:[Docker側]になります。-p 8080:80の場合はlocalhost:8080にアクセスすることになります。
  • -d: バックグラウンドで実行する。
  • -v: ディレクトリのマウントをします。[ホストディレクトリの絶対パス]:[コンテナの絶対パス]
$ docker run -d --privileged --name test -p 80:80 -v ~/mydocker:/var/www/html:rw centos:latest /sbin/init 307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb

Dockerのコンテナが立ち上がったか確認します。testというdockerコンテナが立ち上がりました。

$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                     PORTS                                         NAMES
7043fa4d06cc        centos:latest           "/sbin/init 307835c3…"   29 seconds ago      Up 8 seconds               0.0.0.0:80->80/tcp                            test

コンテナを起動します。コンテナと言えどもさすがOS、立ち上がるのに時間がかかる。

$ docker start 

これでコンテナでCentOS7が立ち上がりました。

コンテナの中に入ります。

$ docker exec -it test /bin/bash
[root@7043fa4d06cc /]# 

これでCentOS7の中に入れました。いつものようにコマンドラインで確認してみます。

# cd /
# ls -al
drwxr-xr-x   1 root root  4096 Sep 28 07:17 .
drwxr-xr-x   1 root root  4096 Sep 28 07:17 ..
-rwxr-xr-x   1 root root     0 Sep 28 07:17 .dockerenv
-rw-r--r--   1 root root 12090 Aug  1 01:10 anaconda-post.log
lrwxrwxrwx   1 root root     7 Aug  1 01:09 bin -> usr/bin
drwxr-xr-x  14 root root  3260 Sep 28 07:18 dev
drwxr-xr-x   1 root root  4096 Sep 28 07:18 etc
drwxr-xr-x   2 root root  4096 Apr 11  2018 home
lrwxrwxrwx   1 root root     7 Aug  1 01:09 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Aug  1 01:09 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096 Apr 11  2018 media
drwxr-xr-x   2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x   2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 228 root root     0 Sep 28 07:17 proc
dr-xr-x---   2 root root  4096 Aug  1 01:10 root
drwxr-xr-x  14 root root   300 Sep 28 07:18 run
lrwxrwxrwx   1 root root     8 Aug  1 01:09 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x  13 root root     0 Sep 28 07:20 sys
drwxrwxrwt   7 root root  4096 Aug  1 01:10 tmp
drwxr-xr-x  13 root root  4096 Aug  1 01:09 usr
drwxr-xr-x   1 root root  4096 Sep 28 07:18 var

おおLinuxだ!いい時代になりましたねぇ。ここから先は基本的にはCentOS7の使い方になりますが、ちょっと面倒くさいのはCentOS7の実際のポートをDockerの仮想ポートみたいなものをつなげる作業が必要です。Dockerの中でpostfixを動かしてport:589とかに接続してもそのままでは通信できません。

Apacheを立ち上げてみる

# yum -y install httpd
# systemctl start httpd.service

ブラウザーからローカルホストにアクセスする

http://localhost/

あるいは、$ curl -k localhostとかでもいいです。

Apacheのいつもの初期画面が出たらOK。


Documentroot

Docker内で起動するCentOS7内のApacheのDocumentrootは、docker runで指定したディレクトリにあたります。

Dockerの後始末とか

Dockerコンテナの停止(コンテナは残ります。)

$ docker stop test

Dockerコンテナの削除

$ docker rm 4dee3a3dd03f

元々のイメージの後始末も必要なんですが、ここでは割愛。


よく使うDockerコマンド

バージョン確認

$ docker --version

DockerのイメージをDockerhubからpullする。https://hub.docker.com/で検索して使いたいイメージを指定します。

$ docker pull [イメージ名]
(例)$ docker pull centos:latest

Dockerの実行

いっぱいやることあるので、ここでは割愛

$ docker run [オプション or 引数]

Docker起動

$ docker start [コンテナID | コンテナ名]

Dockerコンテナの確認

$ docker ps -a

Docker停止

$ docker stop [コンテナID | コンテナ名]

Dockerコンテナの削除

$ docker rm [コンテナID | コンテナ名]