Docker 镜像配置

摘要:docker配置PHP环境

Docker 配置检查

内核版本

Centos内核版本未3.1以上。系统要是64位系统

uname -r

卸载旧的文件

​ rm -rf /var/lib/docker

Docker安装

安装依赖软件包

​ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
​ 查看是否已经安装了这个
​ rpm -qa|grep device-mapper-persistent-data
​ rpm -qa|grep lvm2

设置yum源

yum-config-manager \

--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看可安装的版本

​ yum list docker-ce --showduplicates | sort -r

安装对应的版本

安装指定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
安装最新版
sudo yum install docker-ce docker-ce-cli containerd.io

查看版本

​ docker version

启动docker设置为开机启动

​ systemctl enable docker

启动docker

​ systemctl start docker

注册阿里容器镜像服务

配置镜像

cd /etc/docker
    ls
    vim daemon.json
      之后可以很快的进行处理
      {"registry-mirrors":["https://gvky2tl9.mirror.aliyuncs.com/"]}
      重启
      $ sudo systemctl daemon-reload
      $ sudo systemctl restart docker

查看本地镜像

docker image ls

查看源信息是否改为阿里

docker info

扩展

不能在windows下跑的原因:

· 1、LXC 是基于Linux的
· 2、Namespace 资源隔离
· 3、cgroup 资源限制
· 4、AUFS

常用命令

跑一个docker

docker run --name mysql -d -p 6666:3306 -e MYSQL_EOOT_PASSWOD=1234 mysql:5.7

查看运行的Docker容器

docker container ps -a

删除容器

docker container rm -f 容器名

进入指定的容器

docker contianer exec -it mysql /bin/bash

查看容器的挂载

docker inspect mysql 里面的Mounts

查看日志

dockers logs -f 容器名

删除Docker 镜像

docker rmi 镜像名

查看容器日志

docker logs 容器名

服务器检查命令

查看内存信息

free -m

查看CPU使用情况

top

查看磁盘以及分区情况

df -h

查看网络情况

ifconfig

查看端口使用情况

方法1:lsof -i:端口号

方法2:netstat -apn|grep 端口号

清理内存

    # 释放网页缓存
    echo 1 > /proc/sys/vm/drop_caches
    # 释放目录项和索引
    echo 2 > /proc/sys/vm/drop_caches
    # 释放网页缓存,目录项和索引
    echo 3 > /proc/sys/vm/drop_caches

LNMP环境配置

PHP

拉PHP

docker pull php:7.0-fpm
# sqlserver 目前安装7.0靠谱

启动容器

docker run --name  oceania-php -v ~/nginx/www:/www  -d php:7.0-fpm  # 将php文件映射到了php容器下的/www中之后nginx配置需要

安装扩展

docker-php-source extract
# 此命令,实际上就是在PHP容器中创建一个/usr/src/php的目录,里面放了一些自带的文件而已。我们就把它当作一个从互联网中下载下来的PHP扩展源码的存放目录即可。事实上,所有PHP扩展源码扩展存放的路径: /usr/src/php/ext 里面。
docker-php-source delete  #删除

php -m #查看cli下加载了那些模块
php -i #查看cli下的详细信息

# 查看当前的扩展包
cd /usr/src/php/ext
ls # 此时可以看到很多启用的未启用的镜像默认携带的扩展

# 安装mysqli sockets扩展
docker exec -it oceania-php /bin/bash
docker-php-ext-install mysqli
docker-php-ext-install sockets
exit
docker restart oceania-php
docker ps -a

# 安装sqlserver扩展
1、安装ODBC扩展
    # 需要先进行更新
    apt-get update
    
    apt-get install unixodbc unixodbc-dev -y \
    && docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr \
    && docker-php-ext-install pdo_odbc
    # 安装后执行php -m 查看已经安装过了PDO_ODBC
    exit
    docker ps -a
    docker restart oceania-php
2、安装sqlsrv扩展
    pecl install sqlsrv-4.3.0
    docker-php-ext-enable sqlsrv
3、安装pdo_sqlsrv扩展
    pecl install pdo_sqlsrv-4.3.0
    docker-php-ext-enable pdo_sqlsrv

    

image-20201201135447362

# 微软文档地址
https://docs.microsoft.com/en-us/sql/connect/php/microsoft-php-drivers-for-sql-server-support-matrix?view=sql-server-ver15#php-version-support

Nginx

拉取Nginx

docker pull nginx

挂载启动

docker run --name oceania-nginx -p 8083:80 -d \
    -v ~/nginx/www:/usr/share/nginx/html:ro \
    -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
    --link oceania-php:php \
    nginx

新增配置文件

下面的可以跑PHP了
/root/nginx/conf/conf.d/oceania.conf
server {
    listen       80;
    server_name  localhost;
    
    root /usr/share/nginx/html;  # nginx容器中的位置
    index index.html;
    location / {
        root   /usr/share/nginx/html;# nginx容器中的位置
        index  index.html index.htm index.php;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;# nginx容器中的位置
    }

    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;  # 这里是php容器中的位置
        include        fastcgi_params;
    }
}

 

常见错误

file not found

查看conf文件的配置信息是否正确

PHP跟Nginx的映射文件需要一致 例如这里使用的nginx 下的WWW

调整完之后需要重启对应docker 容器 docker restart 容器ID

sqlsrv 扩展报错

fatal error: sql.h: No such file or directory

​ 缺少了odbc扩展

apt-get install unixodbc unixodbc-dev -y \
 && docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr \
 && docker-php-ext-install pdo_odbc
 # 安装后执行php -m 查看已经安装过了PDO_ODBC
 exit
 docker ps -a
 docker restart oceania-php
make: * [Makefile:206: shared/core_stream.lo] Error 1
# 扩展不对,换一个扩展
pecl install sqlsrv-5.8.1
This extension requires the Microsoft ODBC Driver for SQL Server.
make shared/core_conn.lo erro 1 make failed
之前是4.0.8换个版本用4.3.0就好了
unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found
docker-php-source extract  # 把PHP内置扩展目录打开,发现有个odbc扩展
docker-php-ext-install odbc # 启用这个扩展
版本换了5.3.0就没有这个错误了,但是提示ODBC不可用Access the following URL to download the ODBC Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712

Docker 配置私人镜像

配置PHP

# 生成镜像
docker commit -a "oceania-php74-images" -m "my php" oceania-php74 eric-images:v1
# 此时可以查看到已经生成完成
docker images
# 生成容器
docker run --name  myphp-fpm -v ~/nginx/www:/www  -d eric-images:v1
# 查看
docker exec -it myphp-fpm /bin/bash
php -m # 可以查看到已经完全生成了一个配置好的容器

拉取环境包

git clone https://github.com/yeszao/dnmp.git
# 之后按照github 说明即可,其中docker-compose up 后会报错是因为version设置的太高 改为2 即可

配置Nginx

# 生成镜像
docker commit -a "oceania nginx images" -m "oceania" oceania-nginx74 oceania-nginx-images:v1
# 此时可以查看到已经生成完成
docker images
# 生成容器
docker run --name nginx74 -p 8090:80 -d \
    -v ~/nginx/www:/usr/share/nginx/html:ro \
    -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
    --link php74:php \
    oceania-nginx-images:v1
# 查看
docker ps -a

配置Apache+PHP镜像

配置初始化Centos镜像

# 拉取Centos7
docker pull centos:centos7
# 生成操作容器
docker run -itd --name centos7-test --privileged=true centos:centos7 /usr/sbin/init
# 进入容器测试
docker exec -it centos7-test /bin/bash
# 执行systemcl
systemctl # 出现命令提示,说明这时候可以用管理员操作

配置PHP扩展支持sqlserver

# 这里安装PHP74 采用微软提供的办法,地址如下
https://www.microsoft.com/en-us/sql-server/developer-get-started/php/rhel
# 安装PHP
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms
yum install yum-utils
yum-config-manager --enable remi-php74
yum update
yum install php php-pdo php-xml php-pear php-devel re2c gcc-c++ gcc
# 配置ODBC等Sqlserver支持
#RedHat Enterprise Server 6
curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo
#RedHat Enterprise Server 7
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
#RedHat Enterprise Server 8 and Oracle Linux 8
curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo

# 设置过源之后进行安装
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
sudo ACCEPT_EULA=Y yum install msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y yum install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo yum install unixODBC-devel


# 配置Sqlserver 扩展  其中出现无法用pecl安装的问题可以先使用wget下载对应的包 然后在安装
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
exit

使用的注意点

查看容器的构建命令
yum install -y python-pip
pip install runlike
runlike -p nginx

容器构建命令示例
docker run -itd --name web-test -p 8090:80 \
    -v /root/dockerweb/www:/var/www/html \
    -v /root/dockerweb/conf/test.conf.d:/etc/httpd/conf.d \
 --privileged=true  1d12d7a79f9a /usr/sbin/init


打开后出现php无法执行,直接显示源码或者下载
 1.下载安装: rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
             rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  2.mod_php71w安装: 
    yum install mod_php71w
    3.http.conf         AddType application/x-httpd-php .php

使用镜像构建容器示例

docker run -itd --name oa -p 8080:80 \
    -v /root/dockerweb/www/oa:/var/www/html \
    -v /root/dockerweb/conf/oa/conf.d:/etc/httpd/conf.d \
 --privileged=true  1d12d7a79f9a /usr/sbin/init


docker run -itd --name OceaniaIt \
 --privileged=true  01eef62a8b9b /usr/sbin/init


评论