Dockerfile操作实践1:php:5.3-apache添加gd库

php:5.3-apache(Dockerfile镜像)添加gd库:(php为5.3.29)

参考另一篇文章Dockerfile制作方法

1、进入镜像

docker run -ti [image_name]
##或者
nsenter --target `docker inspect --format "{{ .State.Pid }}" [containers_id]` --mount --uts --ipc --net --pid

2、bash操练起来

cd /usr/lx
tar jxvf freetype-2.4.0.tar.bz2
cd freetype-2.4.0
./configure --prefix=/usr/local/freetype && make && make install

cd /usr/lx
tar zxvf jpegsrc.v9.tar.gz
cd jpeg-9
CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/jpeg && make && make install
mkdir -p /usr/local/jpeg/include
mkdir -p /usr/local/jpeg/lib
mkdir -p /usr/local/jpeg/bin
mkdir -p /usr/local/jpeg/man/man1

cd /usr/lx
tar zxvf libpng-1.2.55.tar.gz
cd libpng-1.2.55 
CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/libpng && make && make install

cd /usr/lx
tar zxf php-5.3.29.tar.gz
cd php-5.3.29/ext/gd/
phpize
./configure --with-php-config=/usr/local/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-freetype-dir=/usr/local/freetype && make && make install
#/usr/local/bin/php-config是通过find / -name "php-config"查出来的


#检查一下上述是否成功了:
find / -name "gd.so"
#返回
#/usr/local/lib/php/extensions/no-debug-non-zts-20090626/gd.so
#/usr/lx/php-5.3.29/ext/gd/modules/gd.so
#/usr/lx/php-5.3.29/ext/gd/.libs/gd.so
#可见已经成功编译好了.so扩展

#接下来要让php加载扩展,修改php.ini文件 在 ;extension=php_zip.dll 下面添加一行 extension=gd.so
#php:5.3-apache里没有php.ini文件(phpinfo()可看到Loaded Configuration File为空,但是Configuration File (php.ini) Path是有的)
#需复制一个过去,或者直接创建一个空的也可以,这里直接搞个空的
#cp /usr/lx/php-5.3.29/php.ini-production  /usr/local/lib/php.ini 
#sed -i "s|;extension=php_zip.dll|extension=gd.so|g" /usr/local/lib/php.ini
echo extension=gd.so > /usr/local/lib/php.ini

rm -rf /usr/lx/*
#直接重启机器,或者重启apach

3、转换为Dockerfile文件如下:

FROM php:5.3-apache

##start###########################################

COPY ./lx /usr/lx

RUN set -x \
&& cd /usr/lx \
&& tar jxvf freetype-2.4.0.tar.bz2 \
&& cd freetype-2.4.0 \
&& ./configure --prefix=/usr/local/freetype && make && make install \

&& cd /usr/lx \
&& tar zxvf jpegsrc.v9.tar.gz \
&& cd jpeg-9 \
&& CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/jpeg && make && make install \
&& mkdir -p /usr/local/jpeg/include \
&& mkdir -p /usr/local/jpeg/lib \
&& mkdir -p /usr/local/jpeg/bin \
&& mkdir -p /usr/local/jpeg/man/man1 \

&& cd /usr/lx \
&& tar zxvf libpng-1.2.55.tar.gz \
&& cd libpng-1.2.55  \
&& CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/libpng && make && make install \

&& cd /usr/lx \
&& tar zxf php-5.3.29.tar.gz \
&& cd php-5.3.29/ext/gd/ \
&& phpize \
&& ./configure --with-php-config=/usr/local/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-freetype-dir=/usr/local/freetype \
&& make && make install \

&& echo extension=gd.so > /usr/local/lib/php.ini \

###  && cp /usr/lx/php-5.3.29/php.ini-production  /usr/local/lib/php.ini \
###  && sed -i "s|;extension=php_zip.dll|extension=gd.so|g" /usr/local/lib/php.ini \

&& rm -rf /usr/lx/*

##end############################################

# Set the timezone.
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Write Permission
# RUN usermod -u 1000 www-data
RUN chown -R www-data:www-data /var/www/html

4、再安装一个openssl,openssl在/usr/lx/php-5.3.29/ext/openssl里面已经有了,可以直接安装

sg

#cd /usr/lx
#tar zxvf php-5.3.29.tar.gz
# 进入PHP的openssl扩展模块目录
cd /usr/lx/php-5.3.29/ext/openssl
phpize                            
# 执行后,发现错误 无法找到config.m4 ,config0.m4就是config.m4。直接重命名
mv config0.m4 config.m4
phpize
./configure --with-openssl --with-php-config=/usr/local/bin/php-config
make
make install

# 安装完成后,会返回一个.so文件(openssl.so)的目录/usr/local/lib/php/extensions/no-debug-non-zts-20090626/openssl.so。
# 将此目录下的openssl.so 文件拷贝到你在php.ini 中指定的 extension_dir 下(在php.ini文件中查找:extension_dir =),这里extension_dir没指定,实际就是/usr/local/lib/php/extensions/no-debug-non-zts-20090626
# 编辑php.ini文件,在文件最后添加 extension=openssl.so
# 重启Apache
apachectl restart
# 检查,看看有没有错误
php -i |grep openssl
# 再检查,使用 phpinfo

dockerfile文件:

##openssl install

&& cd /usr/lx/php-5.3.29/ext/openssl  \                    
&& mv config0.m4 config.m4 \
&& phpize \
&& ./configure --with-php-config=/usr/local/bin/php-config --with-openssl \
&& make && make install \

  

5、文件拷贝

4.1从 container 到 主机(host)

#使用 docker cp 命令
docker cp <containerId>:/file/path/within/container /host/path/target

4.2.从 主机(host) 到 container

1. Get container name or short container id :
$docker ps

2. Get full container id
$docker inspect -f '{{.Id}}' SHORT_CONTAINER_ID-or-CONTAINER_NAME

3. copy file :
$sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE

EXAMPLE :

docker ps
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #d8e703d7e303 solidleon/ssh:latest /usr/sbin/sshd -D cranky_pare docker inspect -f '{{.Id}}' cranky_pare #or docker inspect -f '{{.Id}}' d8e703d7e303 #d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5 sudo cp file.txt /var/lib/docker/aufs/mnt/d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5/root/file.txt

posted on 2017-06-15 16:05  lxsky  阅读(1176)  评论(0编辑  收藏  举报

导航