Ubuntu ServerでDocker Engine + Compose

简介

GUIの無いUbuntu Server上でDocker使うのにメモ.

インストール・設定

インストール

Install Docker EngineのUbuntuを参考.

    1. 古いバージョンをアンイストール

 

    1. sudo apt remove docker docker-engine docker.io containerd runc

必須ソフトウェアインストール
sudo apt update && sudo apt install -y ca-certificates curl gnupg lsb-release

GPGキー取得
sudo mkdir -m 0755 -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /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

Docker Engineインストール
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

動作確認
sudo docker run hello-world

docker composeはpluginなのでコマンドはdocker-composeではなくdocker composeとなる.

設定

设定以便普通用户可以使用。以下是针对当前用户的操作。如果想要针对其他用户进行操作,请更改$USER部分。

sudo groupadd docker && sudo usermod -aG docker $USER

運用

構築

Dockerfileの作成・イメージの作成・コンテナの作成と利用まで.
ディレクトリは以下の場所とし,dockerコマンドは以下の場所で実行するものとする.

    ~/Docker/

また参考にしたのは以下の記事.

    • 効率的に安全な Dockerfile を作るには

 

    docker container / image コマンド新旧比較
    1. ベースイメージ,作成するイメージ名の決定

ベースイメージはFROMで指定するもので,軽量なLinuxが選ばれやすい?

ここでは例としてubuntu:22.04としている.

作成するイメージはDockerHubのアカウント名/イメージの名前:タグ名となる.タグ名は省略可で,その場合latestが付与されるっぽい.

ここでは例としてnek/mytestとする.

最小のDockerfile作成

~/Docker/Dockerfile
FROM ubuntu:22.04

CMD [“/bin/bash”]

初期イメージ作成
docker image build -t nek/mytest:latest .

作業用コンテナ作成&作業開始

端末Aにて,以下のコマンドで作業コンテナに入り,設定等行う.
docker container run -it –name mytest nek/mytest:latest bash

端末Bにて,Dockerfileを編集する.端末Aで行った作業を書いていく.
端末Aの作業が一段落したら以下のコマンドでイメージを更新する.
docker container commit mytest nek/mytest:latest

端末Aの作業してておかしなったら,端末Aにてexitしてdocker container runし直すと,最後のcommitから作業できる.

正式なイメージ作成

ちゃんと作成したDockerfileからイメージが出来るか確認するため,作業用のコンテナ・イメージを削除してビルド

docker container ls -alで調べたCONTAINER IDから削除
docker container rm

全コンテナ削除(無関係のものも削除するため使用に気をつける)
docker container rm `docker container ls -a -q`

IMAGE IDを調べつつ削除
docker image rmi

再ビルド
docker image build -t nek/mytest:latest .

コンテナ・イメージを削除するのによく使うコマンド類.

docker {container|image} ls
コンテナ・イメージの表示.オプション

-a

アクティブでないコンテナ(イメージ)も含めてls

imageの場合あまり関係ない?

-q

コンテナID・イメージIDのみ出力してくれるっぽい

docker {container rm | image rmi
コンテナ・イメージの削除.
docker container rm `docker container -a -q` # 全コンテナ一括削除
docker image rmi `docker image -a -q` # 全イメージ一括削除(-aはいらんけど,惰性で)
docker image prune # 再ビルドなどでタグが外れて<none>になったものを削除
docker system prune -a --filter "until=24h" # フィルタによる削除(例は24時間使用されていないイメージ削除)

通常利用

運用はdocker composeでやると楽.
とりあえずDockerfileと同じディレクトリにdocker-compose.ymlを用意.なんとなく良く使うものを以下に記載.

version: '3.9'

services:
  mytest:
    build: .
    image: nek/mytest:latest
    container_name: mytest
    hostname: <ホスト名つけるなら>
    ports:
      # host:container
      - **:** # ポート開放するなら**にポート番号を
    restart: always # これやっとくとホストPCを再起動しても自動的にコンテナ起動してくれる
    volumes: # このやり方はmount(bind?).volumeとtmpfsもあって種類は合わせて3つ
      - /usr/share/zoneinfo/Asia/Tokyo:/etc/localtime:ro

在包含docker-compose.yml文件的位置,通过以下命令启动或停止容器。

使用docker compose启动容器。选项:

-d

启动守护进程。

–build

根据docker-compose.yml中的build:进行构建。

docker compose down
docker compose down命令会停止并删除容器,同时也会删除通过docker compose up启动的容器。选项
-v
docker-compose.yml文件中的volumes项会删除命名卷容器所附加的匿名卷。

docker compose up -d
docker compose

使用.env文件

如果要重复使用docker-compose.yml文件,需要将各种参数变量化并在.env文件中写入变量内容以使用。例如,更改上述示例将变成以下方式。

version: '3.9'

services:
  mytest:
    build: .
    image: nek/mytest:latest
    container_name: ${CONTAINER_NAME}
    hostname: <ホスト名つけるなら>
    ports:
      # host:container
      - **:** # ポート開放するなら**にポート番号を
    restart: always # これやっとくとホストPCを再起動しても自動的にコンテナ起動してくれる
    volumes: # このやり方はmount(bind?).volumeとtmpfsもあって種類は合わせて3つ
      - /usr/share/zoneinfo/Asia/Tokyo:/etc/localtime:ro

CONTAINER_NAME=mytest

其他

Dockerfile 的最小构建要素。

或许还可以有一些其他选择吗?

我知道你会做得很好。

FROM ubuntu:22.04

RUN set -x && \
    apt update && apt upgrade -y

CMD ["/bin/bash"]

时区要正确设置

如果想将时间从通常的UTC改为JST,有两种方法。一种是在Dockerfile中安装和设置tzdate,另一种是挂载与时区相关的文件。

FROM ubuntu:22.04

RUN set -x && \
    apt update && apt upgrade -y && \
    DEBIAN_FRONTEND=noninteractive apt install tzdate # もしかしたらDEBIAN_FRONTEND=...いらないかな

ENV TZ=Asia/Tokyo

CMD ["/bin/bash"]

tzdateをインストールせず,timezone関係のファイルをマウントする場合,docker composeを使ってマウントする.その場合のdocker-compose.ymlの一部は以下の通り.より良い方法があれば情報求む.

version: '3.9'

services:
  サービス名:
    build: .
    ...
    volumes:
      - /usr/share/zoneinfo/Asia/Tokyo:/etc/localtime:ro

如果已经在讨论时区了,顺便也提一下语言。

FROM ubuntu:22.04

RUN set -x && \
    apt update && apt upgrade -y && \
    DEBIAN_FRONTEND=noninteractive apt install tzdate locales && \
    locale-gen ja_JP.UTF-8

ENV TZ=Asia/Tokyo LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja

CMD ["/bin/bash"]

公式DockerHubのイメージを使用する場合

最初の使用

直接イメージを持ってくる場合

docker pull <イメージ名:タグ名>
docker compose up -d

イメージのアップデート

图像不会自动更新。需要明确输入以下命令。可以在不停止容器的情况下运行。

docker pull <イメージ名:タグ名>

请查阅

广告
将在 10 秒后关闭
bannerAds