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