0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker コマンド + 学習したことの備忘録

Last updated at Posted at 2024-09-15

Dockerfileの作成

FROM python:3.11-slim

ENV DEBIAN_FRONTEND=noninteractive

# Install system dependencies and Node.js
RUN apt-get update && apt-get install -y \
    curl \
    git \
    vim \
    build-essential \
    && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs \
    && rm -rf /var/lib/apt/lists/*

# Create user
RUN useradd -m -s /bin/bash anaconda_user

# Install Python packages
RUN pip install --no-cache-dir \
    jupyter \
    jupyterlab \
    pandas \
    numpy \
    matplotlib \
    seaborn \
    scikit-learn \
    anthropic \
    openai \
    requests \
    ipykernel

# Install Claude CLI
RUN npm install -g @anthropic-ai/claude-code \
    && ln -sf /usr/local/bin/claude-code /usr/local/bin/claude

# Copy Claude CLI script and make it executable
COPY claude_cli.py /usr/local/bin/claude_py
RUN chmod +x /usr/local/bin/claude_py \
    && chown anaconda_user:anaconda_user /usr/local/bin/claude_py

# Set up Jupyter kernel
RUN python -m ipykernel install --name=python3 --display-name="Python 3"

# Configure Jupyter Lab with dark theme
RUN mkdir -p /home/anaconda_user/.jupyter/lab/user-settings/@jupyterlab/apputils-extension
RUN echo '{"theme": "JupyterLab Dark"}' > /home/anaconda_user/.jupyter/lab/user-settings/@jupyterlab/apputils-extension/themes.jupyterlab-settings

WORKDIR /home/anaconda_user
USER anaconda_user

# Expose Jupyter port
EXPOSE 8888

CMD ["/bin/bash"]

docker-compose.ymlの作成

services:
  anaconda:
    build: .
    platform: linux/amd64
    container_name: ubuntu-anaconda
    volumes:
      - ./workspace:/home/anaconda_user/workspace
    ports:
      - "8888:8888"  # Jupyter Notebook用
    environment:
      - JUPYTER_ENABLE_LAB=yes
      - JUPYTER_TOKEN={YOUR_TOKEN}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    deploy:
      resources:
        limits:
          memory: 4G
        reservations:
          memory: 2G
    command: >
      bash -c "
        source ~/.bashrc &&
        jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --notebook-dir=/home/anaconda_user/workspace --LabApp.token=$${JUPYTER_TOKEN} --LabApp.theme='JupyterLab Dark'
      "

コンテナの起動とシャットダウン

docker-compose down  //シャットダウン
docker-compose up -d // 起動

すべてのコンテナを停止

docker stop $(docker ps -aq)

コンテナの一括削除(コンテナを停止してから)

docker rm $(docker ps -aq)

1行で実行

docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

Processを切ってコンテナから出る

exit

exitしたらコンテナを削除する

docker run -it -rm containerID TAG

Processを残したままコンテナから出る

docker detach

コンテナの再起動

docker restart

実行中のコンテナ内でコマンドを実行する

docker exec containerID command

commitして更新する

docker commit containerID IMAGE:update

Imageを別名で保存する

docker tag IMAGE:update userName/repoName

Docker Hubにpushする

docker push userName/repoName

docker インストラクション

FROM -> OSを指定する

RUN -> RUN毎にレイヤーが追加される

最小限のレイヤーにするためにコマンドは&&で繋ぎ、\で改行する

インタラクティブなインストールにはオプションの-yを指定する。

USING CACHE

docker fileはCACHEを使って作成し、

コマンドが通るのを確認してからRUNにまとめて書く。

COPY -> ファイルのコピー

COPY文は&&繋げない

COPY fileName PATH

ADD

tarファイルをコピーして解凍する

CMD -> ファイルの最後に記述する

# CMDと[]の間にはスペースが必要

CMD ["COMMAND","PARAM1","PARAM2"]

WORKDIR

実行ディレクトリを変更する

WORKDIR 絶対PATH

ENV -> 環境変数の設定

ENV key value

ホストとコンテナの関係

ホストのファイルシステムをコンテナにマウントする

# DIR=任意の名前、newDir/にホストにあるファイルが見える(コンテナにファイルがあるわけではない)
# ホストのファイルを更新するとプロンプトにupdatedと表示される
# dirの作成はdockerが行ってくれる(:/newDir)

docker run -v ~Desktop/DIR:/newDir IMAGE TAG

ユーザIDとグループIDを指定してコンテナをRUNする

docker run -it -u $(id -u):$(id -g) -v ~Desktop/DIR:/newDir IMAGE TAG

# コンテナではユーザIDを認識しない(I have no name)

ホストとコンテナをポートを指定して繋げる

docker run -p 8888:8888 IMAGE TAG

:sunglasses: Memo

コンテナは実行環境として使用し、ホストのファイルシステムをコンテナにマウントする

DockerHubで命名するリポジトリ名は - で繋ぐ

my-repo123

docker build -t でimage名を指定しないとダンクリングイメージが生成される

# ダングリングイメージは<none>と表示される

<none> 

# そのため、docker build -t でimage名を指定してimageを作成する

ファイルサイズを考慮して作成する


build context(docker_dir)について

  • buildに使わないファイルはbuild contextに格納しない。

  • 大きいファイルはtarで圧縮してADDで解凍する

  • オプション -f(dockerfileが複数ある場合)

docker build -f PATH/fileName .

パーミッション(アクセス権限)

# Iから始まるのはシムリンク、dから始まるのはディレクトリ、-から始まるのはファイル

# r:読み取り、w:書き込み、x:実行

# 所有者、所有グループ、その他の順に表示される

コンテナがアクセスできる上限のCPUを設定

# 重要度の高いコンテナ: 2-4コア
# 中程度の重要度のコンテナ: 1-2コア
# 軽量なコンテナ: 0.5-1コア

docker run --cpus=2 your-image

コンテナがアクセスできる上限のメモリを設定

# 大規模なアプリケーション: 32-64GB
# 中規模のアプリケーション: 8-16GB
# 軽量なアプリケーション: 1-4GB

docker run --memory=16g your-image

ログ管理

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?