Docker 容器學習

994914376發表於2019-08-23

一、Docker 容器的安裝

# mac 環境安裝
$ brew cask install docker

# centos7 環境安裝
$ 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

# Ubuntu 環境安裝
$ wget -qO- https://get.docker.com/ | sh  獲取最新版本的 Docker 安裝包
$ sudo service docker start 啟動服務

docker rm `docker ps -aq`  清除容器與映象關係

二、操作命令

    1、docker images 檢視當前存放映象
    2、docker ps 檢視當前執行的容器
    3、docker ps --all 檢視當前所有容器
    4、docker rm <容器名稱> 刪除停止的容器
    5、docker rmi <映象名稱> 刪除停止的映象
    6、docker run -d -p 5000:5000 training/webapp python app.py 執行一個新的容器
        -d 容器後臺執行
        -p 5000:5000 指定埠對映到本機
    7、docker port <容器名稱>  檢視容器埠號

三、使用docker搭建 lnmp 開發環境

    # 目錄結構
    .
├── data
│   ├── mysql
│   └── redis
│       └── dump.rdb
├── dockerfile
│   ├── docker-compose.yml
│   ├── go
│   ├── mysql
│   ├── nginx
│   │   ├── Dockerfile
│   │   ├── conf.d
│   │   │   ├── default.conf
│   │   │   └── laravel.conf
│   │   └── nginx.conf
│   ├── php
│   │   ├── Dockerfile
│   │   ├── php-fpm.conf
│   │   ├── php.ini
│   │   └── pkg
│   │       └── redis.tgz
│   └── redis
│       └── Dockerfile
├── logs
│   ├── nginx
│   │   └── error.log
│   └── php-fpm
└── website

四、先安裝nginx 建立nginxdockerfile檔案

# 進入到 dockerfile/nginx 建立Dockerfile檔案
FROM nginx  # 指定映象 預設使用官方映象

MAINTAINER zhouyao "994914376@qq.com"  # 作者

ENV TZ=Asia/Shanghai # 宣告變數

# 更改時間為宿主機時間
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone  

五、安裝php-fpm建立phpdockerfile檔案

# 進入到 dockerfile/php 建立Dockerfile檔案

FROM php:7.2-fpm # 指定php的版本
MAINTAINER zhouyao "994914376@qq.com" # 指定作者

# 設定時區
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 \
    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/*

# 安裝 redis 擴充套件
COPY ./pkg/redis.tgz ./home/redis.tgz  # 複製宿主機安裝包到容器

# 安裝PECL擴充 這裡我們安裝的是redis
RUN pecl install /home/redis.tgz && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini

# 安裝composer
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH

# 刪除安裝包
RUN rm -f /home/redis.tgz

# 遠端連線時進入的預設目錄
WORKDIR /data

# 修改使用者賬號資訊
RUN usermod -u 1000 www-data

六、安裝redis建立redisdockerfile檔案

# 進入到 dockerfile/redis 建立Dockerfile檔案

FROM redis:5.0 # 指定軟體版本
MAINTAINER zhouyao "994914376@qq.com"
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

七、安裝mysql建立mysqldockerfile檔案

# 進入到 dockerfile/mysql 建立Dockerfile檔案

FROM mysql:5.7 # 指定mysql的版本
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

八、上面的Dockerfile建立完畢我們建立docker-compose.yml檔案

# 進入到dockerfile目錄建立docker-compose.yml檔案

version:  "3"
services:
    # php-fpm 服務
    php-fpm:
        build:  ./php # 執行dockerfile檔案配置
        links: # 連線其它容器器
        - redis:redis
        - mysql:mysql
        ports: # 暴露埠到宿主機
            -  "9000:9000"
        volumes: # 掛載目錄 把宿主機目錄目錄掛載到容器中持久化儲存
            -  ../website:/data/www:rw
            -  ./php/php.ini:/usr/local/etc/php/php.ini:ro
            -  ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro
            -  ../logs/php-fpm:/var/log/php-fpm:rw
    restart:  always
    command:  php-fpm # 啟動時執行的命令

    # nginx 服務
    nginx:
        build:  ./nginx # 執行dockerfile檔案配置
        depends_on: # 優先順序 先啟動載入php-fpm容器
            -  php-fpm
        links: # 連線其它容器
            -  php-fpm:php-fpm
        volumes: # 掛載目錄
            - ../website:/data/www:rw
            - ./nginx/conf.d:/etc/nginx/conf.d
            - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
            - ../logs/nginx:/var/log/nginx
        ports: // 暴露埠
            -  "80:80"
            -  "8080:8080"
            -  "443:443"
        restart:  always
        command:  nginx -g 'daemon off;' # 執行時執行,必須要讓pid = 1的程式為nginx不然容器會自動退出

    # redis 服務
    redis: 
        build:  ./redis
        ports:
            -  "6379:6379"
        volumes:
            -  ../data/redis:/data
        restart:  always

    # mysql 服務
    mysql:
        build:  ./mysql
        ports:
            -  "3306:3306"
        volumes:
            -  ../data/mysql:/var/lib/mysql:rw
            -  ../logs/mysql:/var/lib/mysql-logs:rw
            -  ./mysql/conf.d:/etc/mysql/conf.d:ro
        environment: # 設定資料庫密碼資訊
            MYSQL_ROOT_PASSWORD:  123456
            MYSQL_DATABASE:  goframe
            MYSQL_USER:  root
            MYSQL_PASSWORD:  123456
        restart:  always
        command:  "--character-set-server=utf8"

注:宿主機執行 composer 命令

# -w /data/www/personal/zhubao 該地址為容器專案地址
docker-compose run --rm -w /data/www/personal/zhubao php-fpm composer require overtrue/laravel-wechat

最後奉上倉庫地址
https://github.com/zhouyaozhouyao/docker-l...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章