使用Docker命令行操作docker-compose.yml文件的方法

你好,我是たくびー(@takubii)。

今回はDockerの理解を順序立てて行えるようにDockerコマンドからdocker composeまでを解説していこうと思います。
さまざまなサイトで、よくdocker composeを使って環境構築がされています。
Dockerの知識が不足している状態で利用すると、ついていけなくなる感じがします。
そうならないように、docker composeが何をやっているのか、分かりやすく説明していきたいと思います。

有关开发环境

这一次我们基于以下的前提进行了。

    • Mac OS

 

    • Docker

 

    • Macのterminal操作が少しできる

 

    Dockerの用語について少しの知識がある(コンテナやイメージなど)

只需使用CLI命令来构建Docker容器

まずはDockerコンテナを作成するために愚直にterminalから行っていきます。
最初にコマンドで環境構築することはコンテナの理解が深まるのでおすすめです。

暂且假设我们通过搭建Django的开发环境来进行下面的操作,目录结构如下所示。

.
└── requirements.txt

requirements.txt文件只需要包含Django即可,保持简洁。

Django

创建容器

我们将逐个查看以下指令。

docker hubというところからDockerイメージを取得します。
今回はDjangoの環境を作りたいので、Pythonの最新(2023/10/2現在)のイメージを取得します。

docker pull python:3.11.5

少し、長いですが以下のコマンドでコンテナを作成します。
各オプションについてはこの後すぐに解説します。

docker run -it -d --name docker-python -p 8000:8000 -e TZ=Asia/Tokyo -e LANG=C.UTF-8 -v ~/work/playground/docker-python:/docker-python python:3.11.5

以下表格整理了已设置的选项关于docker run命令。

オプション説明-itコンテナで出入力を行うためのオプション-dデタッチモードで作成するオプション、これをつけるとバックグラウンドで作成します–name docker-pythonコンテナ名を指定するオプション、「docker-python」の部分を任意の名前に変更できます-p 8000:8000ポートを指定し、コンテナを外部に公開するオプション、左がホスト側のポートで、右側がコンテナ側のポート-e TZ=Asia/Tokyo -e LANG=C.UTF-8-eでそれぞれの環境変数を設定するオプション-v ~/work/playground/docker-python:/docker-pythonホストマシンとコンテナで指定したフォルダをマウントするオプション、それぞれの環境で編集すると変更内容が反映されます

这是用于进入创建的容器的命令。

docker exec -it docker-python bash

在集装箱内的工作

在容器中,切换到用于创建应用程序的文件夹。
由于与Mac终端命令相同,如果经常使用terminal,则可能很熟悉。

cd docker-python/

我会安装Django。

pip install --upgrade pip
pip install -r requirements.txt

如果Django已经成功安装,您可以使用以下命令来检查版本。

python -m django --version

辛苦了。
现在可以在容器中搭建Django的开发环境。
如果要退出容器,请按照以下方式操作。

ctrl + p + q
または
exit

事后处理

最后是关于删除最新创建的容器的方法。
通过指定-f选项,即使容器正在运行,也可以将其删除。

docker rm -f docker-python

到此为止。

如果使用命令创建,需要进行容器的创建、容器内环境的配置以及清理等一系列的操作。由于这些操作将来会变得越来越简单,所以让我们继续进行下去吧。

使用Dockerfile进行构建

我刚刚稍微改变了目录结构。
我创建了一个名为django-app的目录,并在其中放置了requirements.txt文件。
我还在与django-app同级的位置创建了一个名为Dockerfile的文件。

.
├── Dockerfile
└── django-app
    └── requirements.txt

请以以下的方式编写Dockerfile。

FROM python:3.11.5

ENV TZ=Asia/Tokyo
ENV LANG=C.UTF-8

WORKDIR /django-app

COPY ./django-app/requirements.txt /django-app/
RUN pip install --upgrade pip && pip install -r requirements.txt

创建容器

首先,我们将创建先前创建的Dockerfile图像。
使用docker build命令。
图像名称可以使用以下方式:-t [图像名称]
最后的”.”表示指定当前目录,所以请不要忘记。

docker build -t python-django .

请使用与之前创建容器时相同的方式,使用docker run命令。只需将最后一个参数改为新创建的镜像。

docker run -it -d --name docker-python -p 8000:8000 -v ~/work/playground/docker-python/django-app/:/django-app python-django

我会进入集装箱。

docker exec -it docker-python bash

在容器内的工作

由于在Dockerfile中写入了工作内容,所以可以省略重新更改目录和安装Django的步骤。

pwd (現在のディレクトリの確認)
python -m django --version

事后处理、事后整理、善后处理

让我们按照之前的步骤,从容器中退出,并使用以下命令删除容器。
这个步骤是一样的。

docker rm -f docker-python

直到这里

通过Docker容器内的工作量减少,可以发现与仅使用CLI时相比,这是一件好事。
通过在Dockerfile中编写创建容器时必要的准备工作,可以加快初始构建速度,并帮助创建相同的环境。

使用docker-compose.yml文件进行构建

本次的目录结构如下所示。
新增了docker-compose.yml文件。

.
├── Dockerfile
├── django-app
│   └── requirements.txt
└── docker-compose.yml

请按照以下的格式填写docker-compose.yml文件。

version: '3'

services:
  app:
    build: .
    volumes:
      - ./django-app:/django-app
    ports:
      - '8000:8000'
    tty: true

创建容器

首先进行容器创建。

docker compose up -d
docker ps (作成したコンテナの名前を確認)
docker exec -it docker-python-app-1 bash

以下是对原文的汉语表达:

一般情况下,容器的命名通常为{docker-compose.yml文件所在的目录}-{services名称}-{1}。在执行docker compose up -d命令时,-d是指以分离模式进行创建,并在后台进行创建操作。

在集装箱内的工作

在容器中检查当前目录是否安装了Django。

pwd (現在のディレクトリの確認)
python -m django --version

最后的结果

从容器中出来后,最后要删除容器。

docker compose down

到此为止

现在,我以前写的docker run命令已经没有了,输入命令的数量大大减少。而且,清理工作也可以一键完成。虽然现在只有一个容器,所以好处可能不太明显,但随着容器的增加,docker-compose.yml的便利性会增加。

结束

我们已经逐步了解了创建Docker容器的三种方法。
按顺序查看,您会了解到Dockerfile和docker-compose.yml在创建容器时提供了什么便利。
进一步增加创建的容器,例如用于数据库的容器,通过进行各种修改和尝试,您的理解将更加深入。

希望这篇文章能帮助大家更好地理解Docker、Dockerfile和docker-compose.yml等内容。

在這裡我想要結束這次的內容。
非常感謝您閱讀到這裡。
希望能有機會再次見面。

广告
将在 10 秒后关闭
bannerAds