Docker 列出本地镜像php
docker images #列出全部镜像,包含中间层镜像 -a 列出本地全部的镜像(含中间映像层,默认状况下,过滤掉中间映像层) docker images -a # Docker 查看虚悬镜像列表 -f 显示知足条件的镜像 docker images -f dangling=true
field | 释意 |
---|---|
REPOSITORY | 表示镜像的仓库源 |
TAG | 镜像的标签 |
IMAGE ID | 镜像ID |
CREATED | 镜像建立时间 |
SIZE | 镜像大小 |
虚悬镜像html
这个镜像本来是有镜像名和标签的,原来为 mongo:3.2 ,随着官方镜像维护,发 布了新版本后,从新 docker pull mongo:3.2 时, mongo:3.2 这个镜像名被 转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 。除了 docker pull 可能致使这种状况, docker build 也一样可 以致使这种现象。因为新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签 均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image)mysql
删除本地一个或多少镜像linux
docker rmi 镜像ID # -f 强制删除 docker rmi -f 镜像ID #删除所有 docker rmi `docker images ‐q` #删除全部虚悬镜像 docker rmi $(docker images -q -f dangling=true)
标记本地镜像,将其纳入某一仓库nginx
docker tag ubuntu:15.10 runoob/ubuntu:v3
使用 Dockerfile 建立镜像c++
Dockerfile 构建git
vi Dockerfile # Base images 基础镜像 FROM centos #MAINTAINER 维护者信息 MAINTAINER test #ENV 设置环境变量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在当前目录下,拷过去会自动解压 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ #RUN 执行如下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www #WORKDIR 至关于cd WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install # RUN echo "daemon off;" >> /etc/nginx.conf #EXPOSE 映射端口 EXPOSE 80 #CMD 运行如下命令 CMD ["nginx"]
注github
CMD ["./sbin/nginx","-g","daemon off;"]
/sbin/nginx
启动nginx服务;
-g
: 设置配置文件外的全局指令,也就是启动nginx时设置了daemon off
参数,
守护进程是指脱离终端而且在后台运行的进程。这里设置为off,也就是不让它在后台运行。为何咱们启动nginx容器时不让它在后台运行呢,docker 容器默认会把容器内部第一个进程,也就是pid=1
的程序做为docker容器是否正在运行的依据,若是docker 容器pid挂了,那么docker容器便会直接退出。redis
构建镜像sql
#指定本地文件构建 docker build -t test/lnmp:1.0 -f ./test/Dockerfile .
field | 释意 |
---|---|
-t | 构建后的镜像名称 |
-f | 指定Dockerfiile文件位置 |
. | docker引擎镜像构建过程当中的上下文环境的目录 |
#使用URL构建 docker build github.com/creack/docker-firefox
将指定镜像保存成 tar 归档文件
# -o 输出到的文件 docker save -o test.tar test/ubuntu:v1
导入使用 docker save 命令导出的镜像
# -i 指定导入的文件 docker load -i test.tar
从归档文件中建立镜像
docker import test.tar test/ubuntu:v2
查看指定镜像的建立历史
ocker history test/ubuntu:v2
登录到Docker Hub
docker login -u 用户名 -p 密码
退出Docker Hub
docker logout
从镜像仓库中拉取或者更新指定镜像
docker pull ubuntu:18.04
将本地的镜像上传到镜像仓库,要先登录到镜像仓库
docker push test/ubuntu:v2
从Docker Hub查找
# -s 列出收藏数不小于10的镜像 docker search -s 10 nginx
field | 释意 |
---|---|
NAME | 镜像仓库源的名称 |
DESCRIPTION | 镜像的描述 |
OFFICIAL | 是否docker官方发布 |
列出容器
docker ps #列出全部容器 docker ps -a
field | 释意 |
---|---|
CONTAINER ID | 表示容器 ID |
IMAGE | 表示运行的镜像,镜像和容器的关系,就像是面向对象程序设计中类和实例同样,镜像是静态的定义,容器是运行时的实体 |
COMMAND | 表示表示容器启动后运行的命令 注意pid=1进程是docker容器是否正在运行的依据 |
CREATED | 表示运行的时间 |
STATUS | created(已建立)restarting(重启中)running(运行中)removing(迁移中)paused(暂停)exited(中止)dead(死亡) |
PORTS | 表示能够经过指定的端口号来访问 |
NAMES | 表示对镜像容器的描述 |
获取容器/镜像的元数据
docker inspect test/ubuntu:v2 //获取指定容器的ip docker inspect --format '{{ .NetworkSettings.IPAddress }}' 68f0d84be6ad //获取全部容器ip docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
查看容器中运行的进程信息,支持 ps 命令参数。
docker top 容器ID #查看全部运行容器的进程信息 for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
将文件系统做为一个tar归档文件导出到STDOUT。
# 将id为a404c6c174a2的容器按日期保存为tar文件 -o 将输入内容写到文件 docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
获取容器的日志
# 跟踪查看id为a404c6c174a2的容器的日志输出 -f 跟踪日志输出 docker logs -f a404c6c174a2 #查看容器id为a404c6c174a2的容器从2019年10月30往后的最新10条日志 docker logs --since="2019-10-30" --tail=10 a404c6c174a2
列出指定的容器的端口映射
docker port a404c6c174a2
建立一个新的容器并运行一个命令
# -i 以交互模式运行容器 -t 为容器从新分配一个伪输入终端 --name 为容器指定一个名称 -p 指定端口映射:主机(宿主)端口:容器端口 docker run -it --name mynginx -p 80:8080 nginx:latest /bin/bash # -d 后台运行容器 主机的目录/data 映射到容器的/data docker run -d --name mynginx -p 80:8080 -v /data:/data nginx:latest /bin/bash
field | 释意 |
---|---|
-a stdin | 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项 |
-d | 后台运行容器,并返回容器ID |
-i | 以交互模式运行容器,一般与 -t 同时使用 |
-P | 随机端口映射,容器内部端口随机映射到主机的高端口 |
-p | 指定端口映射,格式为:主机(宿主)端口:容器端口 |
-t | 为容器从新分配一个伪输入终端,一般与 -i 同时使用 |
--name mynginx | 为容器指定一个名称 |
--dns 8.8.8.8 | 指定容器使用的DNS服务器,默认和宿主一致 |
--dns-search example.com | 指定容器DNS搜索域名,默认和宿主一致 |
-h "mars" | 指定容器的hostname |
-e MYSQL_ROOT_PASSWORD=123456 | 设置环境变量 |
--env-file=[] | 从指定文件读入环境变量 |
--cpuset="0-2" or --cpuset="0,1,2" | 绑定容器到指定CPU运行 |
-m | 设置容器使用内存最大值 |
--net="bridge" | 指定容器的网络链接类型; host模式 容器内看到的网卡ip是宿主机上的ip;container模式 多个容器使用共同的网络看到的ip是同样的与宿主机不一样;none模式 这种模式下不会配置任何网络;bridge模式 宿主机上的全部容器会在同一个网段下,相互之间是能够通讯的 |
--link=[] | 能够用来连接2个容器,使得源容器(被连接的容器)和接收容器(主动去连接的容器)之间能够互相通讯,解除了容器之间通讯对容器IP的依赖 |
--expose=[] | 开放一个端口或一组端口 |
--volume , -v | 绑定一个卷 |
/bin/bash | 这将在容器内启动bash shell |
--privileged=true | 给容器特权,在挂载目录后容器能够访问目录如下的文件或者目录 |
建立一个新的容器但不启动它 用法同 docker run
docker create --name mynginx nginx:latest
启动/中止/重启
#启动已被中止的容器mynginx docker start mynginx #中止运行中的容器mynginx docker stop mynginx #重启容器mynginx docker restart mynginx
暂停/恢复 容器中全部的进程
#暂停数据库容器db01提供服务 docker pause db01 #恢复数据库容器db01提供服务 docker unpause db01
在运行的容器中执行命令
#在容器 mynginx 中开启一个交互模式的终端 docker exec -it mynginx /bin/bash #在容器 mynginx 中以交互模式执行容器内 /root/start.sh 脚本 docker exec -it mynginx /bin/sh /root/test.sh
杀掉一个运行中的容器
# -s 向容器发送一个信号 docker kill -s KILL mynginx
删除一个或多少容器
# 强制删除容器db0一、db02 -f 经过SIGKILL信号强制删除一个运行中的容器 docker rm -f db01 db02 # 移除容器nginx01对容器db01的链接,链接名db docker rm -l db # 删除容器nginx01,并删除容器挂载的数据卷 docker rm -v nginx01
从容器建立一个新的镜像
# -a 提交的镜像做者;-m 提交时的说明文字;-c 使用Dockerfile指令来建立镜像;-p 在commit时,将容器暂停。 docker commit -a "youname" -m "test" a404c6c174a2 mynginx:v1
容器与主机之间的数据拷贝
# 将主机/www/test /www目录下 docker cp /www/test 96f7f14e99ab:/www/ # 将主机/www/test目录拷贝到容器96f7f14e99ab中,目录重命名为www docker cp /www/test 96f7f14e99ab:/www # 将容器96f7f14e99ab的/www目录拷贝到主机的/test目录中 docker cp 96f7f14e99ab:/www /root/test/
检查容器里文件结构的更改
docker diff mynginx
目录 dnmp 根目录执行docker run reids data conf redis.conf mysql data conf.d my.cnf php www php php.ini nginx conf.d nginx.conf logs mysql php-fpm
Docker 安装redis
#使用 docker search 命令搜索存放在 Docker Hub 中的镜像 docker search redis #选定须要pull到系统中的官方 redis 镜像 docker pull redis:4.0 #启动容器 docker run \ # 端口映射 宿主机:容器 -p 6379:6379 \ # 映射数据目录 rw 为读写 -v $PWD/redis/data:/data:rw \ # 挂载配置文件 ro 为readonly -v $PWD/redis/conf/redis.conf:/etc/redis/redis.conf:ro \ # 给与一些权限 --privileged=true \ # 给容器起个名字 --name myredis \ # deamon 运行 服务使用指定的配置文件 -d redis:4.0 redis-server /etc/redis/redis.conf
Docker 安装mysql
#使用 docker search 命令搜索存放在 Docker Hub 中的镜像 docker search mysql #选定须要pull到系统中的官方 mysql 镜像 docker pull mysql:5.7 #启动容器 docker run \ --name mydb \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v $PWD/mysql/data:/var/lib/mysql:rw \ -v $PWD/logs/mysql:/var/lib/mysql-logs:rw \ -v $PWD/mysql/conf.d:/etc/mysql/conf.d:ro \ -d mysql:5.7
Docker 安装php
#使用 docker search 命令搜索存放在 Docker Hub 中的镜像 docker search php #选定须要pull到系统中的官方 php 镜像 docker pull php:7.2-fpm #启动容器 docker run \ -d -p 9000:9000 \ --name myphp \ -v $PWD/php/www:/var/www/html:rw \ -v $PWD/php/php/php.ini:/usr/local/etc/php/php.ini:ro \ # 报错,先把php-fpm.conf文件复制过来,否则报错 -v $PWD/php/php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro \ -v $PWD/logs/php-fpm:/var/log/php-fpm:rw \ --link mydb:mydb \ --link myredis:myredis \ --privileged=true \ php:7.2-fpm # redis 扩展没有安装 要下载安装并php.ini中添加配置 # 扩展安装 docker exec -it myphp /bin/bash apt-get update && apt-get install -y \ git \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install opcache \ && docker-php-ext-install mysqli \ && rm -r /var/lib/apt/lists/*
Docker 安装nginx
#使用 docker search 命令搜索存放在 Docker Hub 中的镜像 docker search nginx #选定须要pull到系统中的官方 nginx 镜像 docker pull nginx #启动容器 docker run \ --name mynginx \ -d -p 80:80 \ -v $PWD/php/www:/usr/share/nginx/html:ro \ -v $PWD/nginx/conf.d:/etc/nginx/conf.d:ro \ -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ -v $PWD/logs/nginx:/var/log/nginx \ --link myphp:myphp \ -d nginx # 配置nginx dump -> nginx -> conf.d server { listen 80 default; index index.html index.htm; server_name localhost docker; root /var/www/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass myphp:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; } }
目录 dnmp data mysql redis logs mysql nginx php services mysql my.cnf Dockerfile nginx conf.d localhost.conf www.test.com.conf Dockerfile nginx.conf php Dockerfile php.ini php-fpm.conf redis Dockerfile redis.conf www localhost index.php www.test.com index.php docker-compose.yml
curl http://download.redis.io/redis-stable/redis.conf > $PWD/redis/conf/redis.conf
FROM redis:4.0 MAINTAINER you "you@qq.com" ENV TIME_ZOME=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone
FROM mysql:5.7 MAINTAINER you "you@qq.com" ENV TIME_ZOME=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone
[client] port = 3306 default-character-set = utf8mb4 [mysqld] user = mysql port = 3306 sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES default-storage-engine = InnoDB default-authentication-plugin = mysql_native_password character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4' disable-log-bin skip-character-set-client-handshake explicit_defaults_for_timestamp slow_query_log long_query_time = 3 slow-query-log-file = /var/lib/mysql/mysql.slow.log log-error = /var/lib/mysql/mysql.error.log default-time-zone = '+8:00' [mysql] default-character-set = utf8mb4
FROM nginx:1.12 MAINTAINER you "you@qq.com" ENV TIME_ZOME=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone WORKDIR /www
user nginx; worker_processes 1; pid /var/run/nginx.pid; error_log /var/log/nginx/nginx.error.log warn; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /dev/null; #access_log /var/log/dnmp/nginx.access.log main; # hide verson string server_tokens off; sendfile on; #tcp_nopush on; client_max_body_size 100M; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
server { listen 80 default; server_name localhost; root /var/www/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/localhost/$fastcgi_script_name; } }
server { listen 80; server_name www.test.com; root /var/www/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/test/$fastcgi_script_name; } }
FROM php:7.2-fpm MAINTAINER you "you@qq.com" # 设置时区 ENV TIME_ZOME=Asia/Shanghai ENV COMPOSER_HOME=/tmp/composer RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone && \ export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" && \ apt-get update && apt-get install -y --no-install-recommends \ libbz2-dev \ libenchant-dev \ libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ libgmp-dev \ libxml2-dev libtidy-dev libxslt1-dev \ libzip-dev \ libsnmp-dev \ libpq-dev \ libpspell-dev \ librecode-dev \ firebird-dev \ freetds-dev \ libldap2-dev \ libc-client-dev libkrb5-dev \ firebird-dev \ libicu-dev \ libmcrypt-dev \ libmagickwand-dev \ zlib1g-dev libmemcached-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm && \ docker-php-ext-install -j$(nproc) bz2 && \ docker-php-ext-install -j$(nproc) enchant && \ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j$(nproc) gd && \ docker-php-ext-install -j$(nproc) gmp && \ docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl && \ docker-php-ext-install -j$(nproc) zip && \ docker-php-ext-install -j$(nproc) snmp && \ docker-php-ext-install -j$(nproc) pgsql pdo_pgsql && \ docker-php-ext-install -j$(nproc) pspell && \ docker-php-ext-install -j$(nproc) recode && \ docker-php-ext-install -j$(nproc) pdo_firebird && \ docker-php-ext-configure pdo_dblib --with-libdir=lib/x86_64-linux-gnu && docker-php-ext-install -j$(nproc) pdo_dblib && \ docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu && docker-php-ext-install -j$(nproc) ldap && \ docker-php-ext-configure imap --with-kerberos --with-imap-ssl && docker-php-ext-install -j$(nproc) imap && \ docker-php-ext-install -j$(nproc) interbase && \ docker-php-ext-install -j$(nproc) intl && \ pecl install mcrypt-1.0.1 && docker-php-ext-enable mcrypt && \ pecl install imagick-3.4.3 && docker-php-ext-enable imagick && \ pecl install memcached && docker-php-ext-enable memcached && \ pecl install redis-4.0.1 && docker-php-ext-enable redis && \ docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache && \ curl -o /usr/bin/composer https://mirrors.aliyun.com/composer/composer.phar && chmod +x /usr/bin/composer && \ usermod -u 1000 www-data && groupmod -g 1000 www-data WORKDIR /www
# bz2 扩展的安装, 读写 bzip2(.bz2)压缩文件 apt-get update && \ apt-get install -y --no-install-recommends libbz2-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) bz2 # enchant 扩展的安装, 拼写检查库 apt-get update && \ apt-get install -y --no-install-recommends libenchant-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) enchant # gd 扩展的安装. 图像处理 apt-get update && \ apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ docker-php-ext-install -j$(nproc) gd # gmp 扩展的安装, GMP apt-get update && \ apt-get install -y --no-install-recommends libgmp-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) gmp # soap wddx xmlrpc tidy xsl 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libxml2-dev libtidy-dev libxslt1-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl # zip 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libzip-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) zip # snmp 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libsnmp-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) snmp # pgsql, pdo_pgsql 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libpq-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) pgsql pdo_pgsql # pspell 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libpspell-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) pspell # recode 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends librecode-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) recode # pdo_firebird 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends firebird-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) pdo_firebird # pdo_dblib 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends freetds-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-configure pdo_dblib --with-libdir=lib/x86_64-linux-gnu && \ docker-php-ext-install -j$(nproc) pdo_dblib # ldap 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libldap2-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu && \ docker-php-ext-install -j$(nproc) ldap # imap 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libc-client-dev libkrb5-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \ docker-php-ext-install -j$(nproc) imap # interbase 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends firebird-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) interbase # intl 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libicu-dev && \ rm -r /var/lib/apt/lists/* && \ docker-php-ext-install -j$(nproc) intl # mcrypt 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends libmcrypt-dev && \ rm -r /var/lib/apt/lists/* && \ pecl install mcrypt-1.0.1 && \ docker-php-ext-enable mcrypt # imagick 扩展的安装 export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" && \ apt-get update && \ apt-get install -y --no-install-recommends libmagickwand-dev && \ rm -rf /var/lib/apt/lists/* && \ pecl install imagick-3.4.3 && \ docker-php-ext-enable imagick # memcached 扩展的安装 apt-get update && \ apt-get install -y --no-install-recommends zlib1g-dev libmemcached-dev && \ rm -r /var/lib/apt/lists/* && \ pecl install memcached && \ docker-php-ext-enable memcached # redis 扩展的安装 pecl install redis-4.0.1 && docker-php-ext-enable redis # opcache 扩展的安装 docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
version: '3' services: php: build: ./services/php container_name: php ports: - "9000:9000" links: - mysql:mysql - redis:redis volumes: - ./www:/var/www/html:rw - ./services/php/php.ini:/usr/local/etc/php/php.ini:ro - ./services/php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ./logs/php:/var/log/php-fpm:rw restart: always command: php-fpm nginx: build: ./services/nginx container_name: nginx volumes: - ./www:/usr/share/nginx/html:rw - ./services/nginx/conf.d:/etc/nginx/conf.d:ro - ./services/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./logs/nginx:/var/log/nginx ports: - "80:80" - "443:443" links: - php:php restart: always command: nginx -g 'daemon off;' mysql: build: ./services/mysql container_name: mysql ports: - "3306:3306" volumes: - ./data/mysql:/var/lib/mysql:rw - ./logs/mysql:/var/lib/mysql-logs:rw - ./services/mysql/my.cnf:/etc/mysql/my.cnf:ro environment: MYSQL_ROOT_PASSWORD: 123456 restart: always command: "--character-set-server=utf8mb4" redis: build: ./services/redis container_name: redis ports: - "6379:6379" volumes: - ./data/redis:/data - ./services/redis/redis.conf:/usr/local/etc/redis/redis.conf restart: always
docker-compose up # 建立而且启动全部容器 docker-compose up -d # 建立而且后台运行方式启动全部容器 docker-compose up nginx php mysql # 建立而且启动nginx、php、mysql的多个容器 docker-compose up -d nginx php mysql # 建立而且已后台运行的方式启动nginx、php、mysql容器 docker-compose start php # 启动服务 docker-compose stop php # 中止服务 docker-compose restart php # 重启服务 docker-compose build php # 构建或者从新构建服务 docker-compose rm php # 删除而且中止php容器 docker-compose down # 中止并删除容器,网络,图像和挂载卷