Docker Compose
一、Docker Compose 概述
1、Docker Compose 是什么
Docker Compose
是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker compose
是一个定义和运行多个 Docker
应用的工具,只需要定义一个 YAML 格式的配置文件docker-compose.yml
,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器
2、Docker Compose 核心概念
docker-compose将所管理的容器分为三层,分别是工程(project),服务(service),以及容器(container)。
docker compose运行目录下的所有yml文件组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务可包括多个容器实例。docker-compose就是docker容器的编排工具,主要就是解决相互有依赖关系的多个容器的管理。
3、Docker Compose 使用步骤
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
4、Docker 与 Docker Compose 文件版本对应关系
二、Docker Compose 安装与卸载
安装Docker Compose的前提是基于Docker环境的,所以得提前安装Docker
1、二进制包安装
1.1、下载Docker Compose V2 版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-L
: 是curl
的一个选项,表示跟随重定向。如果下载链接是重定向的,这个选项会让curl
自动跟踪到最后的目标地址。"https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-$(uname -s)-$(uname -m)"
: 这是Docker Compose的下载URL,其中v2.5.1
指定了要下载的Docker Compose版本号。$(uname -s)
和$(uname -m)
是shell命令,分别返回当前系统的类型(如Linux
)和机器的硬件架构(如x86_64
),这样可以确保下载与当前系统架构相匹配的Docker Compose二进制文件。-o /usr/local/bin/docker-compose
:-o
或--output
指定了下载文件的保存位置及名称。这里,文件会被保存为/usr/local/bin/docker-compose
,这是Docker Compose常见的安装路径,将其放在此处可以使其在PATH环境变量中,从而可以直接在命令行中通过docker-compose
命令调用。
1.2、添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
1.3、设置软链接
sudo ln -s /usr/local/bin/docker-compose /usr/lib/docker-compose
1.4、查看版本
docker-compose --version
2、yum安装
2.1、安装EPEL库
yum install epel-release.noarch -y
2.2、yum安装Docker Compose
yum install docker-compose.noarch -y
2.3、查看版本
docker-compose version
3、pip安装
3.1、安装python3
yum install python3
3.2、安装python3-pip并更新
yum install -y python3-pip
pip3 install --upgrade pip
3.3、pip安装Docker Compose
pip3 install docker-compose
3.4、查看版本
docker-compose version
4、卸载(针对二进制包安装)
rm -rf /usr/local/bin/docker-compose
删除二进制文件即可
三、Docker Compose命令
1、指令格式
docker compose [OPTIONS] COMMAND
2、常见选项
常见选项 | 描述 |
---|---|
--ansi |
控制何时打印ANSI控制字符以格式化输出,可选值:"never"(从不)、"always"(总是)、"auto"(自动,默认)。 |
--compatibility | 使Docker Compose以向后兼容模式运行,适用于旧版Compose文件或特性。 |
--env-file |
指定一个文件来加载环境变量至Compose环境,用于配置。 |
-f, --file |
指定Compose配置文件路径,可多次使用以合并多个配置。 |
--profile |
启用配置文件中的特定配置概要,便于环境间切换。 |
--project-directory |
设置一个替代的工作目录作为Compose文件的基准路径。 |
-p, --project-name |
自定义项目名称,用于隔离不同项目的服务和网络命名空间。 |
3、常见命令
常见命令 | 描述 |
---|---|
build | 构建或重建服务所指定的Docker镜像。 |
convert | 将Compose文件转换为平台标准格式,增强跨环境兼容性。 |
cp | 在服务容器与本地文件系统间复制文件或目录。 |
create | 创建服务容器而不启动它们。 |
down | 停止并移除容器、网络等,清理项目环境。 |
events | 实时监控并接收容器事件。 |
exec | 在运行的容器内部执行命令。 |
images | 列出Compose管理的容器所使用的镜像。 |
kill | 强制终止服务容器。 |
logs | 查看服务容器的日志输出。 |
ls | 列出当前正在运行的Compose项目。 |
pause | 暂停服务容器的运行。 |
port | 查询服务容器端口映射到宿主机的端口。 |
ps | 列出项目中所有容器的状态。 |
pull | 拉取服务所需的镜像到本地。 |
push | 推送服务镜像到远程仓库。 |
restart | 重启服务容器。 |
rm | 删除已停止的服务容器。 |
run | 在服务上执行一次性命令,不创建新容器。 |
start | 启动已停止的服务容器。 |
stop | 停止服务容器。 |
top | 显示容器内部运行的进程信息。 |
unpause | 取消暂停状态的服务容器。 |
up | 创建并启动所有服务容器,部署项目的核心命令。 |
version | 显示当前Docker Compose的版本信息。 |
docker-compose -h # 查看帮助
docker-compose up # 创建并运行所有容器
docker-compose up -d # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d # 指定模板
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose logs # 查看容器输出日志
docker-compose logs -f 容器名 查看容器实时日志
docker-compose pull # 拉取依赖镜像
dokcer-compose config # 检查配置
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
docker-compose up -d nginx #构建并启动nignx容器
docker-compose exec nginx bash #登录到nginx容器中
docker-compose ps #显示所有容器
docker-compose build nginx #构建镜像
docker-compose build --no-cache nginx #不带缓存的构建
docker-compose config -q #验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx #以json的形式输出nginx的docker日志
docker-compose pause nginx #暂停nignx容器
docker-compose unpause nginx #恢复ningx容器
docker-compose rm nginx #删除容器(删除前必须关闭容器)
四、YAML文件格式及注意事项
由于Docker Compose默认使用YAML文件 docker-compose.yml来定义多服务的应用,所以我们这里需要熟悉YAML文件的编写
1、YAML文件格式
YAML是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json简单的很多。
-
缩进:YAML 使用空格进行缩进,而不是制表符。缩进用来表示层级关系,通常推荐使用2个空格。
-
键值对:YAML 中的数据结构主要由键值对组成,键和值之间使用冒号(:)分隔,例如
key: value
。 -
列表(数组):使用短横线(-)开始每一项来表示列表,每个项目可以是简单的值、对象或者嵌套的列表,例如:
services: - web - db
-
对象(字典/映射):键值对集合,键必须唯一,例如:
service: name: web ports: - "8080:80"
-
字符串:单引号(')和双引号(")都可以用来包围字符串,但双引号支持转义字符和变量插值。
-
布尔值和特殊值:YAML 支持
true
,false
,null
,~
(表示null),以及yes
,no
等。 -
数组:用中括号[]括起来
-
hash:用花括号{}括起来
2、注意事项
-
大小写敏感
-
空白敏感:YAML 对空白非常敏感,错误的缩进会导致解析错误。
-
行内和块样式:对于列表和对象,可以使用行内风格(紧凑在一列)或块样式(更易读)。例如,块样式的服务定义:
services: web: image: example/web ports: - "8080:80"
-
注释:YAML 支持行尾注释,使用井号(#)开始,例如:
# 这是一个注释 key: value
-
字符串引号:虽然不是必需的,但在某些情况下使用引号可以避免解析错误,尤其是在字符串中包含特殊字符(如冒号、逗号等)或需要保留空白时。
-
环境变量:在 Docker Compose 中,可以在值中引用环境变量,使用
${VARIABLE}
或$VARIABLE
形式,例如:environment: - PASSWORD=${PASSWORD_ENV}
-
符号字符后缩进1个空格:如"冒号 : "、 "逗号 , "、"横杠 - "
-
特殊字符处理:
-
包含特殊字符用单引号(' ')引起来会作为普通字符串处理,双引号(" "):特殊字符作为本身想表示的意思
-
#双引号示例: name: "hello, \nworld" 最后name值是两行内容 name: hello, world #单引号示例: name: 'hello, \nworld' 只会作为普通字符 name: hello,\nworld
-
3、数据结构
#对象: 键值对的字典
animal: pets
#数组: 一组按次序排列的列表
- cat
- dog
- goldfish
#布尔值
debug: "true"
debug: "false"
#Yaml示例
languages: #序列的映射
- Java
- Golang
- Python
websites: #映射的映射(键的值,仍然是键值对)
Baidu: www.baidu.com
Wangyi: www.163.com
Souhu: www.souhu.com
#或者
languages: ["Java","Golong","Python"]
websites:
Baidu:
www.baidu.com
Wangyi:
www.163.com
Souhu:
www.souhu.com
#Json格式
{
languages: [
'Java',
'Golong',
'Python',
],
websites: [
Baidu: 'www.baidu.com',
Wangyi: 'www.163.com',
Souhu: 'www.souhu.com',
]
}
五、Docker Compose模板文件
1、environment
设置环境变量,主要是用来配置容器中程序所需要配置的一些参数。
1.1、数组格式
services:
mysql:
image: mysql:latest
ports:
- 3307:3306
environment: # 使用数组格式
- MYSQL_ROOT_PASSWORD=root
1.2、字典格式
services:
mysql:
image: mysql:latest
ports:
- 3307:3306
environment: # 使用字典格式,类似于 docker run -e MYSQL_ROOT_PASSWORD=root
MYSQL_ROOT_PASSWORD: root
2、volumes
数据卷所挂载路径设置,挂载数据卷的默认权限是读写(rw)。
你可以在主机上挂载绝对路径,或者挂载相对路径.
相对路径是相对于当前正在使用的compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 … 开始。
2.1、数据卷挂载的绝对路径和相对路径
services:
mysql:
image: mysql:latest
ports:
- 3307:3306
environment: # 使用字典格式,类似于 docker run -e MYSQL_ROOT_PASSWORD=root
MYSQL_ROOT_PASSWORD: root
volumes:
# 挂载绝对路径映射,没有这个路径的话会自动创建
- /root/docker/composetest/tomcat/app_data:/var/lib/mysql
# 或者使用相对路径映射,也会自动创建
- ./app_data:/var/lib/mysql
2.2、使用别名挂载容器数据卷
可以跨多个服务并重用挂载卷,当然使挂载绝对路径或相对路径也可以重用挂载卷
但要注意一点,使用别名的方式挂载需要在顶级volumes关键字中声明挂在卷,否则启动会报错。
services:
mysql:
image: mysql:latest
ports:
- 3307:3306
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- my_app_data:/var/lib/mysql
web1:
volumes: # 重用my_app_data
- my_app_data:/var/lib/mysql
web2:
volumes: # 重用my_app_data
- my_app_data:/var/lib/mysql
volumes:
my_app_data:
3、build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。
Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
services:
webapp:
build: ./ # 从当前目录下寻找Dockerfile文件
3.1、context指定Dockerfile所在路径
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile_flask
args:
buildno: 1
4、depends_on
解决容器的依赖、启动先后的问题
services:
webapp:
build: .
depends_on:
- db
- redis
redis:
image: redis:latest
db:
image: mysql:latest
启动顺序:redis -> db -> web
5、env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
services:
mysql:
image: mysql:latest
ports:
- 3307:3306
env_file: .env # 仅使用单个env文件
env_file: # 通过数组来使用多个env文件
- ./common.env
- ./apps/web.env
- /opt/secrets.env
5.1、环境变量文件要求
环境变量文件中每一行必须符合格式,支持 # 开头的注释行。
# common.env: Set development environment
MYSQL_ROOT_PASSWORD=root
6、networks
配置容器连接的容器
services:
webapp:
networks:
- flask-net
networks: # 在顶级networks关键字中需要声明,才会在启动时自动创建该网络,否则报错。
flask-net:
7、ports
暴露端口信息。
格式宿主端口:容器端口 (HOST:CONTAINER) 。
ports:
2. "80:80" # 绑定容器的80端口到主机的80端口
3. "9000:8080" # 绑定容器的8080端口到主机的9000端口
4. "443" # 绑定容器的443端口到主机的任意端口,容器启动时随机分配绑定的主机端口号
8、expose
暴露端口,但是不会映射到宿主机
和ports的区别是,expose暴露容器给link到当前容器的容器,不会将端口暴露给主机。
9、restart
docker容器服务总是运行
services:
webapp:
networks:
- flask-net
restart: always
六、示例
1、启动单个容器
1.1、创建目录
mkdir /opt/docker
cd /opt/docker/
1.2、编写docker-compose.yml文件
vim docker-compose.yml
services:
service-nginx:
image: mycentos_nginx:v1
container_name: nginx_v1
ports:
- "8080:80"
1.3、启动容器
docker-compose up -d
2、启动多个容器
2.1、编写docker-compose.yml文件
vim docker-compose.yml
services:
service-nginx:
image: mycentos_nginx:v1
container_name: nginx_v1
ports:
- "8080:80"
service-tomcat:
image: tomcat
container_name: tomcat_v1
ports:
- "8081:8080"
2.2、启动容器
docker-compose up -d
3、定义数据卷挂载
3.1、创建数据卷目录和文件
mkdir -p /data/nginx
echo "hello docker-compose" > /data/nginx/index.html
3.2、编写docker-compose.yml文件
vim docker-compose.yml
services:
service-nginx:
image: nginx
container_name: nginx_v2
volumes:
- /data/nginx/:/usr/share/nginx/html
ports:
- "80:80"
service-tomcat:
image: tomcat
container_name: tomcat_v1
ports:
- "8080:8080"
3.3、访问测试
curl localhost
curl `docker exec nginx_v2 hostname -i`
七、案例
1、Docker Compose部署MySQL(5.7版本)
1.1、创建项目目录
mkdir -p /opt/compose_mysql
1.2、拉取MySQL镜像
docker pull mysql:5.7
1.3、创建挂载目录
mkdir -p /home/docker/mysql:5.7/{log,data,conf.d}
1.4、添加配置文件my.cnf
vim /home/docker/mysql\:5.7/conf.d/my.cnf
[client]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysql]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock
[mysqld]
port=3306
user=mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1
default_authentication_plugin=mysql_native_password
symbolic-links=0
max_connections=1000
character-set-server=utf8mb4
default-storage-engine=INNODB
lower_case_table_names=0
max_allowed_packet=16M
default-time_zone='+8:00'
1.5、编写docker-compose.yml文件
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- /home/docker/mysql8/log:/var/log/mysql
- /home/docker/mysql8/data:/var/lib/mysql
- /home/docker/mysql8/conf.d:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
ports:
- 3306:3306
restart: always
1.6、运行docker-compose
docker-compose -f docker-compose.yml up -d
1.7、查看启动的容器状态
docker-compose ps
1.8、进入容器连接测试
docker exec -it mysql5.7 bash
1.9、小问题:进入容器显示bash-4.2#
出现上述问题是因为在/root/目录下缺少.bash_profile .bashrc 这两个文件
[root@localhost mysql:5.7]# docker exec -it b3f7b6800038 /bin/bash
bash-4.2# cd /etc/skel/
bash-4.2# cp .bash_profile /root/
bash-4.2# cp .bashrc /root
1.10、成功登入MySQL
mysql -uroot -p
#交互式输入登录密码
2、Docker Compose 搭建 LNMP
2.1、目录结构
yum install -y tree
tree -L 3 /opt/compose_lnmp/
2.2、创建项目目录,服务子目录
mkdir -p /opt/compose_lnmp/{mysql,nginx,php,wwwroot}
2.3、上传wordpress源码包,准备测试页面
[root@localhost ~]# cd /opt/compose_lnmp/wwwroot/
[root@localhost wwwroot]# ls
wordpress-4.9.4-zh_CN.tar.gz
[root@localhost wwwroot]# tar xzvf wordpress-4.9.4-zh_CN.tar.gz
[root@localhost wwwroot]# echo "hello docker-compose_wordpress" > /opt/compose_lnmp/wwwroot/index.html
2.4、上传nginx源码包,编写nginx的Dockerfile
[root@localhost ~]# cd /opt/compose_lnmp/nginx/
[root@localhost nginx]# ls
nginx-1.18.0.
[root@localhost nginx]# vim Dockerfile
FROM centos:7
MAINTAINER this is nginx image
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && useradd -M -s /sbin/nologin nginx
ADD nginx-1.18.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.18.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make -j2 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
#ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html/
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
EXPOSE 443
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
2.5、上传MySQL源码包,编写MySQL的Dockerfile
[root@localhost ~]# cd /opt/compose_lnmp/mysql/
[root@localhost mysql]# ls
mysql-boost-5.7.20.tar.gz
[root@localhost mysql]# vim Dockerfile
FROM centos:7
MAINTAINER misakivv [email protected]
RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
RUN useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make -j 2 && make install
RUN chown -R mysql:mysql /usr/local/mysql/
ADD my.cnf /etc/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
WORKDIR /usr/local/mysql/
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
CMD /usr/local/mysql/bin/mysqld
2.6、编写MySQL配置文件my.cnf
[root@localhost mysql]# vim my.cnf
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
2.7、上传php的源码包,编写php的Dockerfile
[root@localhost ~]# cd /opt/compose_lnmp/php/
[root@localhost php]# ls
php-7.4.5.tar.gz
[root@localhost php]# vim Dockerfile
FROM centos:7
MAINTAINER misakivv [email protected]
RUN yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c++ make pcre-devel
RUN useradd -M -s /sbin/nologin nginx
ADD php-7.4.5.tar.gz /usr/local/src/
WORKDIR /usr/local/src/php-7.4.5
RUN ./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip && make && make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
RUN \cp /usr/local/src/php-7.4.5/php.ini-development /usr/local/php/lib/php.ini \
&& sed -i 's#mysqli.default_socket =#mysqli.default_socket = /usr/local/mysql/mysql.sock#' /usr/local/php/lib/php.ini \
&& sed -i '939 s#;date.timezone =#date.timezone = Asia/Shanghai#' /usr/local/php/lib/php.ini
RUN \cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf \
&& sed -i '17 s/^;//' /usr/local/php/etc/php-fpm.conf
RUN \cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf \
&& sed -i 's#user = nobody#user = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \
&& sed -i 's#group = nobody#group = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \ && sed -i 's#listen = 127.0.0.1:9000#listen = 172.18.0.30:9000#' /usr/local/php/etc/php-fpm.d/www.conf
EXPOSE 9000
ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
2.8、编写docker-compose.yml文件
[root@localhost compose_lnmp]# docker pull centos:7
version: '2'
services:
nginx:
container_name: nginx
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1315:80
- 1316:443
networks:
lnmp:
ipv4_address: 172.18.0.10
volumes:
- ./wwwroot/:/usr/local/nginx/html
mysql:
container_name: mysql
hostname: mysql
build:
context: ./mysql
dockerfile: Dockerfile
ports:
- 3306:3306
networks:
lnmp:
ipv4_address: 172.18.0.20
volumes:
- /usr/local/mysql
php:
hostname: php
build:
context: ./php
dockerfile: Dockerfile
container_name: php
ports:
- 9000:9000
networks:
lnmp:
ipv4_address: 172.18.0.30
volumes_from:
- nginx
- mysql
depends_on:
- nginx
- mysql
links:
- nginx
- mysql
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
2.9、运行docker-compose
[root@localhost compose_lnmp]# docker-compose -f docker-compose.yml up -d
2.10、进入MySQL容器,进行用户授权
docker exec -it mysql /bin/bash
mysql -uroot -p
mysql> create database wordpress;
mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
mysql> flush privileges;
2.11、访问测试
192.168.112.60:1315/wordpress/wp-admin/setup-config.php