如何在 CentOS 7上安装和使用 Docker Compose

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

 

介绍

Docker是一个很好的工具,但要真正充分利用它的潜力,最好是应用程序的每个组件都在它自己的容器中运行。对于包含大量组件的复杂应用程序,编排所有容器以便一起启动和关闭(更不用说彼此交谈)可能很快变得笨拙。

Docker社区提出了一种名为Fig的流行解决方案,该解决方案允许您使用单个YAML文件编排所有Docker容器和配置。这变得非常流行,以至于Docker团队最终决定根据Fig的源代码制作他们自己的版本。他们称之为Docker Compose。简而言之,它使处理Docker容器的编排流程(如启动,关闭和设置内部容器链接和卷)非常容易。

在本文的最后,您将安装Docker和Docker Compose,并对Docker Compose的工作原理有一个基本的了解。

 

Docker和Docker撰写概念

使用Docker Compose需要将一大堆不同的Docker概念组合在一起,因此在开始之前,让我们花一些时间来回顾一下涉及的各种概念。如果您已经熟悉卷,链接和端口转发等Docker概念,那么您可能需要继续并跳到下一节。

 

Docker图像

每个Docker容器都是Docker镜像的本地实例。您可以将Docker镜像视为完整的Linux安装。通常,最小安装仅包含运行映像所需的最少数量的软件包。这些映像使用主机系统的内核,但由于它们在Docker容器内运行,只能看到自己的文件系统,所以完全可以在Ubuntu主机上运行CentOS等发行版(反之亦然)。

大多数Docker镜像都是通过由Docker团队维护的Docker Hub进行分发的。大多数流行的开源项目都有相应的镜像上传到Docker Registry,您可以使用它来部署软件。在可能的情况下,最好是抓住“官方”图片,因为Docker团队保证他们遵循Docker最佳实践。

 

Docker镜像之间的通信

默认情况下,Docker容器与主机隔离,这意味着默认情况下,主机不能访问Docker容器内的文件系统,也不能通过网络与其通信。不用说,这使默认情况下很难配置和处理在Docker容器内运行的映像。

Docker有三种主要的解决方法。第一个也是最常见的是让Docker指定将在Docker容器中设置的环境变量。在Docker容器中运行的代码将在启动时检查这些环境变量的值,并使用它们来正确配置它自己。

另一个常用的方法是Docker数据量。Docker卷有两种风格 - 内部和共享。

指定内部卷意味着对于您为特定Docker容器指定的文件夹,当容器被移除时,数据将被保留。例如,如果你想确保你的日志文件挂在你的周围,你可以指定一个内部/var/log卷。

共享卷将Docker容器中的文件夹映射到主机上的文件夹中。这使您可以轻松地在Docker容器和主机之间共享文件,我们将在Docker数据卷文章中探讨这些文件。

与Docker容器进行通信的第三种方式是通过网络进行通信。Docker允许通过links端口转发实现不同Docker容器之间的通信,允许您将端口从Docker容器内部转发到主机服务器上的端口。例如,您可以创建一个链接来允许您的WordPress和MariaDB Docker容器相互交谈,并通过端口转发将WordPress发布到外部世界,以便用户可以连接到它。

 

先决条件

要按照这篇文章,您将需要以下内容:

  • CentOS 7 Droplet
  • 具有sudo权限的非root用户(有关详细信息,请参阅CentOS 7上的初始服务器设置)

第1步 - 安装Docker

首先,如果你还没有安装Docker。安装Docker最快的方法是下载并安装他们的安装脚本(系统会提示您输入sudo密码)。

  • wget -qO- https://get.docker.com/ | sh

上述命令下载并执行由Docker团队编写的小型安装脚本。如果您不信任第三方脚本或想了解脚本的更多细节,请查看DigitalOcean Docker教程或Docker自己的安装文档中的说明。

如果您的用户配置不正确,使用Docker会很痛苦,因此请使用docker以下命令将您的用户添加到组中。

sudo usermod -aG docker $(whoami)

注销并从服务器登录以激活您的新组。

设置Docker在启动时自动启动:

sudo systemctl enable docker.service

最后,启动Docker服务:

sudo systemctl start docker.service

注意:要了解有关如何使用Docker的更多信息,请阅读如何安装和使用Docker:入门指南中的如何使用Docker部分。

 

第2步 - 安装Docker撰写

现在您已经安装了Docker,我们继续并安装Docker Compose。首先,安装python-pip为先决条件:

  • sudo yum install epel-release
  • sudo yum install -y python-pip

然后你可以安装Docker Compose:

  • sudo pip install docker-compose

您还需要在CentOS 7上升级您的Python软件包docker-compose才能成功运行:

  • sudo yum upgrade python*

第3步 - 使用Docker Compose运行容器

公共Docker注册表Docker Hub包含一个简单的Hello World图像。现在我们安装了Docker Compose,让我们用这个非常简单的例子来测试它。

首先,为我们的YAML文件创建一个目录:

  • mkdir hello-world

然后转到目录:

  • cd hello-world

现在使用您最喜欢的文本编辑器(我们将使用nano)创建YAML文件:

  • nano docker-compose.yml

将以下内容放入文件中,保存文件并退出文本编辑器:

  1. my-test:
  2. image: hello-world

第一行将用作容器名称的一部分。第二行指定用于创建容器的图像。该图片将从官方Docker Hub存储库下载。

仍然在~/hello-world目录中时,执行以下命令来创建容器:

  • docker-compose up

输出应该从以下开始:

Output of docker-compose up

Creating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 |

然后输出解释了Docker正在做什么:

  1. Docker客户端联系了Docker守护进程。
  2. Docker守护进程从Docker Hub中提取“hello-world”图像。
  3. Docker守护进程从该映像创建了一个新的容器,该容器运行可执行文件,生成您当前正在阅读的输出。
  4. Docker守护进程将输出流式传输到Docker客户端,并将其发送到您的终端。

如果进程没有自行退出,请按CTRL-C

这个简单的测试并未显示Docker Compose的主要优点之一 - 能够同时上下拖放一组Docker容器。该如何与码头工人撰写Ubuntu上安装WordPress和phpMyAdmin的14.04文章展示了如何使用泊坞窗撰写运行三个容器作为一个应用程序组。它是为Ubuntu 14.04编写的,但是这些步骤可以很容易地适用于CentOS 7。

 

第4步 - 学习Docker组合命令

我们来看看该docker-compose工具支持的命令。

docker-compose命令在每个目录的基础上工作。您可以在一台机器上运行多组Docker容器 - 只需为每个容器创建一个目录,为其目录中的每个容器创建一个docker-compose.yml文件。

到目前为止,我们一直docker-compose up在自己运行并用CTRL-C它来关闭它。这允许调试消息显示在终端窗口中。这并不理想,但在生产环境中运行时,您会希望docker-compose更像一项服务。一个简单的方法就是-d在你up的会话中添加选项:

  • docker-compose up -d

docker-compose 现在将分叉到后台。

要显示您的Docker容器组(已停止并且当前正在运行),请使用以下命令:

  • docker-compose ps

例如,以下显示helloworld_my-test_1容器已停止:

Output of `docker-compose ps`

Name Command State Ports ----------------------------------------------- helloworld_my-test_1 /hello Exit 0

正在运行的容器将显示Up状态:

Output of `docker-compose ps`

Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp

要停止应用程序组的所有正在运行的Docker容器,请在与docker-compose.yml用于启动Docker组的文件相同的目录中发出以下命令:

  • docker-compose stop

注意: docker-compose kill如果您需要更强有力地关闭它,也可用。

在某些情况下,Docker容器会将其旧信息存储在内部卷中。如果您想从头开始,可以使用该rm命令来完全删除组成您的容器组的所有容器:

  • docker-compose rm

如果您尝试从包含Docker容器和.yml文件的目录以外的目录执行这些命令中的任何一个,它将会发出抱怨并且不会显示您的容器:

Output from wrong directory

Can't find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml, fig.yml, fig.yaml

 

第5步 - 访问Docker容器文件系统(可选)

如果您需要在容器内的命令提示符下工作,则可以使用该 docker exec命令。

在世界,你好!示例在运行后退出,因此我们需要启动一个将继续运行的容器,以便我们可以使用docker exec该容器访问容器的文件系统。我们来看看Docker Hub 的Nginx镜像。

为它创建一个新目录并更改为它:

  • mkdir ~/nginx && cd $_

docker-compose.yml在我们的新目录中创建一个文件:

  • nano docker-compose.yml

并粘贴在以下内容中:

  1. nginx:
  2. image: nginx

保存该文件并退出。我们只需要使用以下命令作为后台进程启动Nginx容器:

  • docker-compose up -d

Nginx的图像将被下载,然后容器将在后台启动。

现在我们需要CONTAINER ID容器。所有正在运行的容器的列表:

  • docker ps

您将看到类似于以下内容的内容:

Output of `docker ps`

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e90e12f70418 nginx "nginx -g 'daemon off" 6 minutes ago Up 5 minutes 80/tcp, 443/tcp nginx_nginx_1

注意:只有正在运行的容器与该docker ps命令一起列出。

如果我们想对这个容器中的文件系统进行更改,我们将使用它的ID(在本例中e90e12f70418)并用docker exec它在容器中启动一个shell:

  • docker exec -it e90e12f70418 /bin/bash

-t选项打开一个终端,该-i选项使其交互。这些/bin/bash选项为正在运行的容器打开一个bash shell。一定要使用您的容器的ID。

您会看到类似于以下内容的容器的bash提示符:

root@e90e12f70418:/#

从这里,你可以从命令提示符下工作。但请记住,除非您位于保存为数据卷一部分的目录中,否则只要容器重新启动,您的更改就会消失。另一个需要注意的是,大多数Docker镜像都是使用非常少量的Linux安装创建的,因此您习惯使用的某些命令行工具和工具可能不存在。

 

结论

太棒了,这样就涵盖了Docker Compose的基本概念以及如何让它安装并运行。退房的部署Wordpress和PHPMyAdmin的与码头工人撰写在Ubuntu 14.04教程如何部署与码头工人撰写的应用程序更复杂的例子。它是为Ubuntu 14.04编写的,但是这些步骤可以很容易地适用于CentOS 7。

有关该docker-compose.yml文件的完整配置选项列表,请参阅撰写文件参考。

 

转自:https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-centos-7#top

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSSH2安装过程可实现WEB可视化管理SSH工具

目录 Chrome web Secure Shell Extension gotty GateOne noVNCvncserver XtermjsSSH2nodejs nodejstty.js CheungSSH TriAquae https://github.com/Scirh/Python/tree/master/django https://www.smarthomebeginner.com/install-shellinabox-on-ubuntu/#64-bit https://gist.gi…

原码反码补码位运算,

进制转换: 十进制转二进制: 求余法:用2对数据求余,然后再对商继续求余,直到商为0结束,过程中产生的余数就是该数据的二进制(逆序)。 求权法:数据 - 2^(n-1) 如果可以减 第n位就是1,否…

一个人幸运的前提,是他有能力改变自己

很多时候,我们羡慕那些幸运的人,却看不到他们为此做出的努力和改变。 其实,一个人的幸运并不是偶然的,美国成功哲学家金洛恩说过这么一句话:“成功不是追求得来的,而是被改变后的自己主动吸引来的。” …

剑指Offer-正则表达式匹配(Python)

1 题干内容 请实现一个函数用来匹配包括.和*的正则表达式。模式中的字符.表示任意一个字符,而*表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。 例如,字符串aaa与模式a.a…

Docker 制作镜像的方式

其它制作镜像的方式 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 除了标准的使用 Dockerfile 生成镜像的方法外,由于各种特殊需求和历史原因,还提供了一些其它…

【算法】快排

快速排序 其利用的思想就是分治思想,最开始先从数组中随机选择一个元素p(为什么随机下面解释),然后以这个元素对数组中的元素进行分类,数组左侧都是小于p的元素, 右侧都是大于等于p的元素。这样就让数组分成…

【C基础】堆内存创建/释放和内存清理函数/内存泄漏

本期涉及到了较多的指针,没有彻底领悟的同学请翻阅之前的博文~ 一闪一闪亮晶晶,满天都是小星星*** 什么是堆内存: 是进程的一个内存段(text、data、bss、heap、stack)之一,由程序员手动管理, 特点就是足够大&#x…

19_05_01校内训练[polygon]

题意 把一个边长为1的正n边形放到一个正m边形中,要求m边形完全覆盖n边形,可以有交点,并且中心重合。求正m边形的最小边长,至少精确到6位。要求logn计算。 思考 先考虑m|n的情况。 我们知道,正m边形的边长与可行区域&am…

六度人脉 全球最高效的人脉法则(图)

六度人脉这一概念,在20世纪60年代由美国心理学家Stanley Milgram提出并验证。 所谓六度人脉,即地球上所有的人都可以通过六层以内的熟人关系链和其他人联系起来。 通俗地说:“最多通过六个人你就可以认识地球上任何一个陌生人。” SNS(社会…

[转]numpy中的np.max 与 np.maximum区别

转自:https://blog.csdn.net/lanchunhui/article/details/52700895 转载于:https://www.cnblogs.com/xianhan/p/10609319.html

JVM 的 Finalization Delay 引起的 OOM(java.lang.OutOfMemoryError:null at sun.misc.Unsafe.allocateMemory.)

今天在压力测试环境某一个服务出现crash了,经过一番检查,终于发现是由于JVM的Finalization Delay引起的,这个问题比较特殊,这里记录一下。 这个服务是用Java写的,主要完成的功能是根据特定的指令文件生成mp4文件&#…

win10 php7+apache2.4的配置以及遇到的问题及解决

首先进入PHP官网下载php7的版本,我下的是PHP7.1.28,在PHP的下载页面注意划红线和绿线的地方(我画的) 1.画了红线的意思是请使用由apache lounge提供的编译文件,也就是点进蓝色Apache lounge这里下载. 2.画了绿色的线的意思是用Apache的话你必须使用Thread Safe(线程安全)的PHP…

缓存区的输入输出,字符串常用操作,实现strlen/strcpy/strcat/strcmp函数)

输出缓冲区: 程序输入的数据并不能立即显示在屏幕上,而是先存储在输出缓冲区中,满足一些条件后才显示出来。 1、遇到\n后 2、遇到输入语句 3、当输出缓冲区满4K 4、当程序结束 5、手动刷新 fflush(stdout) 缓冲区机制可以提高数据的读写速度…

理性分散投资 收益袋袋平安

理财锦囊 想要投资理财,不光可以选择股票和债券这类入门产品, 实际上,还可选择其他低风险及高回报的投资产品,例如外汇、期货和商品。 针对此,几位分析师预测了2014年各国经济走势的重点,协助散户们分配…

AI一周热闻:华为豪掷3.3亿剑桥买地,自建光芯片工厂;比特大陆IPO失败,组织架构调整...

导读 华为豪掷3.3亿剑桥买地,自建光芯片工厂苹果春季发布会无硬件发布,转型之心迫切比特大陆IPO失败,组织架构调整,王海超任CEO特斯拉起诉小鹏汽车员工窃取商业机密英伟达发布GauGAN,线条色块秒变逼真图像用机器学习防…

Docker 环境:Nexus3.x 的私有仓库

Nexus3.x 的私有仓库 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的&#xff…

虚拟环境vitualenv的使用

Python3开发之虚拟环境virtualenv与virtualenvwrapper 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题; 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。 此时&am…

find_first_of和find函数的区别

小记: find_first_of函数最容易出错的地方是和find函数搞混。它最大的区别就是如果在一个字符串str1中查找另一个字符串str2,如果str1中含有str2中的任何字符,则就会查找成功,而find则不同;

银行各类理财收益渐涨 各类宝钱景尚不明朗

这个春天,投资似乎进入了一个好事多磨的阶段。央行一反先前支持的态度,开始对互联网理财念起了“紧箍咒”。一时间,各种“宝”的命运变得扑朔迷离起来。尽管各种“宝”声明:不受央行政策影响。而投资者内心的担忧,恐怕…

Firefox 66回归!修复多项臭虫相关问题

上周最新版Firefox 66因为爆出会使微软Office 365中的PowerPoint文字消失的臭虫,Mozilla暂停发送。3月27日Mozilla重新释出修补完成的最新版Firefox 66.0.2。根据Mozilla臭虫报告网页,Firefox 66除了造成Office 365中的PowerPoint文字消失的问题外&#…