如何在Fedora 22上使用Docker配置Apache容器
在本文中,我们将学习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