WindowsにDocker環境とUbuntu環境を準備する

Dockerとは

以下Qiitaの記事がメリットがしっくりきて図も豊富でとてもわかりやすかったです。

WindowsにDocker環境を用意する

以下サイトを参考にDocker環境を準備します。特に迷うことはありませんでした。

Ubuntu 22.04 コンテナを作成する

次にUbuntu22.04のコンテナを作成していきます。

スタートメニューからDocker Desktopを起動します。

イメージをダウンロードします。

docker pull ubuntu:22.04 
docker images

ダウンロードしたイメージからコンテナを作成します。

docker run --name ubuntu2204 -it ubuntu:22.04 /bin/bash 

上記のrunコマンドでは以下の処理を一気に行ってくれています。

  1. Docker Hubから、ubuntu:22.04のイメージを取得(pull)する。
  2. ubuntu:22.04のイメージから、ubuntu2204という名前でコンテナを作成(create)する。
  3. コンテナubuntu2204を起動(start)する。
  4. コンテナubuntu2204にログイン(-it)する。

通常はrunコマンド一発での運用が主になるそうですが、以下サイトを参考にして一度pull, create, startを個別に実施したほうが全体の理解は進みました。

runコマンドではpullから行われてしまうため作成したコンテナに再度ログインする際はexecコマンドを利用します。

docker exec -it ubuntu2204 /bin/bash

Ubuntuの構築は以下サイトを参考にしました。

DockerのUbuntuにPython環境を構築する

次にDocker Ubuntuにログインした状態でPython環境を構築していきます。

apt update
apt install -y python3 python3-pip
apt install build-essential libbz2-dev libdb-dev \
  libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
  libncursesw5-dev libsqlite3-dev libssl-dev \
  zlib1g-dev uuid-dev

以下コマンドがエラーなく実行できたら成功です。

Python3 -version

これでDocker環境にUbuntuを構築することができ、UbuntuにPythonをセットアップすることができました。
ただこれだと毎回UbuntuにログインしてPythonを入れないといけないので面倒です。
ということで次はDockerfileというものを使って細かなセットアップも楽に行おうと思います。

Dockerfileを使って細かいセットアップを一気に行う

最初にDockerfileの存在を知ったときは、「Docker Hubのイメージを利用したのを覚えるだけでも頭が混乱しているのに、さらに追加の概念が入るのか…」と絶望しました。
ただDockerfileはセットアップで楽するためには避けて通れない道のようです。楽するためなら仕方ありません。

まずは以下のようなディレクトリ構成でファイルを作成します。

それぞれのファイルの中身を記載します。
まずはDockerfileです。DockerfileはDockerコンテナの作成と、その後の必要なセットアップ情報をまとめたものだと理解しました。

FROM ubuntu:22.04
USER root

RUN apt update
RUN apt install -y python3 python3-pip vim
RUN pip install --upgrade pip

COPY requirements.txt /root/

RUN pip install -r /root/requirements.txt
  • FROM ubuntu:22.04
    PullしたいDockerイメージを指定します。
  • apt, pip
    python, pip, vimをインストールします。
  • COPY requirements.txt /root/
    ローカル環境のrequirements.txtをDocker環境のrootディレクトリ直下にコピーします。
  • pip install -r /root/requirements.txt
    requirements.txtに記載されているパッケージをインストールします。

次にdocker-compose.ymlです。こちらもセットアップ情報が記載されています。

version: "3"
services:
  python3:
    restart: always
    build: .
    container_name: "ubuntu2204"
    working_dir: "/root/"
    tty: true
    volumes:
      - ./src:/root/src
  • container_name
    コンテナ名です。以降でも利用します。
  • volumes
    ローカル環境の./srcをコンテナ環境の/root/srcにマウントします。
    これにより指定したローカル環境とコンテナ環境が同期され、ローカル環境内の./srcを編集するとコンテナ環境の/root/srcにも変更が反映されます。

次はmain.pyとrequirements.txtです。今回はテスト用になります。

import numpy as np


def main():
  print("hello world!!")


if __name__ == "__main__":
  main()
numpy

これで準備は完了です。
カレントディレクトリを作業中のフォルダにした状態でローカル環境からコマンドを実行します。

docker compose up -d --build

作成したコンテナubuntu2204にログインします。

docker exec -it ubuntu2204 /bin/bash

main.pyの確認を実施します。

# ls
requirements.txt  src

# cd src
# ls
main.py

# python3 main.py
hello world!!

無事main.pyのhello world!!が実行されています!

以降は後片付けになるため、必要に応じて実施します。
上から順にUbuntuからのログアウト、dockerコンテナの停止、dockerコンテナの削除になります。

# exit
exit

> docker stop ubuntu2204
ubuntu2204

> docker rm ubuntu2204
ubuntu2204

ローカルからDocker環境にファイルをコピーする

以下コマンドを実行することで、ローカルPCにあるファイル・フォルダをDocker環境にコピーできます。

docker cp [オプション] ローカル・パス|- コンテナ:パス
docker cp /tmp/local_folder ubuntu2204:/root/local_folder

補足:よく使うDockerコマンドリスト

補足です。
「あのコマンド何だったっけ…」となるたびにネット検索するのがもったいないのでチートシートを作りました。

基本操作

########イメージの操作########
#イメージ一覧を表示
docker images

#Docker Hubからイメージを取得
docker pull {イメージ名}

#Dockerfileからイメージを作成
docker build {Dockerfileのパス}

#イメージを削除
docker rmi {イメージID}


########コンテナの操作########
#コンテナ一覧を表示
docker ps -a

#コンテナを作成
docker create {イメージ名}

#コンテナを起動
docker start {コンテナ名} 

#コンテナを停止
docker stop {コンテナ名}

#コンテナを削除
docker rm {コンテナ名} 

#イメージを取得、コンテナを作成、コンテナを起動
docker run {イメージ名}


########その他の操作########
#コンテナにログイン
docker exec -it {コンテナ名} bash

作成は以下の記事を参考にしています。

Dockerfileを利用したコンテナ作成

# コンテナ作成
docker compose up -d --build

# コンテナログイン
docker exec -it {コンテナ名} /bin/bash

コメントを残す

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

CAPTCHA