Docker-Compose是一个命令行工具,用于定义和管理多容器Docker容器,就像它们是单一服务一样。 Compose是用python编写的,可以用Python pip命令安装。 通过撰写,我们可以使用单个命令运行多个docker容器。 它允许您创建一个容器作为服务,非常适合您的开发,测试和分段环境。
在本教程中,我将引导您逐步使用docker-compose。 我们将使用Nginx,MySQL和PHP-FPM部署“ Wordpress ”。 每个服务都有自己的容器,我们将使用docker hub注册表中的图像。 我将向您展示如何从码头图像创建容器,并使用docker-compose管理所有容器。
前提条件
- Ubuntu 16.04
- 根特权
第1步 - 安装Docker
我们将从头开始,使用apt命令手动安装docker和docker。
在开始之前,请更新Ubuntu存储库并安装最新更新:
sudo apt-get update
sudo apt-get upgrade
默认情况下,Docker在Ubuntu存储库中可用,因此我们可以立即继续安装:
sudo apt-get install -y docker.io
安装完成后,启动docker并将其添加到启动时自动启动:
systemctl start docker
systemctl enable docker
现在使用以下命令测试您的Docker安装:
docker run hello-world
你会看到从码头的hello世界。
第2步 - 安装Docker-Compose
Docker-compose是一个用python编写的脚本,它在PyPI python存储库中可用,可以安装python pip。 所以我们需要先在我们的系统上安装python和python pip。
安装python和python-pip:
sudo apt-get install -y python python-pip
接下来,使用pip命令安装docker-compose:
pip install docker-compose
等待安装过程完成。 然后使用docker-compose命令检查安装:
docker-compose -v
您将获得docker-compose版本。
第3步 - 安装Wordpress
现在,docker和docker-compose安装在系统上。 在此步骤中,将显示如何为我们的WordPress项目创建和设置docker-compose环境。
我们将使用Nginx作为Web服务器部署“Wordpress”PHP应用程序,将用于MySQL数据库的MariaDB作为docker-compose管理的docker容器。 每个应用程序(Wordpress,Nginx和MySQL)将在自己的容器中运行,您可以看到下面的列表:
- Nginx :我们使用官方的Docker镜像,最新版本“nginx:latest”。
- Wordpress :Wordpress在docker-hub上提供了一些Docker映像,我们将在其上使用带有PHP-FPM 7.0的WordPress 4.7。
- MySQL :我们将使用MariaDB官方容器,最新版本。
所以我们需要从docker hub注册表中的3个码头图像。
我们不会以root身份运行docker,我们将使用普通的Linux用户。 所以只需创建一个新的用户,使用下面的命令(在这里可以自由使用不同的用户名,只要确保用户不存在,如果您选择不同的名称,请确保在本教程中遵循的所有命令中进行更改)
useradd -m -s /bin/bash hakase
passwd hakase
现在将用户添加到“ docker ”组,以便用户可以使用docker命令,并重新启动docker服务:
usermod -a -G docker hakase
systemctl restart docker
登录到用户的“hakase”并为WordPress项目创建一个新目录:
su - hakase
mkdir -p wordpress-compose
cd wordpress-compose/
接下来,创建一个名为' docker-compose.yml '的新文件,并为项目创建一个新目录。 只需键入以下命令:
touch docker-compose.yml
mkdir -p nginx/
mkdir -p db-data/
mkdir -p logs/nginx/
mkdir -p wordpress/
文件和目录项目列表:
- docker-compose.yml :这是docker-compose配置文件,您必须在启动新的docker-compose项目时创建它。
- nginx / :该目录用于我们的额外的nginx配置,如虚拟主机等。
- db-data / :mysql数据的卷/目录。 来自数据“/ var / lib / mysql”的sql被安装到db-data目录下。
- logs / :应用程序日志目录,nginx,mariadb和php-fpm。
- wordpress /:所有wordpress文件将在该目录中可用。
在'nginx'目录中,为我们的wordpress虚拟主机创建一个新的配置文件。
创建一个新的文件wordpress.conf:
vim nginx/wordpress.conf
粘贴配置如下:
server {
listen 80;
server_name wp-hakase.co;
root /var/www/html;
index index.php;
access_log /var/log/nginx/hakase-access.log;
error_log /var/log/nginx/hakase-error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
保存文件并退出vim。
第4步 - 配置Docker-Compose
在此步骤中,我们将开始编辑docker-compose.yml文件。 当您要启动docker-compose项目时,请确保先创建docker-compose.yml文件,就像我们在下面进行的那样。
使用vim编辑docker-compose.yml:
vim docker-compose.yml
定义您的服务,在第一行我们将定义Nginx。 我们正在使用Nginx官方Docker映像,最新版本,并将容器端口80的端口映射配置为主机端口80。 接下来,配置Docker卷,Nginx虚拟主机配置的卷,Nginx日志文件的卷和Web根目录卷'/ var / www / html'。 Nginx容器链接到WordPress容器。
粘贴配置如下:
nginx:
image: nginx:latest
ports:
- '80:80'
volumes:
- ./nginx:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
- ./wordpress:/var/www/html
links:
- wordpress
restart: always
接下来,定义MySQL服务器。 我们使用的是最新版本的MariaDB镜像。 为端口3306上的容器配置端口映射,并使用环境变量“MYSQL_ROOT_PASSWORD”配置MySQL根密码。 最后,配置MySQL数据目录的容器卷。
粘贴配置如下:
mysql:
image: mariadb
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=aqwe123
restart: always
然后我们将使用安装了PHP-FPM 7.0的WordPress 4.7 Docker映像来配置WordPress服务。 在端口9000上配置PHP-fpm的端口,启用主机目录“wordpress”的web目录“/ var / www / html”的docker卷,通过定义WordPress环境变量来设置数据库,并将WordPress服务链接到mysql。
粘贴配置如下:
wordpress:
image: wordpress:4.7.1-php7.0-fpm
ports:
- '9000:9000'
volumes:
- ./wordpress:/var/www/html
environment:
- WORDPRESS_DB_NAME=wpdb
- WORDPRESS_TABLE_PREFIX=wp_
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_PASSWORD=aqwe123
links:
- mysql
restart: always
将三个部分添加到docker-compose.yml文件中后,保存文件并退出vim编辑器。
我们的码头组合配置已经准备就绪。
第5步 - 运行Docker-compose
开始创建与docker组合的新容器。 转到wordpress-compose目录,并根据我们的撰写文件启动新的容器。
cd ~/wordpress-compose/
docker-compose up -d
您可以看到命令的结果。 创建了三个容器。 我们用ps选项检查容器状态:
docker-compose ps
结果如下:
如果要查看容器的日志输出,可以使用以下命令:
docker-compose logs nginx
docker-compose logs mysql
docker-compose logs wordpress
容器日志:
注意 :
如果您在WordPress容器中看到有关MySQL连接被拒绝的错误,请忽略它。
第6步 - 安装Wordpress
在我们执行此步骤之前,我们来检查系统上可用的端口/打开的端口。 确保您已打开3个端口,端口80,3306和端口9000。
netstat -plntu
结果如下:
现在打开您的网络浏览器并输入服务器URL或IP地址。
http:// serverIP /
您可以看到WordPress的安装页面。 选择您的语言,然后点击“ 继续 ”。
填写您的网站详细信息,如网站标题,管理员用户和密码,您的电子邮件地址,然后单击“ 安装Wordpress ”。
您将被重定向到“ Wordpress管理控制台 ”。
这是我的WordPress示例帖子你好世界。
Wordpress已经安装了docker-compose。
第7步 - 访问Docker容器
这是关于如何使用docker-compose访问容器的附加步骤。 检查所有容器是否可用,并显示其状态:
docker-compose ps
我们已经拥有3个容器,现在我们可以尝试登录到每个容器。 使用docker-compose命令登录到第一个Nginx容器。
docker-compose exec nginx bash
nginx :docker-compose文件docker-compose.yml上的服务名称
bash :执行bash shell命令
现在检查我们的WordPress虚拟主机配置。
cat /etc/nginx/conf.d/wordpress.conf
文件在容器中可用。
接下来,尝试登录到mysql容器,然后使用我们在compose文件上的密码登录到mysql shell。
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL ROOT PASSWORD
查看数据库列表:
show databases;
您将看到我们的WordPress数据库。
在“wordpress”容器中,您将看到所有的WordPress文件。
docker-compose exec wordpress bash
ls -lah
所有容器都可以访问。