docker & docker-compose安装与使用

本文记录docker及docker-compose的安装及使用

官方文档: https://docs.docker.com/get-started/

1.安装docker

参考文档: https://help.aliyun.com/document_detail/60742.html?spm=a2c4g.11186623.6.548.a7121e66mRh5sD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# step 1:Docker 要求 CentOS 系统的内核版本高于 3.10(3.10.0-862.11.6.el7.x86_64)
sudo uname -r
# step 2: 移除旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
# Step 3: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 4: 更新yum缓存并安装Docker-CE
sudo yum makecache fast
# step 5: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# step 6: 安装docker
sudo yum -y install docker-ce
# Step 7: 开启Docker服务
sudo systemctl start docker 或 sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ee.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

2.安装检验,简单运行

安装校验

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
 Experimental: false

//测试运行
sudo docker run hello-world

3.阿里加速镜像

参考文档: https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#进入阿里云控制台->容器镜像服务控制台->镜像加速器配置加速地址

#配置镜像加速器
#针对Docker客户端版本大于 1.10.0 的用户
#您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://s9tk92p0.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4.删除 Docker CE

参考文档: https://www.runoob.com/docker/centos-docker-install.html

1
2
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker

5.常用命令

1).docker信息

1
2
3
4
5
6
7
# List Docker CLI commands
docker
docker container --help
# 查看版本&详情
docker --version
docker version
docker info

2).镜像信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 列出镜像列表
docker images
docker image ls
docker image ls -a # List all images on this machine
# 删除镜像
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
# 获取一个新的镜像
docker pull {$docker_name}:{$docker_tag}
# 查找镜像
docker search {$docker_name}
# 创建镜像
docker build -t 镜像名称 --tag=标签名称 {$Dockerfile 的绝对路径}
# 更新镜像
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
# 运行镜像
docker run {$docker_name}
docker run -p 4000:80 {$docker_name}
# 登录云端
docker login # Log in this CLI session using your Docker credentials
# 标记image
docker tag image username/repository:tag
# 上传云仓库
docker push username/repository:tag
# 运行云仓库
docker run --name 容器名称 -p 4000:80 username/repository:tag

3).容器信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 查看容器列表 (running, all, all in quiet mode)
docker container ls
docker container ls -a
docker container ls -all
docker container ls --all
docker container ls -aq

# 运行容器
docker run --privileged=true \
-p 6379:6379 \
-v /data/LPAPP/docker_redis_6379/data:/data \
-v /data/LPAPP/docker_redis_6379/etc:/etc/redis \
-v /data/LPAPP/docker_redis_6379/log:/var/log/redis \
--network mybridge \
--name redis_6379 \
-itd redis redis-server /etc/redis/redis.conf

#配置说明
-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
-v /data/LPAPP/docker_redis_6379/data:/data:把宿主机配置好的redis.conf放到容器内的这个位置中
-v /root/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
redis-server /etc/redis/redis.conf -p 6379:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动,并且端口为630
--privileged=true 增加权限,解决权限不够,导致执行后docker ps 查不到redis
--network 指定网络

# 容器停止
docker container stop <hash> # Gracefully stop the specified container
docker container kill <hash> # Force shutdown of the specified container
# 容器删除
docker container rm <hash> # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
# 进入容器内操作
docker exec -it content-name-or-id /bin/bash

# 查看运行中的容器
docker ps
docker ps -a
# 查看进程
docker top
# 重启WEB应用容器
docker start <Container NAME or ID>
# 停止 WEB 应用容器
docker stop <Container NAME or ID>
# 移除WEB应用容器
docker rm wizardly_chandrasekhar

#给运行中的容器增加端口映射
docker ps -a => 40319ca66428
docker port 40319ca66428 => 
docker inspect 40319ca66428|grep Id => 40319ca66428037fc9bf0c5f604e462388ab6f0105dc9867a811bbb421888b9f
docker stop 40319ca66428
systemctl stop docker.socket
systemctl stop docker
进到/var/lib/docker/containers 目录下找到与 Id 相同的目录,修改 hostconfig.json 和 config.v2.json文件
cd /var/lib/docker/containers/40319ca66428037fc9bf0c5f604e462388ab6f0105dc9867a811bbb421888b9f
修改hostconfig.json如下,添加端口绑定"9502/tcp": [{"HostIp""","HostPort""9502"}],表示绑定端口9502
修改config.v2.json在ExposedPorts中加上要暴露的端口"9502/tcp":{},即9002
systemctl start docker
docker start 40319ca66428
netstat -an |grep 9502
docker port 40319ca66428 => 
ps -ef |grep 9602 =>

4).bridge网络

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#查看默认命令
docker network
#显示默认命令
Commands:
    connect     Connect a container to a network
    create      Create a network
    disconnect  Disconnect a container from a network
    inspect     Display detailed information on one or more networks
    ls          List networks
    prune       Remove all unused networks
    rm          Remove one or more networks
    
Create a network
Options:
      --attachable          Enable manual container attachment
      --aux-addressmap     Auxiliary IPv4 or IPv6 addresses used by
                             Network driver (default map[])
      --config-fromstring   The network from which copying the configuration
      --config-only        Create a configuration only network
  -d, --driverstring       Driver to manage the Network (default "bridge")
      --gatewaystrings     IPv4 or IPv6 Gateway forthe master subnet
      --ingress            Create swarm routing-mesh network
      --internal            Restrict external access to the network
      --ip-rangestrings     Allocate container ip from a sub-range
      --ipam-driverstring   IP Address Management Driver (default "default")
      --ipam-optmap         Set IPAM driver specific options (default map[])
      --ipv6                Enable IPv6 networking
      --labellist           Set metadata on a network
  -o, --optmap             Set driver specific options (default map[])
      --scopestring         Control the network's scope
      --subnetstrings       Subnet inCIDR format that represents a



#查看现在的网络
docker network ls
#显示默认网络
68c135591e54        bridge              bridge              local
0a8e99ac21b7        host                host                local
e1b4087d1d32        none                null                local

#创建自己的bridge
docker network create --driver bridge <网络名称> --subnet=172.18.0.0/24 net1
--subnet是定义网段
创建容器指定共享网络,ip,和别名

#创建容器并且指定bridge
docker run --network <网络名称> 
docker run --network container:<容器名称>

#将服务添加到自己的新建的网络里面
docker network connect <网络名称> <容器名称>
#将服务退出新建网络
docker network disconnect <网络名称> <容器名称>

6.Docker Compose

1).安装

  • 直接下载二进制文件(推荐)

    安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限

    1
    2
    
    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  • pip安装

    • a.安装python-pip

      1
      2
      
      yum -y install epel-release
      yum -y install python-pip
      
    • b.安装docker-compose

      1
      
      pip install docker-compose
      
    • c.报错(Cannot uninstall ‘requests’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.),解决办法

      1
      
      pip install docker-compose --ignore-installed requests
      

2).查看安装是否成功

1
2
docker-compose -v
docker-compose version

3).卸载

1
2
rm /usr/local/bin/docker-compose # 使用curl安装的
pip uninstall docker-compose # 使用pip卸载

4).常见命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ps:列出所有运行容器
docker-compose ps
logs:查看服务日志输出
docker-compose logs
port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
docker-compose port eureka 8761
build:构建或者重新构建服务
docker-compose build
start:启动指定服务已存在的容器
docker-compose start eureka
stop:停止已运行的服务的容器
docker-compose stop eureka
rm:删除指定服务的容器
docker-compose rm eureka
up:构建、启动容器
docker-compose up
-d 后台运行
docker-compose up -d eureka
kill:通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill eureka
pull:下载服务镜像
scale:设置指定服务运气容器的个数,以 service=num 形式指定
docker-compose scale user=3 movie=3
run:在一个服务上执行一个命令
docker-compose run web bash

5).docker-compose.yml

7.安装composer

1.容器外安装

1). 确定composer缓存的路径。

比如,我的dnmp下载在~/dnmp目录,那composer的缓存路径就是~/dnmp/data/composer。

2). 参考bash.alias.sample示例文件,将对应 php composer 函数拷贝到主机的 ~/.bashrc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
composer () {
    tty=
    tty -s && tty=--tty
    docker run \
        $tty \
        --interactive \
        --rm \
        --user www-data:www-data \
        --volume ~/dnmp/data/composer:/tmp/composer \
        --volume $(pwd):/app \
        --workdir /app \
        dnmp_php composer "$@"
}

3). 让文件起效:

1
source ~/.bashrc

4). 在主机的任何目录下就能用composer了:

1
2
cd ~/dnmp/www/
composer create-project yeszao/fastphp project --no-dev

2.容器内安装

1
2
3
4
5
6
7
8
# 镜像容器运行后,在容器内安装 Composer
wget https://github.com/composer/composer/releases/download/1.8.6/composer.phar
chmod u+x composer.phar
mv composer.phar /usr/local/bin/composer
# 将 Composer 镜像设置为阿里云镜像,加速国内下载速度
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
# 通过 Composer 安装 hyperf 项目
composer create-project hyperf/hyperf-skeleton test --prefer-dist

8.如何清理您的Docker数据

1). 使用情况统计信息

1
2
3
4
5
6
$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE  
Images          25        13        9.467GB   4.368GB (46%)
Containers      13        8         235MB     19.47MB (8%) 
Local Volumes   14        2         6.45GB    5.869GB (90%)
Build Cache     0         0         0B        0B

2). 定期修剪

为了安全地删除已停止的容器,未使用的网络和悬挂的图像,最好每隔一段时间运行以下命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
5096cc97946c148450214a4330e35a67035289ecacc2806e9f693a0d46ebe75e

3). 全面清理启动

可以使用单个命令擦除每个未使用的容器,图像,卷和网络

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ docker system prune -a --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Volumes:
d8827bb292a529057fc972acb982a6f13b6608ed10132b9e9a689959cafec30e
...
Deleted Images:
untagged: dnmp_php72:latest
deleted: sha256:1b29834e4f9054d78a0d5e91e114e40b865ad8ddce06a3c7ba3703f9911775e6

Total reclaimed space: 12.71GB

4). 使用情况

img

9.Docker samba(文件夹共享)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#开启139、445
firewall-cmd --add-port=139/tcp --permanent
firewall-cmd --add-port=445/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
#官方镜像
https://hub.docker.com/r/dperson/samba/
# 运行
docker run -it -p 139:139 -p 445:445  --name samba  \
 -v /data/website:/mount \
 -d dperson/samba \
 -u "root;root" \
 -s "root;/mount/;yes;no;yes;all;all;all" \
 -w "WORKGROUP" \
 -g "force user= root" \
 -g "guest account= root"

#注意: -u "用户名:密码"

#映射网络驱动器
此计算机->右击->映射网络驱动器
\\ip\root

10.搭建dnmp开发环境(php开发环境)

docker搭建lnmp环境,php 7.2 + nginx latest + mysql 5.7 + redis 4
默认已经安装了 docker 和 docker-compose
已使用阿里云镜像加速器

1).克隆基础包

1
2
git clone https://github.com/chichoyi/dnmp.git
git clone https://gitee.com/dysoso/dnmp.git

2).修改docker-compose.yml

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
version: "3"
services:
  nginx:
    build:
      context: ./services/nginx
      args:
        NGINX_VERSION: nginx:${NGINX_VERSION}
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS}
    container_name: nginx
    ports:
      - "${NGINX_HTTP_HOST_PORT}:80"
      - "${NGINX_HTTPS_HOST_PORT}:443"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_FASTCGI_PHP_CONF}:/etc/nginx/fastcgi-php.conf:ro
      - ${NGINX_FASTCGI_PARAMS}:/etc/nginx/fastcgi_params:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    environment:
      TZ: "$TZ"
    restart: always
    networks:
      - default

  php:
    build:
      context: ./services/php
      args:
        PHP_VERSION: php:${PHP_VERSION}-fpm-alpine
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        PHP_EXTENSIONS: ${PHP_EXTENSIONS}
        TZ: "$TZ"
    container_name: php
    expose:
      - 9501
    extra_hosts:
      - "www.site1.com:172.17.0.1"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
      - ${PHP_LOG_DIR}:/var/log/php
      - ${DATA_DIR}/composer:/tmp/composer
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default

#  php56:
#    build:
#      context: ./services/php
#      args:
#        PHP_VERSION: php:${PHP56_VERSION}-fpm-alpine
#        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#        PHP_EXTENSIONS: ${PHP56_EXTENSIONS}
#        TZ: "$TZ"
#    container_name: php56
#    expose:
#      - 9501
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#      - ${PHP56_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
#      - ${PHP56_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
#      - ${PHP56_LOG_DIR}:/var/log/php
#      - ${DATA_DIR}/composer:/tmp/composer
#    restart: always
#    cap_add:
#      - SYS_PTRACE
#    networks:
#      - default

#  php54:
#    build:
#      context: ./services/php54
#      args:
#        PHP_VERSION: php:${PHP54_VERSION}-fpm
#        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
#        PHP_EXTENSIONS: ${PHP54_EXTENSIONS}
#        TZ: "$TZ"
#    container_name: php54
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#      - ${PHP54_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
#      - ${PHP54_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
#      - ${PHP54_LOG_DIR}:/var/log/php
#      - ${DATA_DIR}/composer:/tmp/composer
#    restart: always
#    cap_add:
#      - SYS_PTRACE
#    networks:
#      - default

  mysql:
    image: mysql:${MYSQL_VERSION}
    container_name: mysql
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${DATA_DIR}/mysql:/var/lib/mysql/:rw
    restart: always
    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      TZ: "$TZ"

#  mysql5:
#    image: mysql:${MYSQL5_VERSION}
#    container_name: mysql5
#    ports:
#      - "${MYSQL5_HOST_PORT}:3306"
#    volumes:
#      - ${MYSQL5_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
#      - ${DATA_DIR}/mysql5:/var/lib/mysql/:rw
#    restart: always
#    networks:
#      - default
#    environment:
#      MYSQL_ROOT_PASSWORD: "${MYSQL5_ROOT_PASSWORD}"
#      TZ: "$TZ"

#  openresty:
#    image:  openresty/openresty:${OPENRESTY_VERSION}
#    container_name: openresty
#    ports:
#       - "${OPENRESTY_HTTP_HOST_PORT}:80"
#       - "${OPENRESTY_HTTPS_HOST_PORT}:443"
#    volumes:
#       - ${SOURCE_DIR}:/www/:rw
#       - ${OPENRESTY_CONFD_DIR}:/etc/nginx/conf.d/:ro
#       - ${OPENRESTY_SSL_CERTIFICATE_DIR}:/ssl:rw
#       - ${OPENRESTY_CONF_FILE}:/usr/local/openresty/nginx/conf/nginx.conf:ro
#       - ${OPENRESTY_FASTCGI_PHP_CONF}:/usr/local/openresty/nginx/conf/fastcgi-php.conf:ro
#       - ${OPENRESTY_CONF_FASTCGIPARAMS_FILE}:/usr/local/openresty/nginx/conf/fastcgi_params:ro
#       - ${OPENRESTY_LOG_DIR}:/var/log/nginx/:rw
#    environment:
#      TZ: "$TZ"
#    networks:
#      - default

  redis:
    image: redis:${REDIS_VERSION}
    container_name: redis
    ports:
      - "${REDIS_HOST_PORT}:6379"
    volumes:
      - ${REDIS_CONF_FILE}:/etc/redis.conf:ro
      - ${DATA_DIR}/redis:/data/:rw
    restart: always
    entrypoint: ["redis-server", "/etc/redis.conf"]
    environment:
      TZ: "$TZ"
    networks:
      - default

#  memcached:
#    image: memcached:${MEMCACHED_VERSION}
#    container_name: memcached
#    ports:
#      - "${MEMCACHED_HOST_PORT}:11211"
#    environment:
#       MEMCACHED_CACHE_SIZE: "${MEMCACHED_CACHE_SIZE}"
#    networks:
#      - default

#  rabbitmq:
#    image: rabbitmq:${RABBITMQ_VERSION}
#    container_name: rabbitmq
#    restart: always
#    ports:
#      - "${RABBITMQ_HOST_PORT_C}:5672"
#      - "${RABBITMQ_HOST_PORT_S}:15672"
#    environment:
#       TZ: "$TZ"
#       RABBITMQ_DEFAULT_USER: "${RABBITMQ_DEFAULT_USER}"
#       RABBITMQ_DEFAULT_PASS: "${RABBITMQ_DEFAULT_PASS}"
#    networks:
#          - default

#  phpmyadmin:
#    image: phpmyadmin/phpmyadmin:latest
#    container_name: phpmyadmin
#    ports:
#      - "${PHPMYADMIN_HOST_PORT}:80"
#    volumes:
#      - ${PHPMYADMIN_USER_CONF_FILE}:/etc/phpmyadmin/config.user.inc.php:ro
#      - ${PHPMYADMIN_PHP_CONF_FILE}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini:ro
#    networks:
#      - default
#    environment:
#      - PMA_HOST=mysql
#      - PMA_PORT=3306
#      - TZ=$TZ

#  phpredisadmin:
#    image: erikdubbelboer/phpredisadmin:latest
#    container_name: phpredisadmin
#    ports:
#      - "${REDISMYADMIN_HOST_PORT}:80"
#    networks:
#      - default
#    environment:
#      - REDIS_1_HOST=redis
#      - REDIS_1_PORT=6379
#      - TZ=$TZ

#  mongodb:
#    image: mongo:${MONGODB_VERSION}
#    container_name: mongodb
#    environment:
#        MONGO_INITDB_ROOT_USERNAME: "${MONGODB_INITDB_ROOT_USERNAME}"
#        MONGO_INITDB_ROOT_PASSWORD: "${MONGODB_INITDB_ROOT_PASSWORD}"
#        TZ: "$TZ"
#    volumes:
#      - ${DATA_DIR}/mongo:/data/db:rw
#      - ${DATA_DIR}/mongo_key:/mongo:rw
#    ports:
#       - "${MONGODB_HOST_PORT}:27017"
#    networks:
#       - default
#    command:
#       --auth

#  adminmongo:
#    image: mrvautin/adminmongo
#    container_name: adminmongo
#    ports:
#      - "${ADMINMONGO_HOST_PORT}:1234"
#    environment:
#      - HOST=0.0.0.0
#      - DB_HOST=mongodb
#      - DB_PORT=27017
#    networks:
#      - default

#  elasticsearch:
#    build:
#      context: ./services/elasticsearch
#      args:
#        ELASTICSEARCH_VERSION: ${ELASTICSEARCH_VERSION}
#        ELASTICSEARCH_PLUGINS: ${ELASTICSEARCH_PLUGINS}
#    container_name: elasticsearch
#    environment:
#      - TZ=$TZ
#      - discovery.type=single-node
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#    volumes:
#      - ${DATA_DIR}/esdata:/usr/share/elasticsearch/data
#      - ${ELASTICSEARCH_CONF_FILE}:/usr/share/elasticsearch/config/elasticsearch.yml
#    hostname: elasticsearch
#    restart: always
#    ports:
#      - "${ELASTICSEARCH_HOST_PORT_C}:9200"
#      - "${ELASTICSEARCH_HOST_PORT_S}:9300"

#  kibana:
#    image: kibana:${KIBANA_VERSION}
#    container_name: kibana
#    environment:
#      TZ: "$TZ"
#      elasticsearch.hosts: http://elasticsearch:9200
#      I18N_LOCALE: "${KIBANA_I18N_LOCALE}"
#    hostname: kibana
#    depends_on:
#      - elasticsearch
#    restart: always
#    ports:
#      - "${KIBANA_HOST}:5601"

#  logstash:
#    image: logstash:${LOGSTASH_VERSION}
#    container_name: logstash
#    hostname: logstash
#    restart: always
#    depends_on:
#      - elasticsearch
#    environment:
#      TZ: "$TZ"
#    ports:
#      - "${LOGSTASH_HOST_PORT_C}:9600"
#      - "${LOGSTASH_HOST_PORT_S}:5044"

#  node:
#    image: node:${NODE_VERSION}
#    environment:
#      - NODE_ENV=production
#    volumes:
#      - ${SOURCE_DIR}:/www/:rw
#    expose:
#      - "8081"
#    networks:
#      - default
#    stdin_open: true
#    tty: true


  supervisor:
    build:
      context: ./services/supervisor
      args:
        ALPINE_VERSION: alpine:${ALPINE_VERSION}
        TZ: "$TZ"
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
    container_name: supervisor
    ports:
      - "${SUPERVISOR_HOST_PORT_C}:9001"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${SUPERVISOR_LOG}:/var/log/supervisor/:rw
      - ${SUPERVISOR_CONFIG}:/etc/supervisor/conf.d/:rw
      - ${SUPERVISOR_CONF_FILE}:/etc/supervisor/supervisord.conf:ro
    command:
      - /bin/sh
      - -c
      - |
                supervisord -n -c /etc/supervisor/supervisord.conf
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default

networks:
  default:
1
2
#cd dnmp
#docker-compose up -d

第一次执行需要花点时间下载镜像

4).tips

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 你自己修改了docker-compose文件或Dockerfile文件的话,请执行
docker-compose build
# 开启 dnmp 服务(-d 后台运行)
docker-compose up -d
# 重启 dnmp 服务
docker-compose restart
# 关闭 dnmp 服务
docker-compose down
# 如果修改或增加了 nginx 服务配置
docker restart nginx