Dockerの使い方メモ

クリーンな環境を構築したり、使い捨てしたり、テストに使ってみたりと色々便利なdockerですが、最低限のコマンドのメモです。

インストール

公式doc

Azure VM上のUbuntu にインストールしてみた。

tyamazoe@vm-ubuntu-1804-test2:~$ uname -a
Linux vm-ubuntu-1804-test2 4.18.0-1020-azure #20~18.04.1-Ubuntu SMP Wed Jun 5 12:43:15 UTC 2019 x86_64 x86_64 x86_64U/Linux GNU/Linux

旧バージョンのアンインストール

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

インストール

$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) 
sub   rsa4096 2017-02-22 [S]

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

バージョン

$ sudo docker --version
Docker version 18.09.6, build 481bc77

コンテナの実行 Hello World

$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
... 
#以下省略

コマンド

コンテナ操作

# コンテナを起動してそのコンテナのコンソールに入る
$ sudo docker run -it ubuntu bash

# [Ctrl+p Ctrl+q]でコンテナから抜ける。
# exit でコンテナ終了

#バックグラウンド起動
$ sudo docker run -d -it debian /bin/bash

# コンテナのコンソールに入る
$ sudo docker exec -it [container name] bash
$ sudo docker attach [container_id]

# コンテナ再開、停止
$ docker start [container name]
$ docker stop [container name]

#コンテナ削除
$ docker rm [-f] [container name]

イメージ関連

# イメージ centosのlatestバージョンをダウンロード
# sudo docker pull centos:latest

# イメージ一覧
$ sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zoe/flask-demo      1.0                 ecfd357d200c        3 days ago          474MB
ubuntu              latest              4c108a37151f        9 days ago          64.2MB
nginx               latest              719cd2e3ed04        2 weeks ago         109MB
centos              latest              9f38484d220f        3 months ago        202MB
hello-world         latest              fce289e99eb9        5 months ago        1.84kB
jagregory/pandoc    latest              58841db3ebe8        2 years ago         3.05GB

# 実行中のコンテナ
$ sudo docker ps

# 実行履歴一覧
$ sudo docker ps -a

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                     PORTS               NAMES
b1f2f0fe87ea        zoe/flask-demo:1.0   "bash"                   3 days ago          Exited (0) 3 days ago                          cocky_feynman
b053f1969068        nginx                "nginx -g 'daemon of…"   3 days ago          Exited (0) 3 days ago                          nginx-cont2
d14448dd5217        centos               "bash"                   3 weeks ago         Exited (127) 3 weeks ago                       festive_ardinghelli
cedf425ea8f3        jagregory/pandoc     "/root/.cabal/bin/pa…"   3 weeks ago         Exited (1) 3 weeks ago                         gifted_buck
1eaa398167b8        hello-world          "/hello"                 3 weeks ago         Exited (0) 3 weeks ago                         inspiring_nobel

コンテナイメージの作成

UbuntuにPython3とflaskのイメージを作成する場合

Dockerfile

#ベースイメージ
FROM ubuntu:latest

# パッケージのインストール
RUN apt-get update
RUN apt-get install python3 python3-pip -y

RUN pip3 install flask

ビルド

$ sudo docker pull ubuntu 

$ sudo docker build . -t zoe/flask-demo:1.0

コンテナ実行

$ sudo docker run -it --rm zoe/flask-demo --name flask-demo1 bash

# ポートフォワードして、ローカルのworkフォルダを/opt/appへマウント
sudo docker run -it -p 5000:5000 -v /home/hoge/work:/opt/app zoe/flask-demo:1:0 bash

これでローカルの workフォルダに作成したflaskのプログラムをコンテナの/opt/appでapplication.py を実行可能。

flaskサンプル

# application.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello flask!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です