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