为繁忙人士设计的Docker和Docker compose
首先
docker周りの説明はぐちゃぐちゃしていて分かりにくいので、最低限の概念とインストール、動作確認だけまとめました。
解释术语
用語が色々多いので先にまとめておきます。
Docker引擎
用于使用Docker的常驻程序。
图像像是一个容器的设计图。从图像中可以创建一个容器。
标签
图像的版本
コンテナ
アプリケーションの実行環境
Docker仓库
Docker网络
容器之间的通信方式
Nginx(エンジンエックス)
ウェブサーバー用ソフトウェア
守护进程(daemon)是在后台运行的进程。
Docker Machine是一种通过命令操作虚拟机的工具。
docker-ce 是 Docker 的社区版,是一个免费版本的 Docker。
容器化技术Docker的概念
在介绍具体命令和代码之前,首先总结一下Docker的概念。
Docker 是什么?
在传统的虚拟化中,使用虚拟化软件(称为超级监控程序)来启动虚拟机(称为客户操作系统),并在其中进行中间件的构建和程序的执行。
Docker通过docker引擎创建运行环境,其中包含称为容器的中间件,实现容器虚拟化。然后可以在容器内运行应用程序。
在容器虚拟化中,通过与他人共享容器,可以轻松地准备相同的执行环境。简言之,与传统方法不同,可以方便地复制相同的环境,这非常方便。
Docker中的数据管理
当处理容器内的动态数据时,如果容器关闭,数据将会丢失。为了解决这个问题,我们可以在主机上管理数据,并挂载到容器上。
Docker 网络
ウェブアプリケーションを作成する場合、ウェブサーバーとAPIサーバーとDBサーバーを立てるような例も少なくないと思います。当然これらのサーバーは通信しなければならないので、コンテナでこれらのサーバーを立てている場合はコンテナ間で通信する必要があります。その仕組みがDockerネットワークです。Docker networkではデフォルトで存在する3つのネットワークと独自ネットワークが存在します。
桥接网络是指能够通过指定IP地址与同一网络中的容器进行通信的网络。由于没有定义DNS,所以无法通过容器名称进行通信。它是在创建容器时默认连接的网络。
Host network
説明が難しいのですが、、Host networkに接続したコンテナでnginxを実行した場合、ホストマシンのIP80番ポートに接続すれば良いことになります。これに関しては手で動かして覚えた方が早いと思います
没有网络接口意味着没有网络连接。
Docker Compose是一种工具,用于预先定义和运行多个容器的Docker应用程序。
独自ネットワーク
独自のネットワークを作成し、コンテナ名で通信が可能になります。Docker Daemonの組み込みDNSのおかげで名前解決してくれているようです。
Docker Compose 原生的中文翻译是 “Docker 组合”。
これまで見てきたように、コンテナの起動は多くの設定が必要であり、1つ1つ実行していたら冗長です。それらを自動化するのがDocker Composeです。
ウェブアプリケーションの実行環境をDockerで構築する場合、複数のサーバーの定義をdocker-compose.ymlに記述しておくことで、複数コンテナをまとめて起動できます。
Docker 机器
可以使用命令来管理搭载Docker Engine的虚拟机的工具。
安装
dockerとdocker-composeのインストールを行っていきます。環境はUbuntu20.04LTSで行うので、macユーザーの方は適宜読み替えてください。また、GUIではなくCUIのインストールです。既にインストール済みの方は次の章まで飛ばしてください。
まずはdockerのインストールから行っていきます。単純にパッケージマネージャでインストールすることも可能ですが、最新版ではないのでこちらのサイト[4]を参考にやっていきたいと思います。
更新软件包列表
sudo apt update
sudo apt upgrade
安装用于通过HTTPS使用包的包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
在系统中添加Docker仓库的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
将Docker存储库添加到APT源。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
更新套餐数据
sudo apt update
确认您正在从Docker仓库安装软件。
apt-cache policy docker-ce
安装。
sudo apt install docker-ce
确认守护程序启动并且进程能够在启动时启动。
sudo systemctl status docker
在某些情况下,为了在不使用sudo的情况下执行docker命令进行配置。系统会要求输入密码,因此请进行输入。
sudo usermod -aG docker ${USER}
su - ${USER}
id -nG
确认Docker的版本。截至2021年11月15日的最新版本是20.20.10 [5],我确认已安装了最新版本。
docker -v
次にdocker-composeのインストール。このサイト[7]を参考に進めていく。まずはこちらのサイト[8]で最新バージョンを確認する。そのバージョンを指定してcurlコマンドでインストール。ローカルにインストールして実行権限の付与。MACの人とかはインストールするものが違うので公式ページで適切なものをインストールしてください。
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
确认版本并检查最新版本如果可以的话就可以了。截至2021年11月15日,最新版本是2.1.1。docker-compose的功能似乎作为docker的CLI插件进行了整合,从2.0版本开始,指的是那个插件。在命令上,似乎已经改为了docker compose。可能也包括对M1MAC的支持。
docker compose -v
docker和docker compose的安装已经完成。
确认动作
首先,我们将在Docker单独执行Hello, world。我们将参考这个网站[9]。让我们尝试运行hello-world容器。
docker run hello-world
运行命令是使用镜像来执行容器的命令。由于没有本地存在的镜像,它会自动从Docker Hub获取镜像。如果没有指定标签来执行命令,则会自动选择latest标签。
下一步我们将对图像进行确认。
docker images
你应该能够看到”Hello World”的图像。
我們將確認是否有正在運行的容器。
docker ps -a
a将显示包括停止的容器在内的所有内容。由于hello-world容器在输出消息后会停止,所以它已经不再运行了。
我们在这里结束了Docker的hello,world。接下来,我们将进行Docker Compose的启动确认。我们将参考[10]网站的内容进行操作。
创建并切换到工作目录。
mkdir hello-world && cd $_
根据[10]的作者KENIOS先生创建的docker-compose.yml文件进行安装和执行。
curl -O https://keinos.github.io/hello-docker-compose/docker-compose.yml
docker compose up
只要没有错误并成功退出即可。内容只是使用了之前的 hello-world 图像,但由于启动确认是目的,所以这已经足够了。
以上是Docker和Docker Compose的操作确认的结束。
最后
你应该已经理解了有关docker的概念,已经成功安装和确认了docker和docker-compose的运行。现在只需搜索你想要的环境,并在查找命令的同时进行构建。请继续努力。接下来,我将尝试构建laravel的docker环境。
文献参考
[1]:【图解】理解 Docker 的整体概览-前篇-
[2]:【图解】理解 Docker 的整体概览-中篇-
[3]:【图解】理解 Docker 的整体概览-后篇-
[4]:在 Ubuntu 20.04 上安装和使用 Docker 的方法
[5]:Docker 版本信息
[6]:Docker Compose 发布说明
[7]:Compose V2
[8]:docker-compose 的 GitHub 发布版本
[9]:Docker 入门 ~Hello World~
[10]:最简单的 docker-compose.yml 的 hello-world