提前准备nginx_php:v1镜像
yum仓库镜像:
方法1:
宿主机安装createrepo
容器提供nginx --> debian
数据挂载到/data
更新在宿主机上更新
优点:不需要自己创建镜像
缺点:宿主机需要额外安装软件
方法2:
自定义centos7+nginx的镜像
容器里安装createrepo
挂载目录/data
更新在容器里更新
优点:宿主机不需要做其他操作
缺点:需要自己制作镜像,操作步骤稍复杂
操作步骤:
1.准备文件
[root@docker-11 ~/dockerfile/nginx_c7]# tree
.
├── build.sh
├── conf
│ ├── epel.repo
│ ├── nginx.conf
│ └── yum.conf
├── Dockerfile
└── soft
└── nginx-1.18.0-1.el7.ngx.x86_64.rpm
2.编写dockerfile
===================================
#基于什么镜像
FROM centos:7
#添加软件源
COPY conf/epel.repo /etc/yum.repos.d/epel.repo
#拷贝nginx软件包
COPY soft/nginx-1.18.0-1.el7.ngx.x86_64.rpm /tmp/
#创建用户,安装软件
RUN groupadd -g 1000 www && \
useradd -u 1000 -g 1000 www && \
yum install openssl createrepo -y && \
rpm -ivh /tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm && \
rm -rf /etc/nginx/conf.d/* && \
rm -rf /usr/share/nginx/html/* && \
rm -rf /tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm && \
yum clean all
#拷贝配置文件
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY conf/yum.conf /etc/nginx/conf.d/yum.conf
#暴露端口
EXPOSE 80
#启动服务
CMD ["nginx","-g","daemon off;"]
===================================
3.构建镜像
docker build -t yum:v1 .
4.启动容器
ifconfig eth0:1 10.0.0.13 up
docker run -it \
--name yum \
-p 10.0.0.13:80:80 \
-v /data/yum/:/usr/share/nginx/html/ \
-d yum:v2
5.准备php需要的rpm包
6.生成仓库索引文件
docker exec yum createrepo /usr/share/nginx/html/
7.创建干净的容器测试下载
- 创建新的centos7容器
- 将php软件包拷贝进容器里
- 进入容器
- 修改yum配置文件,打开缓存
- 进入软件包目录,执行 yum localinstall *.rpm -y
- 安装完成后找出所有下载的rpm包并保存
- 将所有的rpm包拷贝到宿主机的yum仓库数据目录
- 在宿主机外执行容器命令重新生成仓库索引文件
- 重新生成新的干净的centos7容器
- 进入新容器并删除所有repo文件
- 创建本地源的repo文件
- 正常执行yum命令安装软件
- 查看安装是否报错
nginx+php镜像:
1.准备配置文件和代码
[root@docker-11 ~/dockerfile/nginx_php]# tree
.
├── build.sh
├── code
│ └── wordpress-5.2.2-zh_CN.tar.gz
├── conf
│ ├── local.repo
│ ├── nginx.conf
│ ├── nginx_php.ini
│ ├── supervisord.conf
│ ├── wordpress.conf
│ └── www.conf
├── Dockerfile
└── start.sh
2.编写dockerfile
===============================
[root@docker-11 ~/dockerfile/nginx_php]# cat Dockerfile
#基于什么镜像
FROM centos:7
#添加软件源和代码
RUN rm -rf /etc/yum.repos.d/*
COPY conf/local.repo /etc/yum.repos.d/local.repo
ADD code/wordpress-5.2.2-zh_CN.tar.gz /code/
RUN groupadd -g 1000 www && \
useradd -u 1000 -g 1000 www && \
chown -R www:www /code/wordpress && \
yum install nginx php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache supervisor -y && \
rm -rf /etc/nginx/conf.d/default.conf && \
yum clean all
#拷贝配置文件
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY conf/wordpress.conf /etc/nginx/conf.d/wordpress.conf
COPY conf/www.conf /etc/php-fpm.d/www.conf
COPY conf/supervisord.conf /etc/supervisord.conf
COPY conf/nginx_php.ini /etc/supervisord.d/nginx_php.ini
#暴露端口
EXPOSE 80
#启动服务
CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]
=================================
mysql命令:
mkdir /data/mysql
chown -R mysql:mysql /data/mysql
docker run \
--name mysq \
--user 2000:2000 \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress \
-e MYSQL_DATABASE=wordpress \
-d mysql:5.7 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
制作Wordpress
# 自定义网络
docker network create -d bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 wordpress-net
cat >/root/docker-compose/docker-compose_wordpress.yml <<EOF
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql
user: 2000:2000
environment:
- "MYSQL_ROOT_PASSWORD=123"
- "MYSQL_DATABASE=wordpress"
- "MYSQL_USER=wordpress"
- "MYSQL_PASSWORD=wordpress"
volumes:
- "/data/wordpress_mysql:/var/lib/mysql"
ports:
- "3306:3306"
command:
--character-set-server=utf8
--collation-server=utf8_bin
nginx_php:
image: nginx_php:v1
container_name: nginx_php
ports:
- "80:80"
networks:
default:
external: true
name: wordpress-net
EOF
docker-compose -f docker-compose_wordpress.yml up