いまさらながら、Docker始めました。
しかも、macで・・
メモです。
環境
DockerDesktopよりも、Macだと Orbstackがいいって誰かが言ってたので、Orbstack配下でDockerを動かしてみます。
階層イメージ
こんなイメージにしたいです。
Mac
│
├── エディタ
│ └── ソース編集
│
├── ~/prg/orbtest/
│ ├── Dockerfile
│ ├── compose.yaml
│ ├── hogehoge.c
│ ├── hogehoge.py
│ └── .venv/
│
└── OrbStack
└── Docker
└── my-dev-container
│
├── Ubuntu 24.04
│
├── dev ← 普段のユーザー
│
├── gcc
├── Python
└── Git
Orbstackのインストール
homebrewでインストールしました。
$ brew install --cask orbstack
インストールしたら、ランチャー(今だと「アプリ」)からOrbStackを起動しました。
なんかボタンおしました。
Dockerが動いてるか確認
$ docker --version
Docker version 28.x.x, build xxxxx
途中で、のように表示されたので、OKですね!
お試しをやってみます。
$ docker run --rm hello-world
を実行します。
Hello from Docker!
と表示されたので、OKですね。
なんか、満足。
でも、もうちょっとやります。
macのフォルダとDockerフォルダの同期?
日本語あってるかわかんないですが、Docker上でコードを書くより、Mac上で慣れたエディタで書いたほうがいいです。
フォルダの作成
いつも、~/prgフォルダの下に、ファルダ作ってるので、今回は下記にしました。
$ cd
$ cd prg
$ mkdir orbtest
Docker起動
$ cd orbtest
$ docker run -it --rm \
-v "$PWD:/workspace" \
-w /workspace \
ubuntu:24.04 \
bash
root@xxxxxxxx:/workspace#
ってなったので、Dockerからファイルを作ってみて動作確認してみます。
# echo "Hello hogehoge" > hello.txt
# ls
ファイルできてますね。
Dockerから抜けます。
# exit
Macに戻ったので、
$ ls
hello.txt
ファイルありますね。
中身も念のため・・
$ cat hello.txt
同期取れてますね。かなり満足。
でも続きます・・
Dockerfileの作成
これ作らないとですね。
エディタで、同じフォルダにDockerfileを作ります。
gccやpythonその他、思いついたのを書いときます。
又、devっていうユーザーを作って、使うようにするので、sudoも入れときます。
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
build-essential \
git \
curl \
wget \
sudo \
python3 \
python3-pip \
python3-venv \
&& rm -rf /var/lib/apt/lists/*
# 開発用ユーザーを作成
RUN useradd -m -s /bin/bash dev \
&& echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev \
&& chmod 0440 /etc/sudoers.d/dev
WORKDIR /workspace
USER dev
CMD ["/bin/bash"]
compose.yamlの作成
同じフォルダにエディタで作りました。
その辺からコピペしてきたんですが、あってるかな・・
services:
dev:
build: .
working_dir: /workspace
volumes:
- .:/workspace
tty: true
stdin_open: true
実行!
$ docker compose up -d --build
最初はbuildで、時間かかりました。
大丈夫っぽい。
動いてるかな・・
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
orbtest-dev-1 orbtest-dev "/bin/bash" dev 5 seconds ago Up 4 seconds
動いてるっぽい。
ログインしてみます。
$ docker compose exec dev bash
dev@xxxxxxxx:/workspace$
オッケー!
なにか作ってみる
Dockerから抜けます。
dev@xxxxxxxx:/workspace$ exit
もちろん「hello.c」
macでいつものコードを書きます。
#include <stdio.h>
int main(void)
{
printf("Hello Docker!\n");
return 0;
}
エディタで保存したら、再び、Dockerへ!
$ docker compose exec dev bash
dev@xxxxxxxx:/workspace$ gcc hello.c -o hello
dev@xxxxxxxx:/workspace$ ./hello
Hello Docker!
できたー。
おまけメモ
停止
$ docker compose down
起動
$ docker compose up -d
プロセス確認
$ docker compose ps
ログイン?
$ docker compose exec dev bash
完成
めでたしめでたし。