快速掌握Docker并开始使用的Docker入门指南
首先
这篇文章是为了帮助人们快速掌握Docker的使用而撰写的。
详细来说,
-
- Dockerについてざっくりと理解して
-
- 簡単な環境を構築し
- 作った環境をDocker Hubで共有
我的目标是能够做到。
因此,如果想要更深入和充分理解的朋友们,可以参考以下文章。
-
- 【図解】Dockerの全体像を理解する -前編-
-
- いまさらDockerに入門したので分かりやすくまとめます
- Dockerを支える技術
Docker是什么
用汉语我的冰箱里有很多吃的。
-
- Linuxカーネルの機能であるコンテナ型仮想化を使用したアプリケーション実行環境を構築するツール
-
- OS内に「コンテナ」とよばれる隔離された仮想領域を確保
- アプリケーションとOSなどの実行環境をまとめてコンテナに閉じ込めて管理
※ 在容器中有Linux容器、Windows容器,但本文针对的是Linux容器。
Docker镜像、容器和注册表相关事项。
以下是有关Docker镜像、容器和注册表的概述。
クラウドサービスとしての Docker Hub や個人レジストリなどがある。
Docker镜像、容器和注册表之间的关系如下所示。
使用Docker的好处
我认为有许多好处,但我个人认为有以下三个:
1. 有许多好处,但我个人认为以下三项是重要的。
2. 我认为有很多好处,但是我个人觉得以下三点很重要。
3. 尽管有很多优点,我个人认为以下三点比较重要。
可以方便地尝试中间件产品
如果你想尝试最新的Elasticsearch,只需要两个Docker命令就可以构建它。(稍后会提到)
可以用代码来管理环境构建。
在Docker中,您可以通过编写Dockerfile和docker-compose.yml等文本文件来记录环境设置步骤,并通过引用这些文件来执行Docker命令,从而构建符合设定步骤的环境。
换句话说,通过将环境设置过程编码化(即基础设施即代码),环境设置会变得更加轻松一些。
環境差異不容易發生。
如果已经安装了Docker的服务器,将一次创建的环境打包成Docker镜像并注册到Docker注册表。通过从Docker注册表获取Docker镜像并将其容器化,可以轻松地构建相同的环境。
此外,如果想对已经构建好的环境进行更改(例如升级中间件版本等),不要直接修改环境,而是重新创建一个 Docker 镜像。然后将该 Docker 镜像转化为 Docker 容器,进行运行验证,如果没有问题,再分发到各个环境。
通过采用“不可变基础架构(Immutable Infrastructure)”的方法,在不直接更改环境的情况下,重新创建Docker镜像的步骤可以防止疏忽修复环境的问题。
以中文原生方式演示
现在让我们开始真正进行环境搭建。
事前准备是指事情发生之前所进行的准备工作。
安装Docker
根据官方网站的参考,进行Docker和Docker Compose的安装。
此外,本文假设环境如下。
-
- ホストOS:Ubuntu18.04.1
-
- Docker:18.09.1
- Docker Compose:1.23.2
创建一个Docker Hub账户
请使用 Docker Hub 作为 Docker Registry。
请在此页面上创建一个帐户。
最简单的方法
首先,您可以使用最简单的方法来构建Elasticsearch。
只需两个命令:docker image pull和docker container run,就可以进行安装。
# Elastic社公式Dockerイメージを取得
$ docker image pull docker.elastic.co/elasticsearch/elasticsearch:7.0.1
# イメージを確認
$ docker image ls
# コンテナ化
$ docker container run -d --name sample-es01 -p 19200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.0.1
# コンテナ確認
$ docker container ls
# Elasticsearch確認
$ curl localhost:19200
docker image pull イメージ名
docker container run [オプション] 元となるイメージ名
オプション
-d コンテナをバックグラウンドで起動させる
–name コンテナ名を指定
-p ポートフォワーディング
-e 環境変数を設定
使用Dockerfile的方法
如果想要为已获取的 Docker 镜像添加安装或初始设置等操作,您可以在 Dockerfile 中记录这些操作内容,从而实现自动化操作。
这次我将尝试在CentOS7上安装Elasticsearch。
首先,我们要创建以下的Dockerfile。
#ベースはCentOS7
FROM centos:centos7
#必要なソフトウェアをインストール
RUN yum install -y java wget
#ユーザ「elasticsearch」を追加
RUN groupadd -g 1000 elasticsearch && \
adduser -u 1000 -g 1000 -d /usr/share/elasticsearch elasticsearch
USER elasticsearch
WORKDIR /usr/share/elasticsearch
#Elasticsearch7のダウンロード
RUN wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz \
&& tar zxvf elasticsearch-7.0.1-linux-x86_64.tar.gz
#Elasticsearchの初期設定
RUN echo -e $"\n\
network.host: 0.0.0.0\n\
discovery.type: single-node\n\
" >> /usr/share/elasticsearch/elasticsearch-7.0.1/config/elasticsearch.yml
#コンテナ起動時にElasticsearchをフォアグラウンドで起動
CMD ["/usr/share/elasticsearch/elasticsearch-7.0.1/bin/elasticsearch"]
EXPOSE 9200
完成 Dockerfile 后,使用 docker image build 命令构建 Docker 镜像。
# docker iamge build -t イメージ名 Dockerfileの格納ディレクトリ
$ docker image build -t elasticsearch-7.0.1 .
构建完Docker镜像后,我们可以使用与之前相同的方法,使用docker container run命令将其转化为Docker容器。
$ docker container run -d --name sample-es02 -p 29200:9200 sample-es02
通过这个方法,已经成功安装了Elasticsearch。
如果想要升级使用的Elasticsearch版本或者修改Elasticsearch的配置,只需修改Dockerfile并重新创建容器即可。
3)共享Docker镜像
将创建的Docker镜像通过注册到Docker仓库,实现与其他环境的共享。
给Docker镜像打标签
首先,在Docker Hub上注册自己的存储库,需要对要注册的Docker镜像进行操作。
Docker Hub账户/镜像名称[:标签名]
需要以特定的形式進行標籤化。
# 実演2)で作成したイメージ「sample-es02」に対してタグ付け
$ docker image tag sample-es02 shinyashikis/my-elasticsearch7:0.0.1
# イメージ確認
$ docker image ls
注册Docker镜像
标记完成后,登录Docker Hub,使用docker image push命令将Docker镜像注册。
# Docker Hubにログイン
$ docker login -u shinyashikis -p xxxxxxxxxxxxxx
# タグ付けしたイメージをDokcer Hubに登録
$ docker image push shinyashikis/my-elasticsearch7:0.0.1
通过使用 docker image pull 命令或在 Dockerfile 的 FROM 语句中指定,您可以获取注册的图像。
$ docker image pull shinyashikis/my-elasticsearch7:0.0.1
FROM shinyashikis/my-elasticsearch7:0.0.1
使用Docker Compose的方法
我们之前一直以创建一个容器为例,那么如果涉及到多个容器呢?
在多个容器的情况下,我们需要考虑容器之间的通信和容器的启动顺序等。
在这种情况下,使用多容器管理工具Docker Compose将更加容易管理。
这次我将尝试构建一个简单的应用程序,用于通过浏览器访问spring-boot容器,并显示Elasticsearch的信息。
那么,首先我们将按照以下的目录结构来配置所需的资料。
$ tree
.
├── docker-compose.yml #コンテナの構成を管理するファイル
└── my-spring-boot
├── Dockerfile #spring-boot用Dockerfile
└── sample-es-0.0.1-SNAPSHOT.jar #spring-bootアプリ
#ベースはJDK8イメージ
FROM openjdk:8-jdk-alpine
#アプリをjava-app.jarとしてデプロイ
COPY ./sample-es-0.0.1-SNAPSHOT.jar java-app.jar
#アプリ実行
CMD ["java","-jar","/java-app.jar"]
version: "3"
services:
my-spring-boot:
build: my-spring-boot/ #spring-boot用Dockerfileの格納先を指定
image: sample-sb04 #イメージ名
container_name: sample-sb04 #コンテナ名
ports:
- 48080:8080
links:
- my-elasticsearch #Elasticserchコンテナへ通信する際のエイリアス
my-elasticsearch:
image: shinyashikis/my-elasticsearch7:0.0.1 #実演3)で作成したイメージを指定
container_name: sample-es04 #コンテナ名
ports:
- 49200:9200
配置了所需的资源,例如docker-compose.yml文件后,只需运行docker-compose up命令就可以进行构建和启动容器。
$ ls
docker-compose.yml my-spring-boot
#ビルド実行
$ docker-compose up -d
#コンテナ確認
$ docker-compose ps
#ブラウザで確認
http://localhost:48080/myEsInfo
如果浏览器中显示类似于Elasticsearch的信息,那就可以了.
Elasticsearchの情報
nodeName: 1497813f0e6f
clusterName: Cluster [elasticsearch]
最后
虽然时间紧迫,但我们已经成功构建了一个简单的环境,并且可以在其他服务器上进行共享。
实际上,在某些情况下并不容易像这个例子一样简单,需要考虑数据持久化和在容器启动时执行复杂的处理,例如执行 shell 脚本。
如果是这种情况,我建议您参考前面提到的网站、官方网站或书籍等。
此外,使用在示範中的材料將被儲存於以下位置。
-
- 実演 2)Dockerfileを使用したやりかた
https://github.com/shinyashikis/docker-sample02
実演 4)Docker Composeを使用したやりかた
https://github.com/shinyashikis/docker-sample04
参考书籍
-
- Docker実践入門――Linuxコンテナ技術の基礎から応用まで
- Docker/Kubernetes 実践コンテナ開発入門