Docker和Docker-Compose的基本使用方法
这是2016年”服务器端编程相关”降临节日历的第四篇文章。
对于没有使用过Docker的人,我将尽力解释如何快速建立一个容器。
虽然我的环境是基于Mac的(没有Windows机器),但除了安装时可能有些许不同,基本上没有太大差异。
Docker是什么
Docker提供了一种安全隔离运行应用程序的方式,将应用程序与其所有依赖项和库打包在一个容器中。由于您的应用程序始终可以在构建镜像中使用其期望的环境运行,因此测试和部署变得更加简单,因为您的构建将完全可移植并准备好按设计在任何环境中运行。而且,由于容器轻量且无需额外的虚拟机负载,您可以在单个内核上运行许多依赖于不同库和环境的应用程序,而每个应用程序不会互相干扰。这可以通过将应用程序的“规模单元”从虚拟机或物理机转移到容器实例来从硬件中获取更多性能。
简单来说,Docker是一种将应用程序与主机隔离并在容器内运行的技术,因此更安全。它具有可移植性,在构建方面很容易进行测试和部署。通过将应用程序的最小单元(即可调整规模的单位)从机器级别下降到容器实例级别,可以更有效地利用机器资源。
在中文中 paraphrase the following natively in Chinese, only need one option :
被写作为”などと書かれている”的表达方式。为了理解概念,我们可以将容器类比于C语言中的a.out或Java的jar,即将一个容器视为一个运行应用程序的单个进程,这样一开始就容易理解。
通过从”镜像”创建”容器”来体现其可移植性。同时,关于构建可移植的想法,可以类比于在JVM上运行的概念,就像”因为在JVM上可以运行,所以应该没问题吧☆”一样(初期可以这么考虑)。
关于规模单位的思维方式,将在设计思想部分进行解释。
设计理念
希望你将其理解为一种运营上的推荐思维方式。
容器应该是简约的。
如果要建立LAMP环境,需要在Linux上安装apache、mysql和php。从扩展性的角度考虑,以前可能会对数据库服务器和应用程序服务器(以及负载均衡器)进行更改。
如果使用Docker,建议从一开始就使用基于规模的单位,如apache+php容器、mysql容器,以便更轻松地进行更改和维护。
安装
环境是使用macOS Sierra 10.12.1版本和16GB的RAM。
对于Win/Mac/Linux通用的要求环境是:
– 4GB的RAM
– 64位操作系统
现在说到设置的话,可以从docker.com获取Docker for Mac或Docker for Windows。
也可以使用Docker Toolbox,但我认为主流是Docker for (win/mac)。
关于Linux来说,以CentOS为例,除了启动守护进程外,只需敲击sh命令就可以了,所以我认为没有问题。
sudo yum update
# docker.repoを追加しDockerインストールするscriptを叩く
curl -fsSL https://get.docker.com/ | sh
# daemon追加
sudo systemctl enable docker.service
# daemon起動
sudo systemctl start docker
Docker安装
执行
在使用docker run命令运行容器的时候,可以执行容器中的进程。
如果在docker run执行时没有指定持久进程,注意在处理完成后容器也会被自动退出。
这里给出一个简单的例子。
# image(コンテナ)の実行 centosの場合
docker run -it centos /bin/bash
上述的命令是从Docker的仓库中获取CentOS镜像,并启动为一个容器,然后连接到/bin/bash。Docker基本上会连接所有标准流(例如stdin / stdout),所以可以通过使用-it选项来启动像/bin/bash这样的shell(交互式进程)。
以下是 docker run 命令的选项。
--name # imageに名前をつける
-v /path/to/host:/path/to/container # hostのディレクトリをコンテナにマウントする
-p 8888:80 # hostの8888番ポートをコンテナの80番ポートにポートフォワードする.
只要你知道这3个东西,最基本的需求就可以勉强满足了。
各种指令 (gè
查看集装箱
docker ps
# docker ps -a でexit状態のコンテナも表示される.
请确认图像。
docker images
删除容器
# docker ps で削除したいコンテナのidを確認.
docker rm container_id
# 止まっているコンテナを全て削除したい場合には以下が便利.
# docker rm `docker ps -a -q`
删除图像
docker rmi image_id
# image全削除したい場合には以下.
# docker rmi `docker images`
Dockerfile- 德克尔文件
可以通过名为Dockerfile的文件生成Docker映像。
使用一个在CentOS上安装nginx的映像的Dockerfile示例进行说明。
# Dockerfileでは#でコメントアウト
# FROM *** で使用するベースイメージを指定.
FROM centos
# コマンドを実行する場合にはRUNを用いる.
# RUN で実行するコマンドは && や \ を用いてなるべく連結させる.
RUN yum update && yum install -y \
epel-release \
nginx
# COPY は指定したホストのディレクトリをコピーする.
COPY path/to/host /usr/share/nginx/html
# EXPOSE は開けるポートを指定する.
EXPOSE 80
# CMD はソフトウェアの実行に用いる.
# CMD ["command", "引数","引数"]
# のように記述する.
# ここでコマンドをforegroundで実行させる必要がある.
CMD ["nginx", "-g", "daemon off;"]
# apacheの場合は以下.
# CMD ["apache2","-DFOREGROUND"]
# CMD命令は最後に記述されたものだけが有効となるので注意.
我想这样你就理解了Docker的最基础用法。当然还有一些细节可能不够完善,请多包涵。
Docker-Compose – Docker组合
好了,那么我们该如何让容器彼此协作呢?这就需要使用一个叫做 docker-compose 的工具。
Docker Compose是一种工具,可以通过yml格式的文件进行容器构建和协作,正如预期的那样。
因此,共享开发环境只需传递yml文件进行构建,非常方便。
如果在服务器上使用,只需进行git pull,可以减少通信量。
最重要的是,它是基于文件的,因此环境的可见性很好,不会导致开发环境不一致,非常幸福。
安装
我认为在Win/Mac上应该有Docker for Win/Mac。
这里展示Linux上的安装方式。
有两种方法,一种是使用pip,另一种是从脚本安装。
# pipの場合
pip install docker-compose
# scriptの場合
curl -L https://github.com/docker/compose/releases/download/1.9.0/run.sh > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
(Docker 文档)[https://docs.docker.com/compose/install/]
执行
如前所述,docker-compose需要创建一个名为docker-compose.yml的yml文件,并进行构建和运行。现在我们来介绍一下yml文件的写法。
version: '2'
services:
app:
# depends_onで依存関係を示す.appでmysqlを使いたいのでdbコンテナを指定.
depends_on:
- db
# build はDockerfileからビルドすることを示す.
# pathは相対パスになるので、build/app/Dockerfileが読まれる.
build: "./build/app"
# ports でポートフォワーディングを指定.
ports:
- "8888:80"
# volumes でマウントの指定.こちらも相対パス.
volumes:
- "./volumes/app:/var/www/html"
# links で連携させるコンテナを示す.
# depends_onはビルド時に依存関係を考慮してビルドさせるために指定.
# links は appコンテナの/etc/hostsにdbのipを記述してくれる.
links:
- db
db:
# image はbuildをせず既存イメージを用いる場合に使う.
image: mysql
# environment は環境変数などのexportをしてくれる.
# mysqlのようにenvironmentで指定が必須の変数もあるので、公式イメージを利用する際には注意.
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: database
ports:
- "13306:3306"
# 永続化が必要なものに対してはvolumesなどでホスト側に残す
volumes
- "./data/mysql:/var/lib/mysql"
-
下面是用中文对原文进行改写的一个示例:
从之前创建的yml文件中运行容器。
在这个例子中,因为有要构建的容器,所以首先执行
docker-compose build
来构建。
如果没有要构建的容器或者构建完成,则可以使用
docker-compose run -d
在后台运行容器。
不同的指令
# docker-compose.ymlからビルドする
docker-compose build
# ymlに書かれてるコンテナを起動する
docker-compose run
# backgroundで起動する場合、
# -dオプションをつける
# コンテナの確認
docker-compose ls
# コンテナの終了
docker-compose kill
#コンテナの削除
docker-compose rm
我认为这样你就能理解docker-compose的基本用法了。
总结
使用Dockerfile构建Docker容器,使用docker-compose进行编排,非常方便。