Docker 容器学习
一、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
建立nginx
的dockerfile
文件
# 进入到 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
建立php
的dockerfile
文件
# 进入到 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
建立redis
的dockerfile
文件
# 进入到 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
建立mysql
的dockerfile
文件
# 进入到 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 协议》,转载必须注明作者和本文链接
command: "--character-set-server=utf8"
建议改为utf8mb4。不推荐使用utf8。@newbing 这个确实,改成utf8mb4能支付一些存储一些占四个字节的数据,比如符号表情等 :+1: