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