安装一个mysql 和 一个wrokpress的容器,通过link关联
[root@node201 ~]# docker run -it -d --name wp-db -e MYSQL_ROOT_PASSWORD=apple123456 -e MYSQL_DATABASE=wpdb -v /root/k8s/wordpress/mysql:/var/lib/mysql mariadb
这里的数据库主机mariadb,后面创建wordpress容器使用--link wp-db:mariadb 通过mariadb访问wp-db的容器
简单版:一步步初始化
[root@node201 ~]# docker run -it -d --name wordpress --link wp-db:mariadb -v /root/k8s/wordpress/html:/var/www/html -p 3080:80 wordpress
复杂版:直接到创建站点名
[root@node201 ~]# docker run -it -d --name wordpress --link wp-db:mariadb -v /root/k8s/wordpress/html:/var/www/html -e WORDPRESS_DB_HOST=mariadb -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=apple123456 -e WORDPRESS_DB_NAME=wpdb -p 3080:80 wordpress
解释:
--link wp-db:mariadb 通过mariadb访问wp-db的容器
-p 3080:80 将wordpress的80端口映射到主机的3080端口
清除环境
[root@node201 wordpress]# docker stop wp-db wordpress
wp-db
wordpress
[root@node201 wordpress]# docker rm wp-db wordpress
wp-db
wordpress
Dockerfile用于单个image的创建,并生成对应的单个容器。
Docker-compose用于多个容器的关联生成。
docker-compose 是用来 自动化 处理多个关联的docker容器的作业。
相当于ansible的playbook
2.1 安装docker-compose组件:[root@node201 wordpress]# curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@node201 wordpress]# chmod +x /usr/local/bin/docker-compose
[root@node201 wordpress]# docker-compose -version
docker-compose version 1.29.0, build 07737305
[root@node201 wordpress]# docker-compose config
ERROR:
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, compose.yml, compose.yaml 必须是固定文件名
[root@node201 wordpress]# mv docker_compose_wp.yml docker-compose.yml
[root@node201 docker-compose]# mkdir mysql html
[root@node201 docker-compose]# cat docker-compose.yml
version: '3.9'
services:
wordpress:
depends_on:
- wp-db
image: wordpress:latest
links:
- wp-db:mariadb
environment:
- "WORDPRESS_DB_HOST=mariadb"
- "WORDPRESS_DB_USER=root"
- "WORDPRESS_DB_PASSWORD=root123456"
- "WORDPRESS_DB_NAME=wpdb"
ports:
- "3080:80"
volumes:
- /root/k8s/wordpress/docker-compose/html:/var/www/html
wp-db:
image: mysql
environment:
- "MYSQL_ROOT_PASSWORD=root123456"
- "MYSQL_DATABASE=wpdb"
volumes:
- /root/k8s/wordpress/docker-compose/mysql:/var/lib/mysql
以上命令的意思是新建db和wordpress容器。等同于:
2.3 运行docker-compose[root@node201 ~]# docker run -it -d --name wp-db -e MYSQL_ROOT_PASSWORD=root123456 -e MYSQL_DATABASE=wpdb -v /root/k8s/wordpress/mysql:/var/lib/mysql mariadb
[root@node201 ~]# docker run -it -d --name wordpress --link wp-db:mariadb -v /root/k8s/wordpress/html:/var/www/html -p 3080:80 wordpress
[root@node201 docker-compose]# docker-compose -f docker-compose.yml up -d
Creating network "docker-compose_default" with the default driver
Creating docker-compose_wp-db_1 ... done
Creating docker-compose_wordpress_1 ... done[root@node201 docker-compose]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
docker-compose_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:3080->80/tcp
docker-compose_wp-db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
===========================================================
docker-compose up # 编排启动容器 -d 以守护模式启动
docker-compose ps # 查看容器
docker-compose stop # 停止容器
docker-compose start # 启动容器
docker-compose logs # 查看所有容器日志
docker-compose stop; docker-compose rm # 需要先stop然后删除容器
# docker-compose stop;docker-compose rm;rm -rf html/* mysql/*
3.dockerfile+docker-compose部署wordpress(nginx+php-fpm) docker run -it -d --name wp-db -e MYSQL_ROOT_PASSWORD=apple123456 -e MYSQL_DATABASE=wpdb -v /root/k8s/wordpress/docker-compose/dockerfile/mysql:/var/lib/mysql mariadb
docker pull centos:7
docker run -it --name wordpress --link wp-db:mariadb -p 3080:80 centos:7 /bin/bash
# epel,remi repo for php-fpm, nginx, php-fpm for nginx
yum install -y epel-release && rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm &&
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -L http://mirrors.aliyun.com/repo/epel-7.repo -o /etc/yum.repos.d/epel.repo &&
yum install nginx net-tools -y &&
yum -y install --enablerepo=remi --enablerepo=remi-php56 php php-fpm php-gd php-mysql php-common php-pear php-mbstring php-mcrypt
docker cp nginx.conf wordpress:/etc/nginx/nginx.conf
wget http://wordpress.org/latest.zip
unzip latest.zip
mv wordpress /usr/share/nginx/
docker cp latest.zip wordpress:/usr/share/nginx
yum install unzip -y && unzip latest.zip && chown -R apache:apache /usr/share/nginx/wordpress
php-fpm
nginx
tail -f /var/log/nginx/access.log
[root@c1737624ed6c /]# php-fpm --version
PHP 5.6.40 (fpm-fcgi) (built: Nov 15 2021 11:30:45)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
[root@91c098944819 wordpress]# ps -ef|grep php-fpm
apache 514 513 0 15:30 ? 00:00:04 php-fpm: pool www
apache 515 513 0 15:30 ? 00:00:04 php-fpm: pool www
[root@91c098944819 wordpress]# ps -ef|grep nginx
root 520 1 0 15:30 ? 00:00:00 nginx: master process nginx
nginx 521 520 0 15:30 ? 00:00:00 nginx: worker process
[root@node201 wordpress]# cat wp_pod_test.yaml
---
# 1.创建namespace: longway
apiVersion: v1
kind: Namespace
metadata:
name: longway
---
# 2.创建PVC: wordpress-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
namespace: longway
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage-new" #通过这里关联特定的nfs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
storageClassName: nfs
---
# 3.创建pod
apiVersion: v1
kind: Pod
metadata:
name: wordpress
namespace: longway
labels:
app: wordpress # <==== 这里添加一个label标签,pod 向外暴露pod的service NodePort型端口需要用标签选择器。
spec:
containers:
- name: wordpress
image: wordpress
ports:
- containerPort: 80
name: wdport
env:
- name: WORDPRESS_DB_HOST
value: 127.0.0.1:3306 # <==== 这里不能是localhost数据库的localhost默认是去找socket文件,然而在不同的容器之间文件系统是隔离的,会导致报错;
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: wordpress
- name: WORDPRESS_LANG
value: zh_CN
imagePullPolicy: IfNotPresent
- name: mysql
image: mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
name: dbport
env:
- name: MYSQL_ROOT_PASSWORD
value: root123456
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
volumeMounts:
- name: db
mountPath: /var/lib/mysql
volumes:
- name: db
persistentVolumeClaim:
claimName: wordpress-pvc
#hostPath:
# path: /root/k8s/wordpress/mysql #如果不使用nfs pvc,这里需要手动创建该目录
---
# 创建service
apiVersion: v1
kind: Service
metadata:
labels:
app: wordpress
name: wp-svc
namespace: longway
spec:
ports:
- port: 3080
protocol: TCP
targetPort: 80
selector:
app: wordpress
type: NodePort
[root@node201 wordpress]# kubectl apply -f wp_pod_test.yaml
namespace/longway created
persistentvolumeclaim/wordpress-pvc created
pod/wordpress created
service/wp-svc created
[root@node201 wordpress]# kubectl get all -n longway
NAME READY STATUS RESTARTS AGE
pod/wordpress 2/2 Running 0 24s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wp-svc NodePort 10.105.100.133
PVC有namespace的概念,PV没有namespace的概念!
root@node201 wordpress]# kubectl get pvc -n longway
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
wordpress-pvc Bound pvc-f46f175b-5ccb-4109-92d8-b25e706910e9 2Gi RWX managed-nfs-storage-new 102s
nfs服务器端pvc目录命名规则: ns-pvc_name-volume_name
9.附录:php-fpm安装1.清除依赖
yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64
2.配置epel源
yum install -y epel-release``wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3.配置remi源
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
4.安装php5.6.x
yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof
5.安装php-fpm
yum install --enablerepo=remi --enablerepo=remi-php56 php-fpm
6.配置开机启动服务
systemctl restart php-fpm``systemctl enable php-frm
7.查看是否安装成功
ps -ef | grep php``netstat -anp | grep 9000



