Docker 本地镜像管理
-
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 docs
-
登陆/退出 命令
-
登陆到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 容器操作
-
列出容器
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
容器rootfs命令
-
从容器创建一个新的镜像
# -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
mysql redis php nginx 分别安装
目录
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 Dockerfile自动化 MAC下安装 执行目录为dnmp best
目录
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
Redis Dockerfile
- 下载redis的配置文件
curl http://download.redis.io/redis-stable/redis.conf > $PWD/redis/conf/redis.conf
- 编写Dockerfile文件
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
Mysql Dockerfile
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
my.cnf
[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
Nginx Dockerfile
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
nginx.conf
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;
}
localhost.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;
}
}
www.test.com.conf
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;
}
}
Php Dockerfile
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
docker-compose.yml
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 # 停止并删除容器,网络,图像和挂载卷