Docker 列出本地镜像
docker images
#列出所有镜像,包含中间层镜像 -a 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
docker images -a
# Docker 查看虚悬镜像列表 -f 显示满足条件的镜像
docker images -f dangling=true
field | 释意 |
---|---|
REPOSITORY | 表示镜像的仓库源 |
TAG | 镜像的标签 |
IMAGE ID | 镜像ID |
CREATED | 镜像创建时间 |
SIZE | 镜像大小 |
虚悬镜像
这个镜像原本是有镜像名和标签的,原来为 mongo:3.2 ,随着官方镜像维护,发 布了新版本后,重新 docker pull mongo:3.2 时, mongo:3.2 这个镜像名被 转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 。除了 docker pull 可能导致这种情况, docker build 也同样可 以导致这种现象。由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签 均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image)
删除本地一个或多少镜像
docker rmi 镜像ID
# -f 强制删除
docker rmi -f 镜像ID
#删除全部
docker rmi `docker images ‐q`
#删除所有虚悬镜像
docker rmi $(docker images -q -f dangling=true)
标记本地镜像,将其归入某一仓库
docker tag ubuntu:15.10 runoob/ubuntu:v3
使用 Dockerfile 创建镜像
Dockerfile 构建
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"]
注
CMD ["./sbin/nginx","-g","daemon off;"]
/sbin/nginx
启动nginx服务;
-g
: 设置配置文件外的全局指令,也就是启动nginx时设置了daemon off
参数,
守护进程是指脱离终端并且在后台运行的进程。这里设置为off,也就是不让它在后台运行。为什么我们启动nginx容器时不让它在后台运行呢,docker 容器默认会把容器内部第一个进程,也就是pid=1
的程序作为docker容器是否正在运行的依据,如果docker 容器pid挂了,那么docker容器便会直接退出。
构建镜像
#指定本地文件构建
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
删除一个或多少容器
# 强制删除容器db01、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
Dockerfile
my.cnf
nginx
conf.d
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 # 停止并删除容器,网络,图像和挂载卷
原文:https://www.cnblogs.com/fuqian/p/11814296.html