PHP容器
一决左、構(gòu)建Dockerfile撒踪、配置php鏡像
- 也可以不使用,直接拉取官方php鏡像
FROM php:7.3-fpm
MAINTAINER Qhs
ENV TZ=Asia/Shanghai
#更改國內(nèi)鏡像
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
&& echo 'deb http://mirrors.aliyun.com/debian/ buster main non-free contrib' > /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/debian-security buster/updates main' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib' >> /etc/apt/sources.list \
&& echo "構(gòu)建依賴" \
&& set -xe \
&& buildDeps=" \
libmemcached-dev \
zlib1g-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
libzip-dev \
" \
&& echo "安裝php以及編譯構(gòu)建組件所需包" \
&& DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -y --no-install-recommends ${buildDeps} \
&& docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm zip\
&& docker-php-ext-configure gd \
--with-freetype-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ \
--with-png-dir=/usr/include/ \
--with-zlib-dir=/usr \
&& docker-php-ext-install gd \
&& echo "清理" \
&& rm -rf /var/lib/apt/lists/*
# 鏡像信息
LABEL Author="Qhs"
LABEL Version="v1.0.0"
LABEL Description="Qhs"
在Dockerfile文件所在的目錄下浦箱,執(zhí)行以下命令
sudo docker build -t qphp:v1.0.0 .
注意命令最后有一個點吸耿,代表當(dāng)前目錄
如果執(zhí)行結(jié)果最后出現(xiàn)下列success提示祠锣,表示構(gòu)建成功
Successfully built xxxxxxxxxx
Successfully tagged qphp:v1.0.0
使用docker images 查看鏡像,查看是否名為qphp咽安,tag為v1.0.0的鏡像伴网。
如果build不成功時,用RUN來分割妆棒,看下到底是哪個地方的命令出現(xiàn)錯誤澡腾。
二、創(chuàng)建PHP容器
- 備份PHP配置文件糕珊。
在宿主機 $PWD/work 目錄下动分,建立www(php文件)、log(日志信息)红选、etc(配置文件) 目錄澜公。
#備份配置文件。備份后刪除
docker run --name qphp -d qphp:v1.0.0
docker cp qphp:/usr/local/etc $PWD/work/etc/php
docker rm -f qphp
- 正式創(chuàng)建PHP容器
#正式創(chuàng)建php容器
docker run --name qphp -p 9000:9000 --privileged -v $PWD/work/www:/var/www/html -v $PWD/work/etc/php:/usr/local/etc -v $PWD/work/log/php:/var/log/php -d qphp:v1.0.0
1喇肋、指定容器名為qphp
2坟乾、將9000端口轉(zhuǎn)到宿主機9000端口
3、掛載www蝶防、etc甚侣、log 目錄到宿主機的指定目錄
通過docker-php-ext-install安裝php拓展
以安裝redis為例
1,進入容器
$ docker exec -it qphp bash
2慧脱,下載拓展到指定目錄
$ curl -L -o /tmp/reids.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2
3渺绒,解壓拓展
$ cd /tmp
$ tar -xzf reids.tar.gz
4, 運行docker-php-source 菱鸥,創(chuàng)建并初始化 /usr/src/php目錄
$ docker-php-source extract
5宗兼,將解壓到文件轉(zhuǎn)移到php目錄中
$ mv phpredis-5.0.2 /usr/src/php/ext/phpredis
6,檢查文件是否存在
$ ls -l /usr/src/php/ext | grep redis
7氮采,運行docker-php-ext-install 殷绍,安裝插件
$ docker-php-ext-install phpredis
8,檢查是否已經(jīng)安裝
$ php -m | grep redis
卸載擴展鹊漠,直接刪除/usr/local/etc/php/conf.d 對應(yīng)的配置文件即可
Nginx容器
- 拉取nginx鏡像
$ docker pull nginx
- 備份 nginx 的配置文件
//將文件copy到宿主機的工作目錄中主到,再刪除此容器
$ docker run --name qnginx -d nginx
$ docker cp qnginx:/etc/nginx $PWD/work/etc/nginx
$ docker rm -f qnginx
- 啟動nginx容器
docker run --name qnginx -p 80:80 --link qphp:qphp-fpm -v $PWD/work/www:/usr/share/nginx/html -v $PWD/work/etc/nginx:/etc/nginx -v $PWD/work/log/nginx:/var/log/nginx -d nginx
1、指定容器名為qnginx
2躯概、將容器80端口轉(zhuǎn)到宿主機80端口
3登钥、掛載www、etc娶靡、log 目錄到宿主機的指定目錄
4牧牢、--link A:B 用來連接兩個容器,使兩個容器之間可以互相通訊,接收容器可以使用源容器的環(huán)境變量等塔鳍。其中A是源容器伯铣,B是別名,當(dāng)前nginx容器為接收容器轮纫。
- 配置文件
#修改nginx的配置文件
location ~ \.php(/|$) {
fastcgi_pass qphp-fpm:9000;//此處使用上面的別名腔寡。不建議使用ip,因為ip重啟可能會變更
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/html/xxxxxxxxx$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED /var/www/html/xxxxxxxxx$fastcgi_path_info;
include fastcgi_params;
}
#xxxxxxxxx為具體項目目錄掌唾,使用時注意修改
Mysql容器
- 拉取Mysql鏡像
$ docker pull mysql
- 創(chuàng)建啟動Mysql容器
docker run --name qmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -di mysql
1放前、指定容器名為qmysql
2、將容器3306端口指到宿主機3306端口
檢查是否創(chuàng)建成功
使用 docker ps 命令糯彬,如果有NAMES為qmysql的容器犀斋,表示已經(jīng)啟動。
如果沒有看到情连,可以使用 docker log qmysql 命令來查看錯誤日志。
根據(jù)提示信息览效,修改后却舀,docker rm qmysql 刪除剛剛的容器,重新創(chuàng)建锤灿。配置Mysql
1挽拔,進入mysql容器
$ docker exec -it qmysql bash
2,進入mysql中
$ mysql -uroot -proot;
3但校,查看mysql版本
$ status;
4螃诅,授權(quán)遠(yuǎn)程連接
$ GRANT ALL ON *.* TO 'root'@'%';
5,刷新
$ flush privileges;
6状囱,更改加密規(guī)則
$ ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
7术裸,修改root密碼
$ ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
8,刷新
$ flush privileges;
9亭枷,至此袭艺,配置msyql完成。退出mysql,退出容器
$ exit;
補充:如果需要搭建指定版本的mysql叨粘,拉取的時候帶上版本號猾编,docker pull mysql:5.x ,并且使用該鏡像啟動容器升敲,5.x在容器內(nèi)只需要授權(quán)遠(yuǎn)程連接答倡,不用修改加密規(guī)則就可以了。
與mysql通訊
- 使用link來通訊驴党。在上面創(chuàng)建容器的命令中瘪撇,加入 --link qmysql:qmysql
- 使用IP地址
2.1、使用命令,docker exec qnginx env 來查看環(huán)境變量设江。此信息在源容器重啟后不會自動更新锦茁。
2.2、使用命令叉存,docker exec -it qnginx cat /etc/hosts 獲取接收容器/ect/hosts中的配置信息码俩。此信息會自動更新。
2.3歼捏、使用上面查詢出來的mysql的ip地址稿存,即可訪問。
例如:mysql容器IP為172.17.0.4瞳秽,后續(xù)連接為172.17.0.4即可 - 訪問宿主機瓣履,再通過端口進入mysql
3.1、 mac for docker 18.03 版本后可以用 host.docker.internal 來訪問练俐。只能用于mac袖迎,不可用于開發(fā)環(huán)境。
應(yīng)該還有其他方式腺晾,用到再說燕锥。
Docker 簡單操作
docker start qphp qnginx //容器啟動,注意順序悯蝉,如果有l(wèi)ink归形,最后啟動
docker restart qphp //容器重啟
docker stop qphp //容器停止
docker ps -a //查看所有容器
docker images //查看所有鏡像
docker rm qphp //刪除容器
docker rmi php //刪除鏡像
docker exec -it qphp bash //進入容器
docker exec qnginx env //查看容器環(huán)境變量
docker log qmysql //查看錯誤日志