元経理マンが27歳でエンジニアに転向してからのメモ集

元経理マンがエンジニアに転向して現在

Docker体験してみる

最近の開発環境事情でDockerという言葉をよく聞く。 しかし、Vagrant(VirtualBox)と何が違うかよくわからないので、さくらのナレッジを参考に実際に使ってみる。

knowledge.sakura.ad.jp

OSごと仮想化(ゲストOSとして稼働)しているのがVagrant(VirtualBox)、 ホストOSの上に複数のコンテナという概念の仮想環境を使えるのがDockerということだそうだ。

今回はCentOS7のVM環境を使って、Dockerを導入してみる。

VM目線でいうとMacがホストOSでCentOSがゲストOS Docker目線でいうとCentOSがホストOS(Macは関係なし)

まずはVagrantで起動

いつもどおりcentos/7でinitし、起動する。 詳しいことは割愛

導入

まずは、Dockerインストールのための準備

# yum yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

yumリポジトリの追加

# yum-config-manager \
> --add-repo \
> https://download.docker.com/linux/centos/docker-ce.repo

Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

入っているか確認

# ll /etc/yum.repos.d/
total 36
(略)

-rw-r--r--. 1 root root 2424 Sep  2 09:22 docker-ce.repo

Docker CEをインストール

# yum install docker-ce

ちなみに

  • Docker CEとは

    • Docker Community Edition (無償版)
  • Docker EEとは

    • Docker Enterprize Edition (有償版)

と、なっている。

確認

# yum list installed | grep docker-ce

docker-ce.x86_64                18.06.1.ce-3.el7               @docker-ce-stable

入った。

Dockerサービスの起動

# systemctl status docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com


# systemctl start docker

# systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-09-03 07:23:24 UTC; 7s ago
     Docs: https://docs.docker.com
 Main PID: 2629 (dockerd)
   CGroup: /system.slice/docker.service
           ├─2629 /usr/bin/dockerd
           └─2635 docker-containerd --config /var/run/docker/containerd/containerd.toml

手動で起動して、次回から自動で起動するようにも設定した。

Dockerの情報をみる

当然、何も動いていない。

# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-862.2.3.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 487.7MiB
Name: localhost.localdomain
ID: 6FFH:V7Y2:DT4N:6OWT:Y65K:VRPV:MQ2R:FT7R:HHKS:GY5E:VEWK:7I2L
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

基本操作

イメージの確認

# docker images

imageは(Docker Hub)https://hub.docker.com/explore/に上がっているので、 そこからイメージをとってくる。 この辺はvagrantと似ている。

nginxをDockerで動かしてみる。

nginxを取得/起動

# docker pull nginx

Using default tag: latest
latest: Pulling from library/nginx
be8881be8156: Pull complete 
65206e5c5e2d: Pull complete 
8e029c3e2376: Pull complete 
Digest: sha256:1b109555ad28bb5ec429422ee136c5f5ab5ee6faaeb518836a5c9a3b6436a1bd
Status: Downloaded newer image for nginx:latest

# docker run -d --name nginx-container -p 8181:80 nginx

63e357140ef5078fe165736f06617b5da313f0e738d2344434faf3a0c5c2a7f7
  • -dはバックグラウンドで起動
  • --nameでコンテナの指定
  • -p でポートの指定。
    • ホストとコンテナ間のポートフォワード設定

確認

ブラウザにインスタンスIPアドレスとポート番号(8181)を打ち込めば 「Welcome〜」とブラウザ上で表示される。

nginxも動いているのが確認できる。

# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
63e357140ef5        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 6 minutes        0.0.0.0:8181->80/tcp   nginx-container

止める

# docker stop nginx-container

nginx-container

# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
63e357140ef5        nginx               "nginx -g 'daemon of…"   7 minutes ago       Exited (0) 3 seconds ago                       nginx-container