Build a good looking Docker for Mac (+Docker Compose) at LAMP development environment
Bài đăng này đã không được cập nhật trong 8 năm
What is Docker Compose?
When using multiple content relatively, we can devide content into parts, so that we can manage multiple content at the same time by using file which is defined in YAML (Start-Stop-construction...)
Specification
・One for Web, One for DB, the 2 contents will be defined in one docker-compose.yml
file
・Start/Stop the above 2 container at the same time at docker-compose.yml
command
・Mount the Directory on the host (Mac) to the document route of web content (Web server), we can edit directly on our Host (Mac)
・We can also add new, edit the settings of Apache on Host (Mac) (even the content that can not be changed at .htacces)
・For debugging, i did make an input function for access log/error log of WEB server on HOST (Mac)
File Organization
./
├ docker-compose.yml
├ web/
│ └ Dockerfile
├ var/
│ ├ logs/
│ └ public_html/
└ files/
└ apache_conf/
└ 00_virtualhost.conf
./docker-compose.yml
・ I will describe the files that related at docker-compose later on
./web/Dockerfile
・ I will describe the file that we use to make container image later on
./var/logs/
・ We save the log of Apache of inner content (at docker-compose.yml, we define the mount to container so that we don't have to re-build the container image)
./var/public_html/
・ This is the Document route of Apache of inner content (at docker-compose.yml, we define the mount to container so that we don't have to re-build the container image)
files/apache_conf/00_virtualhost.conf
・ This is the added new setting of Apache (at docker-compose.yml, we define the mount to container so that we don't have to re-build the container image)
Dockerfileの詳細
Base on official CentOS, i did a briefly sum up
FROM centos:latest
# Install & Add repo
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# Install PHP5.6 & Apache
RUN yum --enablerepo=remi-php56 install php php-devel php-gd php-xml php-mbstring php-opcache php-mcrypt php-mysqlnd -y
# Clear yum cache
RUN yum clean all
# for web
EXPOSE 80
CMD /usr/sbin/httpd -DFOREGROUND
docker-compose.yml
version: '2'
services:
# mysql
db01:
image: mysql:5.6
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
# web
web01:
build: ./web
image: web:24
ports:
- "80:80"
links:
- "db01:db01"
volumes:
- ./var/public_html:/var/www/public_html
- ./var/logs:/var/log/httpd
- ./files/apache_conf/00_virtualhost.conf:/etc/httpd/conf.d/00_virtualhost.conf
docker-compose.yml explanation
- version '2'
・We can choose Version 1 or 2 but this time i use Ver.2
- services: db01: / web01:
・I define the service job. we must put in Ver.2
- image: mysql:5.6
・ i refer to the working container image. If there is no image in the Docker host, automatically download based on DockerHUB
- ports:
・ Set contents [Port of link forward:(At Container) Port release]
- environment:
・ Command implement when start container (Set Password )
- build: ./web
・ Set Link save of DockerFile
- image: web:24
・ After building images:
below of build:
, we set the image name, we can write out only Ver.2
- links:
・コンテナ間のリンクの指定
・web01コンテナとdb01をリンク
・web01からは、ホスト名db01にてdb01に接続が可能
- volumes:
・ Mount the file directory upon container of Host(Mac) ・ ./var/public_html:/var/www/public_html ・ ./var/logs:/var/log/httpd ・ ./files/apache_conf/00_virtualhost.conf:/etc/httpd/conf.d/00_virtualhost.conf
Start/Stop container
- Start container
$ docker-compose up -d
At the first time start, implement the docker-compose.yml
to build image, start container...
Implement container at background by -d
option
- Stop container
docker-compose stop
Stop all things related to container
- Edit Apache settings
After fixing 00_virtualhost.conf
, restart container Web01
Implement only Web01 container by $ docker-compose restart web01
- How to use
- We can see the file distributed by public_html by openning localhost on browser on Host (Mac)
- If we use DB from PHP program (web01 container) for reference, please set the host name to db01
- If we use DB from Host (Mac), we can refer at 127.0.0.1:3306
All rights reserved