PR

dockerのhello-worldが動かないときの対処法

Androidアプリ

自分用の忘備録です。環境はubuntu。

立プロ

新卒でメーカーに入り、10年間組み込みの現場で設計を行う。
今は個人事業主として自作の組み込み機器開発や、エージェント様に紹介いただき業務委託を行っています。
C,C#,JavaScript, Vue, PHP, VBA, GAS, Kotlinなど、扱う言語が増えゆく日々。

立プロをフォローする

dockerインストール

こちらのサイトを参考にさせていただきました

【簡単な4つの方法】UbuntuにDockerをインストールするには
...
$ sudo apt update
$ sudo apt install ca-certificates curl gnupg lsb-release
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.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 install docker-ce docker-ce-cli containerd.io

バージョン情報を聞いてみる

$ docker -v

//戻り値の例:Docker version 24.0.7, build *******

dockerが問題なくインストールされていれば、バージョン情報が返ってきます

hello-worldで動作確認

とりあえず、hello-worldでdockerが動くか確かめる

docker run hello-world

Hello from Docker!が返ってくれば正常動作している。

Dockerって何?使い方は?

ここでいったんdockerの取り扱いイメージをはっきりさせておきたい。

dockerはコンテナと呼ばれる単位で仮想環境を作ることができる大枠です。

今までは仮想環境のメモリを確保して、そのなかにOS入れて、アプリ入れて、とやっていましたが、DockerだとホストマシンOSを使って処理できるため動作が軽いです。

使い方としては、まずdockerfileをビルドして、dockerイメージを作ります。

作ったイメージをrunで実行して処理します。

dockerfile.txtはC言語でいうところのcmakelists
コンテナの構成内容を記述している

dockerfileのビルド

ビルドするときは、dockerfileがあるディレクトリにして実行する。

最後のピリオドも忘れないように!

$ docker build -t <イメージ名>:<タグ名> .

たとえば、docker build -t tatepro:new .

のようにして、tateproというイメージを作り、そのタグはnewとしています。

タグは識別子で、イメージの特定に使えます、たぶん。

イメージファイルの確認

$ docker images

ビルドでイメージができているか、確認できる

イメージファイルの実行

$ docker run <イメージ名>

イメージ名を入れてrunで実行。

OCI runtime create failedでエラーになる

コンテナ起動に失敗しているときに起こるエラーとのこと。

とりあえずdockerイメージの削除&コンテナの削除して再起動してみる。

まずコンテナ削除。

$ docker rm <コンテナID>

hello-worldを入れて、imagesで見ると下記の通り

REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 6 months ago 13.3kB

間違えました、コンテナIDを見るには下記コマンドでした。

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7600cadc5b8 hello-world “/hello” 11 minutes ago Created youthful_pasteur
3fa77211e6cf hello-world “/hello” 2 hours ago Created interesting_chatterjee
b0fff3eee32e hello-world “/hello” 2 hours ago Created gallant_hofstadter
ce8230a89d74 hello-world “/hello” 2 hours ago Created xenodochial_ptolemy
15fc0328973d hello-world “/hello” 2 hours ago Created determined_hamilton
b72286d96def hello-world “/hello” 3 days ago Exited (0) 3 days ago sleepy_mendel

たとえば、docker rm e7600cadc5b8のようにコンテナIDを入力して実行していく。

つづいてイメージファイルの削除。

$ docker rmi <イメージ名>

docker rmi hello-world

これでイメージもコンテナも消えた、runしてみる。

$ docker run hello-world

だめだ、エラーが出る。

よく分からないので再起動。runしてみる。ちゃんと動いた…どういうことだ、とりあえず無視して先に進める。

runって何

どうもrunが自分の考えている動きと違う。

runを実行するたびに、コンテナが追加されていっている。

どうやらrunはコンテナを生成して、実行するコマンドのようだ。

既存コンテナの実行はstartとのこと。

$ docker start <コンテナ名>

コメント

タイトルとURLをコピーしました