Docker

see also: https://docs.docker.com/engine/install/ubuntu/

Uninstall Docker

sudo apt-get remove docker docker-engine docker.io containerd runc

Add base packages

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Add gpg key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Verify gpg key

sudo apt-key fingerprint 0EBFCD88

Add remote repository

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Install docker engine

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Dockerグループにユーザを追加

sudo groupadd docker
sudo usermod -aG docker $USER

再起動後に起動

sudo systemctl enable docker

資料

覚えてほしい図

コンテナにソフトウェアの動作に必要なライブラリやミドルウェア,言語の動作環境をまとめている.

出典: 高良 真穂, Docker コンテナの必要性と基礎, H2 Kubernetes ハンズオン~Docker コンテナを運用のゲンバへ~, Internet Week 2018, https://www.nic.ad.jp/ja/materials/iw/2018/proceedings/h2/h2-takara-1.pdf

コンテナの操作

ubuntuコンテナを実行

docker run -it ubuntu:18.04 bash

ubuntuのバージョンをチェック

cat /etc/lsb-release

htopを入れてみる

apt-get update
apt-get install htop
htop

残骸

docker ps -a

containerに入ってhogeディレクトリを作成

docker run -it ubuntu:18.04 bash
> mkdir hoge
> ls 
bin  boot  dev  etc  hoge  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
> exit
docker run -it ubuntu:18.04 bash
> ls 
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
## hogeいない

DockerHubの操作

docker hubでDebianを検索

https://hub.docker.com/search?q=debian&type=image

docker run ubuntu:18.04の意味

https://hub.docker.com/_/ubuntu?tab=tags&page=1&name=18.04

docker pullとrunの仕組み

docker hubでnginxを検索して実行してみる

https://hub.docker.com/_/nginx

docker run --name some-nginx -d -p 8080:80 <<some-content-nginx>>

コンテナへアクセス

起動しているコンテナ一覧

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
3b170ce3f841        nginx:stable        "/docker-entrypoint.…"   7 seconds ago       Up 6 seconds        0.0.0.0:8080->80/tcp   some-nginx

ブラウザから ブラウザでアクセス(koyama-test0は自分のVM名)

http://koyama-test0:8080/

コンテナに入って作業

Nginxコンテナに入ってHTMLを変更

docker exec -it 3b170ce3f841 bash

root@3b170ce3f841:/# apt update
root@3b170ce3f841:/# apt install vim
root@3b170ce3f841:/# cd /usr/share/nginx/html
root@3b170ce3f841:/# cp index.html index.html.org

コンテナにボリュームマウント

ローカルのhtmlディレクトリをマウントしてHTMLを変更

mkdir html
cd html

index.htmlというファイルを作成する.

cat > index.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>this is title</title>
</head>
<body>
  <h1>this is test page</title>
</body>
</html>

[Ctrl] + D

コンテナを起動する.

docker run -d -p 8100:80 -v $PWD:/usr/share/nginx/html nginx:stable

Ghostを動かす.

https://hub.docker.com/_/ghost

動かしてみる.管理画面にアクセスする(koyama-test0は自分のVM名に置き換える)

http://koyama-test0:3001/ghost/