Docker のインストール

2023年10月29日

はじめに

Ubuntu 20.04 LTS に Docker をインストールする。こちら を参考にする。

Docker のインストール

前準備

$ sudo apt update
$ sudo apt install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update

インストール

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

テスト

$ sudo docker run hello-world

sudo なしで使えるようにする

sudo なしで docker コマンドを使えるようにする。

$ sudo usermod -a -G docker ユーザー

再起動

Ubuntu イメージの利用

Ubuntu イメージを取得してみる。

$ docker image pull ubuntu:20.04
$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        20.04     825d55fb6340   2 hours ago    72.8MB

コンテナを起動してコマンドを実行する。

$ docker run ubuntu:20.04 ls -l
total 48
lrwxrwxrwx   1 root root    7 Apr  5 04:59 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Apr 15  2020 boot
drwxr-xr-x   5 root root  340 Apr  6 00:56 dev
drwxr-xr-x   1 root root 4096 Apr  6 00:56 etc
drwxr-xr-x   2 root root 4096 Apr 15  2020 home
lrwxrwxrwx   1 root root    7 Apr  5 04:59 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Apr  5 04:59 lib32 -> usr/lib32
lrwxrwxrwx   1 root root    9 Apr  5 04:59 lib64 -> usr/lib64
lrwxrwxrwx   1 root root   10 Apr  5 04:59 libx32 -> usr/libx32
drwxr-xr-x   2 root root 4096 Apr  5 04:59 media
drwxr-xr-x   2 root root 4096 Apr  5 04:59 mnt
drwxr-xr-x   2 root root 4096 Apr  5 04:59 opt
dr-xr-xr-x 451 root root    0 Apr  6 00:56 proc
drwx------   2 root root 4096 Apr  5 05:02 root
drwxr-xr-x   5 root root 4096 Apr  5 05:02 run
lrwxrwxrwx   1 root root    8 Apr  5 04:59 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Apr  5 04:59 srv
dr-xr-xr-x  13 root root    0 Apr  6 00:56 sys
drwxrwxrwt   2 root root 4096 Apr  5 05:02 tmp
drwxr-xr-x  13 root root 4096 Apr  5 04:59 usr
drwxr-xr-x  11 root root 4096 Apr  5 05:02 var

コンテナリストを表示する

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                          PORTS     NAMES
9cb0a516233a   ubuntu:20.04   "ls -l"       4 seconds ago    Exited (0) 2 seconds ago                  interesting_kapitsa

コンテナはイメージから作成され、一度実行すると残る。

コンテナの削除

$ docker rm interesting_kapitsa

コンテナを起動して中に入る

$ docker run -it ubuntu:20.04 /bin/bash
root@c2430155105c:/#

exit で抜ける。

再度中に入る

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED              STATUS                      PORTS     NAMES
c2430155105c   ubuntu:20.04   "/bin/bash"   About a minute ago   Exited (0) 23 seconds ago             peaceful_vaughan

$ docker start peaceful_vaughan
$ docker attach peaceful_vaughan
root@c2430155105c:/#

コンテナを実行したまま抜けるには、Ctrl+P、Ctrl+Q を入力する。

コンテナを止める

$ docker stop peaceful_vaughan

Jupyter Notebook 環境を作る

Ubuntu コンテナの中で以下のように実行する。

(コンテナの中)
# apt update
# apt install python3
# apt install python3-pip
# pip install jupyterlab

JupyterLab を起動してアクセスしたいところではあるが、コンテナにあとからポートの指定 (ポートフォワーディング) をすることができないので、コンテナからイメージを作る。

$ docker commit peaceful_vaughan jupyter
JupyterLab 起動
$ docker run -p 8888:8888 -it jupyter /bin/bash

(コンテナの中)
# jupyter lab --ip=0.0.0.0 --allow-root

http://127.0.0.1:8888/lab?token=... をコピーして、ホストのブラウザで JupyterLab につながれば OK。

トークンを指定することもできる。

# jupyter lab --ip=0.0.0.0 --ServerApp.token="test" --allow-root

http://localhost:8888/lab?token=test で JupyterLab につながれば OK。

一度認証したらクッキーが効くので注意。

設定の保存

(コンテナの中)
# apt install vim
# vim config.py

config.py

c.ServerApp.ip = "0.0.0.0"
c.ServerApp.token = "test"
c.ServerApp.open_browser = False

実行

# jupyter lab --config config.py --allow-root

イメージを作る

名前を変えておく。

$ docker tag jupyter jupyter_tag
$ docker rmi jupyter

作業ディレクトリを作成

$ mkdir jupyter
$ cd jupyter

Dockerfile を作成

$ vi Dockerfile

ここではテストのために Ubuntu イメージそのままを作る。

Dockerfile

FROM ubuntu:20.04

イメージの作成

$ docker build -t jupyter .

イメージができれば OK。

削除

$ docker rmi jupyter

Jupyter 環境の Dockerfile

FROM ubuntu:20.04                                                                
                                                                                 
USER root                                                                        
RUN apt-get update --yes && \                                                    
    apt-get install --yes --no-install-recommends \                              
    python3 \                                                                    
    python3-pip \                                                                
    vim && \                                                                     
    apt-get clean && \                                                           
    pip install jupyterlab                                                       
                                                                                 
ADD ./config.py /config.py                                                       
                                                                                 
CMD jupyter lab --config config.py --allow-root

ログを見るには次のようにする。

$ docker logs compassionate_gould

ルートで実行されるのを避けるため、ユーザーを設定する。

Dockerfile

FROM ubuntu:20.04                                                                
                                                                                 
USER root                                                                        
RUN apt-get update --yes && \                                                    
    apt-get install --yes --no-install-recommends \                              
    python3 \                                                                    
    python3-pip \                                                                
    vim && \                                                                     
    apt-get clean && \                                                           
    pip install jupyterlab                                                       
                                                                                 
RUN useradd -s /bin/bash -m jovyan                                               
                                                                                 
USER jovyan                                                                      
WORKDIR /home/jovyan                                                             
                                                                                 
ADD ./config.py /home/jovyan/config.py                                           
CMD jupyter lab --config config.py