title: Docker系列之实战:7.安装httpd.md
categories: Docker
tags:
- Docker
timezone: Asia/Shanghai
date: 2019-02-25
环境
[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[root@centos181001 ~]# docker -v
Docker version 18.09.1, build 4c52b90
[root@centos181001 content]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01
第一步:搜索和拉取官方Nginx镜像
https://hub.docker.com/_/httpd
### 搜索镜像
docker search httpd
### 拉取最新镜像
docker pull httpd
### 拉取指定版本镜像
docker pull httpd:2.4.38
### 拉取指定版本镜像(基于alpine构建,镜像更小)
docker pull httpd:2.4.38-alpine
### 查看拉取的镜像
docker image ls
docker image ls httpd
第二步:如何使用image
1.运行一个简单的示例
mkdir -p /home/html
echo "Hello httpd" > /home/html/index.html
docker run -dit \
--name my-running-app \
-p 80:80 \
-v /home/html:/usr/local/apache2/htdocs/ \
httpd:2.4.38
curl http://11.11.11.63
2.使用Dockerfile重新构建并将网站内容打包到image
cat <<EOF >Dockerfile
FROM httpd:2.4.38
COPY html/ /usr/local/apache2/htdocs/
EOF
mkdir html
echo "Hello httpd" > html/index.html
docker build -t my-apache2 .
docker run -dit --name my-running-app -p 8080:80 my-apache2
3.自定义httpd.conf
## 1.创建一个临时容器
docker run -d --name temp-httpd httpd:2.4.38
## 2.将配置文件copy出来
docker cp temp-httpd:/usr/local/apache2/conf/httpd.conf ./httpd.conf
## 3.删除临时容器
docker rm -f temp-httpd
## 4.编辑配置文件
vim httpd.conf
Listen 80 改为 Listen 8888
## 5.使用修改过的配置文件重新生成镜像并运行容器
cat <<EOF >Dockerfile
FROM httpd:2.4.38
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
EOF
docker build -t my-apache2 .
docker run -dit --name my-running-app -p 8888:8888 my-apache2
## 6.使用以下地址访问测试
http://11.11.11.63:8888
4.SSL/HTTPS
## 1.创建一个临时容器
docker run -d --name temp-httpd httpd:2.4.38
## 2.将配置文件copy出来
docker cp temp-httpd:/usr/local/apache2/conf/httpd.conf ./httpd.conf
## 3.删除临时容器
docker rm -f temp-httpd
## 4.制作自签名证书
参考:https://www.cnblogs.com/lihuang/articles/4205540.html
## 5.编辑配置文件:把以下3行取消注释
vim httpd.conf
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
## 6.创建并编辑Dockerfile
cat <<EOF >Dockerfile
FROM httpd:2.4.38
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
COPY server.* /usr/local/apache2/conf/
EOF
docker build -t my-apache2 .
docker run -dit --name my-running-app -p 8888:8888 -p 443:443 my-apache2
## 7.打开以下测试地址
https://11.11.11.63
5.docker-compose.yml
cat <<EOF >docker-compose.yml
version: "3"
services:
httpd:
image: httpd:2.4.38
ports:
- 80:80
- 443:443
volumes:
- ./httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./server.crt:/usr/local/apache2/conf/server.crt
- ./server.key:/usr/local/apache2/conf/server.key
- ./html:/usr/local/apache2/htdocs/
EOF
docker stack deploy -c docker-compose.yml STACK
https://11.11.11.63