我閱讀了「嘗試使用Docker來開發WordPress網站」一書,並試著總結了我自己的理解

我阅读了上述文章,并对Docker进行了一些总结,顺便也轻微地接触了docker-compose。

Docker 中的角色

    • Dockerfile

コンテナで実行することや設定を書くファイルです

Dockerイメージ

Dockerfileをもとにつくられた仮想環境のファイルです

Dockerコンテナ

Dockerイメージを「コンテナ」として動かします
削除するとその状態は失われます

Docker的优点 (Docker de

    • サーバの状態をコードで管理できる

「どんなコマンドを実行するか」「どのファイルを サーバに配置するか」などをDockerfileに書く

「サーバの状態」をアプリのコードと同じようにバージョン管理システムで管理できる

今まで手作業で構築していたものを、自動で作成できる!

起動が高速

実行したコマンドはキャッシュされる –  2度目以降の環境作成が超高速

環境の共有が手軽

Dockerfileが1つあればOK

Docker Hub Registry

在3分钟内建立WordPress环境。

docker image pull tutum/wordpress:latest

docker container run -d -p 80:80 --name=wordpress tutum/wordpress

随意在WordPress中输入信息并进入管理界面。

image.png
    • -dオプション

デタッチド・モードで実行を指定する。
「デタッチド・モード」とは、バックグラウンドで実行すること。つまりは、コンソールに出力が表示されないことを指す。

-pオプション

コンテナにポートフォワーディングでアクセスできるようにさせる。
ポートフォワーディングとは、ローカルの特定のポートへの通信を、別のIPアドレスの特定のポートに飛ばすこと。
この場合だと、localhostのポート番号80にアクセスすると、それはコンテナ(が管理するWebサーバApache)のポート番号80に飛ぶ。

–nameオプション

コンテナの名前を決める。このオプションをつけない場合は、コンテナ名はランダムな英単語がつけられる。

确认正在运行的容器

查看 Docker 容器清单

问:容器的数据会被删除吗?

停止容器
docker容器停止(id或名称)
A: 不会消失

容器启动

重新启动容器
docker容器重新启动
A: 容器无法消失

删除容器

Docker Compose 概览

Docker compose 是一种能够自动化构建和执行由多个容器组成的服务,并简化管理的功能。
通过准备一个 compose 文件并执行一次命令,Docker compose 可以从该文件中读取配置并启动所有容器服务。

将最初启动的WordPress整合到docker-compose.yml中。这样每次启动时就不必输入长长的选项。

version: '3'
services:
    wordpres:
      image: tutum/wordpress:latest
      container_name: wordpress
      ports:
        - 80:80

使用docker-compose up命令开启

查看 tutum/wodpress 的 Dockerfile。


FROM tutum/lamp:latest
MAINTAINER Fernando Mayo <fernando@tutum.co>, Feng Honglin <hfeng@tutum.co>

# Install plugins
RUN apt-get update && \
  apt-get -y install php5-gd && \
  rm -rf /var/lib/apt/lists/*

# Download latest version of WordPress into /app
RUN rm -fr /app && git clone --depth=1 https://github.com/WordPress/WordPress.git /app

# Configure WordPress to connect to local DB
ADD wp-config.php /app/wp-config.php

# Modify permissions to allow plugin upload
RUN chown -R www-data:www-data /app/wp-content /var/www/html

# Add database setup script
ADD create_mysql_admin_user.sh /create_mysql_admin_user.sh
ADD create_db.sh /create_db.sh
RUN chmod +x /*.sh

EXPOSE 80 3306
CMD ["/run.sh"]

tutum/lamp 的 Dockerfile
https://github.com/tutumcloud/lamp/blob/master/Dockerfile

当前的情况是,每次删除容器的同时,Mysql的数据也会被删除…

创建自定义的Docker镜像(定制化的WordPress)。

从 GitHub 上克隆 https://github.com/mookjp/tutum-docker-wordpress 仓库。

切换到tutum-docker-wordpress目录下

用中文将以下内容进行释义,仅提供一种选择:
容器与本地之间的文件共享
docker run -d -p 80:80 -v $(pwd):/data-share –name=xxx-wordpress tutum/wordpress
进入容器内部
docker exec -it xxx-wordpress /bin/bash

完成WordPress配置后,将其数据复制到data-share。
运行mysqldump -u root wordpress > /data-share/mysql.dump.sql进行操作。

停止名为xxx-wordpress的Docker容器
删除名为xxx-wordpress的Docker容器
进行构建
使用docker build -t xxx-wordpress .进行构建

可以创建一个名为”xxx-wordpress”的已设置好的镜像,使用以下命令运行docker:
docker run -d -p 80:80 –name=xxx-wordpress xxx-wordpress


version: '3'
services:
    wordpres:
      build:
        context: ./tutum-docker-wordpress
      container_name: xxx-wordpress
      ports:
        - 80:80
      volumes:
        - ./tutum-docker-wordpres:/data-share

There are various ways to paraphrase “おまけ” (Omake) in Chinese depending on the context. Here’s one option:

– 额外赠品 : Extra gift/bonus

搭建一个nginx、php-fpm和mysql的环境

docker-compose.yml的中文释义是「Docker Compose配置文件」。


version: '3'
services:
  nginx:
    build:
      context: ./nginx
    depends_on:
      - php
    ports:
      - 80:80
    volumes:
      - ./app/public:/var/www/public

  php:
    build:
      context: ./phpfpm
    volumes:
      - ./app/public:/var/www/public

  mysql:
    restart: always
    image: mysql:latest
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=test
    ports:
      - 3306:3306

nginx/Dockerfile 可以用以下方式翻译成中文:
Nginx/Dockerfile


FROM nginx:latest
COPY ./etc/nginx/nginx.conf /etc/nginx/nginx.conf
COPY ./etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

php-fpm/Dockerfile 可以进行转述为:php-fpm/Docker文件。


FROM php:7.1-fpm

nginx配置文件

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$uri - $is_args - args :::'
                      '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

默认.conf

server {
    index index.php index.html;
    server_name localhost;
    root /var/www/public;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
广告
将在 10 秒后关闭
bannerAds