目录
docker服务的启动
#启动 
systemctl start docker

#守护进程重启
systemctl daemon-reload

#重启docker服务
systemctl restart docker  /  service docker restart

#关闭
docker service docker stop / docker systemctl stop docker
目录结构

.
+--- files
|   +--- docker-compose.yml
|   +--- es
|   |   +--- esdata1
|   +--- golang
|   |   +--- .env_online.conf
|   |   +--- gh_data
|   +--- mysql
|   |   +--- Dockerfile
|   |   +--- initdb
|   |   |   +--- geagle.sql
|   +--- nginx
|   |   +--- conf.d
|   |   |   +--- dev.ghweb.com.conf
|   |   |   +--- dev.ghweb.html.com.conf
|   |   +--- Dockerfile
|   |   +--- nginx.conf
|   +--- php
|   |   +--- Dockerfile
|   |   +--- php-fpm.conf
|   |   +--- php-fpm.d
|   |   |   +--- www.conf.default
|   |   +--- php.ini
|   |   +--- supervisor
|   |   |   +--- supervisord.conf
|   |   |   +--- supervisord.d
|   |   |   |   +--- gh_asset_expire.conf
|   |   |   |   +--- gh_data.conf
|   |   |   |   +--- gh_logo_result.conf
|   |   |   |   +--- gh_msg_report.conf
|   |   |   |   +--- gh_op_asset.conf
|   |   |   |   +--- gh_overtime_event.conf
|   |   |   |   +--- gh_report.conf
|   |   |   |   +--- gh_send_notice.conf
|   |   |   |   +--- gh_tag.conf
|   +--- redis
|   |   +--- data
|   |   +--- Dockerfile
|   |   +--- redis.conf
+--- logs
|   +--- ghdata
|   |   +--- gh_error_log
|   |   +--- gh_normal_log
|   +--- mysql
|   +--- nginx
|   |   +--- access.log
|   |   +--- error.log
|   |   +--- gh_web.access.log
|   |   +--- gh_web.error.log
|   |   +--- gh_web_front.access.log
|   |   +--- gh_web_front.error.log
|   +--- php-fpm
|   |   +--- php-fpm.log
|   +--- redis
|   |   +--- redis.log
|   +--- supervisor
|   |   +--- cron.log
|   |   +--- gh_asset_expire.log
docker-compose.yml
docker-compose updocker-compose down

version: '2.0'
services:
  elasticsearch:
      image: xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/es:5.2.2
      environment:
        - cluster.name=docker-cluster
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ulimits:
        memlock:
          soft: -1
          hard: -1
        nofile:
          soft: 65536
          hard: 65536
      mem_limit: 1g
      cap_add:
        - IPC_LOCK
      volumes:
        - ./es/esdata1:/usr/share/elasticsearch/data
      ports:
        - 9200:9200
      networks:
        - my-net

  php-fpm:
    image: xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/php

    depends_on:
      - elasticsearch
    ports:
      - "9002:9002"
    links:
      - mysql-db:mysql-db
      - redis-db:redis-db
      - elasticsearch:elasticsearch
    volumes:
      - ../app:/wwwroot:rw
      - ./php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro
      - ./php/supervisor/supervisord.conf:/etc/supervisor/supervisord.conf
      - ./php/supervisor/supervisord.d/:/etc/supervisor/supervisord.d
      - ../logs/php-fpm:/var/log/php-fpm:rw
      - ../logs/supervisor:/var/log/supervisor
    restart: always
    command: /bin/sh -c "supervisord -c /etc/supervisor/supervisord.conf && /etc/init.d/cron start && echo '* * * * * export OS_STATUS="PRE" && /usr/local/bin/php /wwwroot/zctc_asset_manage/artisan schedule:run >> /tmp/cron.log 2>&1' | crontab -u www - && crontab -l -u www && php-fpm"
    #command: /bin/sh -c "supervisord -c /etc/supervisor/supervisord.conf && /etc/init.d/cron start && echo '* * * * * /usr/local/bin/php /wwwroot/gh_web/artisan schedule:run >> /dev/null 2>&1' | crontab -u www - && crontab -l -u www && php-fpm"
    networks:
        - my-net

  nginx:
    image: xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/nginx
    depends_on:
      - php-fpm
    links:
      - php-fpm:php-fpm
    volumes:
      - ../app:/wwwroot:rw
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ../logs/nginx:/var/log/nginx
    ports:
      - "8009:8009"
      - "8010:8010"
    restart: always
    command: nginx -g 'daemon off;'
    networks:
        - my-net

  mysql-db:
      image: xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/mysql
      ports:
        - "33062:3306"
      volumes:
        - ../logs/mysql:/var/lib/mysql-logs:rw
        - ./mysql/initdb:/docker-entrypoint-initdb.d
        - ./mysql/data:/var/lib/mysql
      environment:
        MYSQL_ROOT_PASSWORD: 123456
        MYSQL_DATABASE: geagle
        MYSQL_USER: geagle
        MYSQL_PASSWORD: 123456
      restart: always
      command: "--character-set-server=utf8"
      networks:
        - my-net

  redis-db:
      image: xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/redis
      ports:
        - "6380:6379"
      volumes:
        - ./redis/data:/data
        - ../logs/redis:/var/log/redis
      restart: always
      command: redis-server --requirepass 123456
      networks:
        - my-net

  ghdata:
      image: xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/ghdata
      depends_on:
        - elasticsearch
        - mysql-db
      environment:
        - GOENV=online
        - TZ=Asia/Shanghai
      links:
        - mysql-db:mysql-db
        - redis-db:redis-db
        - elasticsearch:elasticsearch
      volumes:
        - ./golang:/go
        - ../logs/ghdata:/tmp
      command: "./gh_data"
      restart: always
      networks:
        - my-net

networks:
  my-net:
    driver: bridge
./mysql/initdb:/docker-entrypoint-initdb.dsql
/docker-entrypoint-initdb.d
PHP的Dockerfile
FROM php:7.2-fpm

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 更新安装依赖包和PHP核心拓展
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libxml2-dev \
        libcurl4-openssl-dev \
        libxslt1-dev  \
        supervisor \
        cron \
    && 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 xml \
        && docker-php-ext-install curl \
        && docker-php-ext-install mbstring \
        && docker-php-ext-install xsl \
        && docker-php-ext-install pdo_mysql \
        && docker-php-ext-install opcache \
        && docker-php-ext-install mysqli \
        && rm -r /var/lib/apt/lists/*

WORKDIR /wwwroot

# Write Permission
RUN useradd  www
RUN usermod -a -G root www
RUN usermod -u 1000 www
RUN groups www
RUN id www
RUN mkdir -p /var/log/php-fpm/
RUN mkdir -p /var/run/supervisor/
制作好的镜像上传
  1. 给镜像打上需要上传的仓库的tag
  2. 登录仓库
  3. 上传到仓库

> docker login http://xxxxxx.xxx.xxxxx.cn
Username: ytc_cloud_scan
Password:
Error: Password Required

> docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
<none>                                          <none>              92d380c9fde3        27 hours ago        546MB
<none>                                          <none>              f6ea2e9f4344        28 hours ago        546MB
files_php-fpm                                   latest              57bbc5e67c2f        28 hours ago        546MB
xxxxxx.xxx.xxxxx.cn/ytc_cloud_scan/box/php      latest              57bbc5e67c2f        28 hours ago        546MB
<none>                                          <none>              7bd2873cac09        44 hours ago        487MB
files_nginx                                     latest              a06abb1a0495        4 days ago          108MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/nginx    latest              a06abb1a0495        4 days ago          108MB
files_redis-db                                  latest              b729236afc7d        4 days ago          76MB
files_mysql-db                                  latest              7bd85a5751a3        4 days ago          437MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/mysql    latest              7bd85a5751a3        4 days ago          437MB
ghdata                                          latest              3024b4e742b0        6 days ago          359MB
golang                                          alpine              3024b4e742b0        6 days ago          359MB
golang                                          1.13.4-stretch      1e279d13e4cb        6 days ago          763MB
php                                             7.2-fpm             48432d192e1a        2 weeks ago         398MB
php                                             7.2-cli             7cae463c729f        2 weeks ago         398MB
bulletinboard                                   1.0                 bc4b9d136410        2 weeks ago         681MB
mysql                                           5.7                 cd3ed0dfff7e        3 weeks ago         437MB
centos                                          7                   67fa590cfc1c        2 months ago        202MB
redis                                           3.2                 87856cc39862        12 months ago       76MB
nginx                                           1.12                4037a5562b03        18 months ago       108MB
node                                            6.11.5              852391892b9f        2 years ago         662MB
docker.elastic.co/elasticsearch/elasticsearch   5.2.2               89315294a341        2 years ago         206MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/es       5.2.2               89315294a341        2 years ago         206MB

> docker tag golang:alpine xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/ghdata

> docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
<none>                                          <none>              92d380c9fde3        28 hours ago        546MB
<none>                                          <none>              f6ea2e9f4344        28 hours ago        546MB
files_php-fpm                                   latest              57bbc5e67c2f        28 hours ago        546MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/php      latest              57bbc5e67c2f        28 hours ago        546MB
<none>                                          <none>              7bd2873cac09        44 hours ago        487MB
files_nginx                                     latest              a06abb1a0495        4 days ago          108MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/nginx    latest              a06abb1a0495        4 days ago          108MB
files_redis-db                                  latest              b729236afc7d        4 days ago          76MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/mysql    latest              7bd85a5751a3        4 days ago          437MB
files_mysql-db                                  latest              7bd85a5751a3        4 days ago          437MB
ghdata                                          latest              3024b4e742b0        6 days ago          359MB
golang                                          alpine              3024b4e742b0        6 days ago          359MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/ghdata   latest              3024b4e742b0        6 days ago          359MB
golang                                          1.13.4-stretch      1e279d13e4cb        6 days ago          763MB
php                                             7.2-fpm             48432d192e1a        2 weeks ago         398MB
php                                             7.2-cli             7cae463c729f        2 weeks ago         398MB
bulletinboard                                   1.0                 bc4b9d136410        2 weeks ago         681MB
mysql                                           5.7                 cd3ed0dfff7e        3 weeks ago         437MB
centos                                          7                   67fa590cfc1c        2 months ago        202MB
redis                                           3.2                 87856cc39862        12 months ago       76MB
nginx                                           1.12                4037a5562b03        18 months ago       108MB
node                                            6.11.5              852391892b9f        2 years ago         662MB
docker.elastic.co/elasticsearch/elasticsearch   5.2.2               89315294a341        2 years ago         206MB
xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/es       5.2.2               89315294a341        2 years ago         206MB

> docker push  xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/ghdata
The push refers to repository [xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/ghdata]
a17f85ec7605: Pushed
2895b872dff5: Pushed
eed8c158e67f: Pushed
2033402d2275: Pushed
77cae8ab23bf: Pushed
latest: digest: sha256:679fe3791d2710d53efe26b05ba1c7083178d6375318b0c669b6bcd98f25c448 size: 1365
代码中的数据库连接

networks的配置使容器内部相互通信. 通过service名称可以连接到对应的容器。

ghdatanginxapihttp://nginx:8010

示例如下:

REDIS_HOST=redis-db
REDIS_PASSWORD=xxx
REDIS_PORT=6379
REDIS_DB=0

API_URL=http://nginx:8010
镜像的导入和导出
#镜像的保存
docker save xxxxx.xxx.xxxxxx.cn/ytc_cloud_scan/box/engine:v1.0 -o engine

镜像的载入
docker load -i engine