我閱讀了「嘗試使用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中输入信息并进入管理界面。
-
- -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;
}
}