2020年6月

docker入门

docker linux的安装

# 下载
sudo wget -qO- https://get.docker.com/ | sh # 下载docker安装shell脚本

# 添加用户到docker用户组
sudo usermod -aG docker xbf # 用户xbf添加到docker用户组

# 安装后启动服务
service docker start

# 使用阿里云docker加速器
https://cr.console.aliyun.com/#/accelerator

docker命令

docker build # 建立一个新的image
docker pull nginx # 下载一个iamge
docker run -p 8080:80 -d nginx # 运行容器
docker ps # 查看运行的docker程容器
docker stop 容器ID # 停止运行
docker commit -m '备注' # 提交新的images
docker rmi image的ID # 删除image

编写简单文件自创docker镜像

# 新增文件夹下Dockerfile文件
FROM alpine:latest
MAINTAINER zhorz
CMD echo "Hello Docker"

# 在新建的文件夹下运行命令: docker build -t hello_docker . 

# dockerfile语法
FROM base image
RUN 执行命令
ADD 添加文件
COPY 拷贝文件
CMD 执行命令
EXPOSE 暴露端口
WORKDIR 指定路径
MAINTAINER 维护者
ENV 设定环境变量
ENTRYPOINT 容器入
USER 指定用户
VOLUME mount point

重新学习 20200628

更换 unbuntu 源 https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.11871b11drdcbT

docker 下载 和安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

验证
apt list --installed | grep docker
sudo docker run hello-world

更换 docker 源 https://www.cnblogs.com/reasonzzy/p/11127359.html (最好用阿里云的,飞快)

重启使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker

windows 使用 docker : https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

通过Dockerfile 安装

FROM php:7.4.6-fpm-buster
# 设置阿里云源
RUN echo 'deb http://mirrors.aliyun.com/debian/ buster main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib\n\
deb http://mirrors.aliyun.com/debian-security buster/updates main\n\
deb-src http://mirrors.aliyun.com/debian-security buster/updates main\n\
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib\n\
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib\n\
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib' > /etc/apt/sources.list
RUN apt-get update
# gd库
RUN apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd
# pdo
RUN apt-get update && docker-php-ext-install pdo_mysql
# yaf
RUN pecl install yaf && docker-php-ext-enable yaf
# redis 
RUN pecl install redis && docker-php-ext-enable redis
# apcu 
RUN pecl install apcu && docker-php-ext-enable apcu
# pcntl
RUN docker-php-ext-install pcntl
# 生产环境 dev 要改成  product
RUN echo '[yaf]\n\
yaf.environ="dev"\n\
yaf.use_namespace=On\n\
yaf.use_spl_autoload=1' >> /usr/local/etc/php/conf.d/docker-php-ext-yaf.ini

docker build -t sm:php74_v2 .

交互式进入容器
sudo docker run -it -v /home/vagrant:/home/vagrant sm:php74_v2 /bin/bash

启动php-fpm

docker run --name php74 -d -p 9000:9000 -v /home/vagrant:/home/vagrant sm:php74_v2 /usr/local/sbin/php-fpm

修改 nginx 端口指向

function php74(){
tty=
tty -s && tty=--tty
sudo docker run
$tty
--interactive
--rm
--volume $PWD:/home/vagrant
--workdir /home/vagrant
sm:php74_v2 php "$@"
}

更改全局composer源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

php composer.phar -vvv --ignore-platform-reqs install

问题 php:7.4.6-fpm-buster 镜像缺少 pcntl、git

  1. Dockerfile 中添加 docker-php-ext-install pcntl
  2. 从源码编译

sudo docker history php:7.4.6-fpm-buster --no-trunc --format "{{.CreatedBy}}"
得知源码地址 https://www.php.net/distributions/php-7.4.6.tar.gz

cd /path/to/php-source-code/ext/pcntl
phpize
./configure --enable-pcntl --with-php-config=/path/to/php-config
make && make install
php.ini 中 引入 extension=pcntl.so