如何在Fedora 22上使用Docker配置Apache容器

时间:2020-03-05 15:25:14  来源:igfitidea点击:

在本文中,我们将学习Docker,如何使用它来部署Apache httpd,以及如何在Docker Hub上共享它。
首先,我们将学习如何提取和使用托管在Docker Hub上的镜像,然后以交互方式将Apache安装在Fedora 22镜像上,之后,我们将学习如何使用Dockerfile来更快,更快速地生成镜像。
优雅的方式,最后,我们将发布在Docker Hub中创建的镜像,以便以后任何人都可以下载和使用它。

安装Docker

我们至少需要这些东西来运行Docker:

  • 我们需要64位内核版本3.10或者更高版本
  • iptables 1.4-Docker将使用它来制作网络向导,例如网络地址转换。
  • Git 1.7-Docker使用Git使其与存储库进行交易,例如Docker Hub
  • ps-该实用程序在大多数环境中都存在,并在procps软件包中提供。
  • root-尽管普通用户可以通过TCP和其他方式运行docker客户端,但为简单起见,我们将假定我们是root用户

使用dnf安装docker

以下命令将安装Docker

dnf update && dnf install docker

注意:我们仍然可以在Fedora 22中使用Yum,但是不推荐使用Dum,而是使用DNF,并且在全新安装中不存在。

检查安装

我们将要使用的第一个命令是docker info,它将为我们提供许多信息:

docker info

还可以尝试使用docker版本:

docker version

将Docker作为守护程序启动

我们应该启动一个泊坞窗实例,该实例将处理我们的请求。

docker -d

现在将docker设置为从系统启动,这样我们就不需要在每次重启时都运行前面的命令。

chkconfig docker on

让我们用Busybox打个招呼世界:

docker run -t busybox /bin/echo "hello world"

在此命令中,我们告诉Docker在Busybox镜像的实例/容器中执行/bin/echo“ hello world”,该镜像是基于单个二进制文件并链接到其的最小POSIX环境。

如果Docker在系统上找不到Busybox的本地镜像,它将从Docker Hub自动提取该镜像,如以下屏幕快照所示:

忙碌世界与Busybox

再次尝试相同的命令,这一次是因为Docker已经在本地拥有Busybox镜像,我们将看到的只是echo的输出:

docker run -t busybox /bin/echo "hello world"

还尝试以下操作以在容器环境中输入:

docker run -it busybox /bin/sh

要离开和停止容器,请使用exit命令

交互式地对Apache进行Docker化

拉/下载Fedora镜像:

docker pull fedora:22

运行从控制台分离的容器:

docker run -d -t fedora:22 /bin/bash

列出正在运行的容器并按名称标识,如下所示

docker ps

我们为实例指定了名称Angry_nobel,所以我们附上:

docker attach angry_nobel

注意:每次运行容器时,都会给出一个新名称,如果我们需要一个恒定的名称,则应使用-name参数来执行docker run命令。

安装Apache

以下命令将更新DNF数据库,下载安装Apache(httpd程序包)并清理DNF缓存以缩小镜像

dnf -y update && dnf -y install httpd && dnf -y clean all

配置Apache

我们唯一要更改httpd.conf的是ServerName,这使Apache停止抱怨。

sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf

设置环境

为了使Apache在独立模式下运行,我们必须以环境变量的形式提供一些信息,并且还需要在这些变量中设置目录,因此我们将使用一个小的Shell脚本来实现该目的,该脚本还将启动Apache

vi /etc/httpd/run_apache_foreground
#!/bin/bash
#set variables
APACHE_LOG_DI=R"/var/log/httpd"
APACHE_LOCK_DIR="/var/lock/httpd"
APACHE_RUN_USER="apache"
APACHE_RUN_GROUP="apache"
APACHE_PID_FILE="/var/run/httpd/httpd.pid"
APACHE_RUN_DIR="/var/run/httpd"
#create directories if necessary
if ! [ -d /var/run/httpd ]; then mkdir /var/run/httpd;fi
if ! [ -d /var/log/httpd ]; then mkdir /var/log/httpd;fi
if ! [ -d /var/lock/httpd ]; then mkdir /var/lock/httpd;fi
#run Apache
httpd -D FOREGROUND

或者,我们可以在容器shell上粘贴并运行以下代码段:

dnf -y install git && git clone https://github.com/gaiada/run-apache-foreground.git && cd run-apach* && ./install && dnf erase git

上面的内联脚本将安装Git,克隆此存储库,将脚本放置到位并询问我们是否要卸载Git。

保存容器状态

现在,容器已准备好运行Apache,现在是时候将该容器的当前状态保存在镜像中,以便在需要时使用。

要离开容器环境,必须先按Ctrl + p,然后再按Ctrl + q,如果仅在shell中调用exit,则还将停止容器并丢失到目前为止所做的一切。

返回Docker主机后,使用docker commit,然后使用所需的容器和存储库名称/标签:

docker commit angry_nobel gaiada/apache

现在,我们已将容器状态保存到镜像中,可以在正在运行的容器上使用docker stop:

docker stop angry_nobel

运行并测试图像

最后,从新镜像运行一个容器,并使用以下命令将端口80上的连接重定向到该容器:

docker run -p 80:80 -d -t gaiada/apache /etc/httpd/run_apache_foreground

至此,我们已经在容器中运行了Apache,打开浏览器以访问http://localhost中的服务,我们将看到Apache默认页面,如下所示

从Docker容器运行的Apache默认页面

使用Dockerfile对Apache进行Docker化

现在,我们将创建一个新的Apache镜像,这一次,这些步骤将被写入一个Dockerfile中,并将对其进行处理以形成该镜像。

首先,创建一个目录,我们将其中放置Dockerfile并输入以下目录:

mkdir apachedf; cd apachedf

然后创建一个具有以下内容的名为Dockerfile的文件:

FROM fedora:22
MAINTAINER Carlos Alberto
LABEL version="0.1"
RUN dnf -y update && dnf -y install httpd && dnf -y clean all
RUN [ -d /var/log/httpd ] || mkdir /var/log/httpd
RUN [ -d /var/run/httpd ] || mkdir /var/run/httpd
RUN [ -d /var/lock/httpd ] || mkdir /var/lock/httpd
RUN sed -i.orig 's/#ServerName/ServerName/' /etc/httpd/conf/httpd.conf
ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/httpd
ENV APACHE_LOCK_DIR /var/lock/httpd
ENV APACHE_RUN_DIR /var/run/httpd
ENV APACHE_PID_FILE /var/run/httpd/httpd.pid
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

让我们看看这个Dockerfile上的内容:

FROM这告诉docker我们将使用Fedora 22作为基本镜像

MANTAINER和LABEL这些命令仅供参考,对图像没有直接影响

运行以交互方式自动化我们完成的步骤,安装Apache,创建目录并编辑httpd.conf

ENV设置环境变量,现在我们不再需要run_apache_foreground脚本。

暴露将80端口暴露给世界

CMD将默认命令设置为httpd,因此无需在每次启动新容器时都执行此操作

建立形象
现在,我们将构建图像并将TAG gaiada/apachedf放在其上:

docker build -t gaiada/apachedf:0.1 .

Docker建设完成

使用docker镜像列出本地镜像,然后查看是否有新镜像:

docker images

然后运行新镜像:

docker run -t -p 80:80 gaiada/apachedf

Dockerfile就是这样,使用此功能可以使事情变得更加轻松,快速和可重复。

发布镜像

到目前为止,我们只是从Docker Hub中提取了镜像,但是我们也可以推送镜像,并根据需要稍后将其提取。
实际上,其他人也可以下载图像并在其系统中使用它,而无需进行任何更改。
现在,我们将学习如何使我们的图像可供全球其他用户使用。

建立帐户

为了能够在Docker Hub上推送镜像,我们需要创建一个帐户。
访问https://hub.docker.com/account/signup/并填写表格

登录

输入以下命令,然后继续使用我们在创建帐户时提供的登录名,密码和电子邮件

docker login

首次登录后,帐户信息将记录在~/.dockercfg中

push

使用docker push [registry /] your_login/repository_name [:tag]将页面推送到服务器

docker push docker.io/gaiada/apachedf