docekr-compose 部署LAMP
1. 安装docker-compose
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
2. 创建目录及文件
$ yum install tree -y
$ tree -L 2 LAMP/
LAMP/
├── apache
│ ├── CentOS-Base.repo
│ ├── Dockerfile
│ ├── epel.repo
│ └── run.sh
├── conf
│ └── my.cnf
│ └── httpd
├── docker-compose.yml
├── log
│ ├── apache
│ └── mysql
├── mysql
└── www
├── index.php
└── test.php
3. 编写docker-compose.yml文件
$ cat docker-compose.yml
version: '3'
services:
apache:
build: ./apache
container_name: apache
ports:
- "8000:80"
- "2000:22"
volumes:
- ./www:/var/www/html
- ./log/apache:/var/log/apache2
- ./conf/httpd:/etc/httpd
networks:
- lamp-net
restart: always
tty: true
mymysql:
image: mysql:5.7
container_name: mymysql
ports:
- "3307:3306"
volumes:
- ./conf/my.cnf:/etc/my.cnf
- ./mysql:/var/lib/mysql
- ./log/mysql:/var/log/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
networks:
- lamp-net
networks:
lamp-net:
driver: bridge
4. Apache的文件
-
生成密钥
$ ssh-keygen -t rsa $ cp /root/.ssh/id_rsa.pub /root/LAMP/apache/authorized_keys
-
Dockerfile
$ cat Dockerfile FROM centos:7.7.1908 MAINTAINER 952707870@qq.com RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm RUN rpm -ivh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm --force ADD CentOS-Base.repo /etc/yum.repos.d/ ADD epel.repo /etc/yum.repos.d/ RUN yum install -y httpd httpd-devel openssh-server sudo net-tools RUN yum install -y php70w php70w-mysql php70w-mbstring php70w-mcrypt php70w-gd php70w-imap php70w ldap php70w-odbc php70w-pear php70w-xml php70w-xmlrpc php70wpdo RUN sed -ri 's/#ServerName www.example.com:80/ServerName www.cloud.com/g' /etc/httpd/conf/httpd.conf RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key RUN mkdir -p /var/run/sshd RUN mkdir -p /root/.ssh ADD authorized_keys /root/.ssh/authorized_keys ADD run.sh /run.sh RUN chmod 775 /run.sh EXPOSE 80 CMD ["/run.sh"]
-
启动脚本
$ cat run.sh #!/bin/bash /usr/sbin/httpd -D DFOREGROUND /usr/sbin/sshd /bin/bash
-
添加国内源
$ cd /etc/yum.repos.d/ $ cp CentOS-Base.repo epel.repo /root/LAMP/apache/ $ cp epel.repo epel.repo /root/LAMP/apache/
5. mysql配置文件
$ cat my.cnf
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
init_connect='SET NAMES utf8'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
6. LAMP环境测试文件
$ cat www/index.php
<?php
#使用自定义docker driver网络,可以通过容器名称通信
$link = mysqli_connect("mymysql", "root", "root");
if(!$link)
die('Could not connect: ' . mysql_error());
else
echo "Successfully connect to the mysql.";
mysql_close($link);
?>
$ cat www/test.php
<?php
phpinfo();
?>
7. 启动容器
$ docker-compose up -d
Starting mymysql ... done
Starting apache ... done
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
apache /run.sh Up 0.0.0.0:2000->22/tcp, 0.0.0.0:8000->80/tcp
mymysql docker-entrypoint.sh mysqld Up 0.0.0.0:3307->3306/tcp, 33060/tcp
8. 查看测试结果
# Apache
$ curl http://192.168.119.128:8000
Successfully connect to the mysql.
# SSH
$ ssh 192.168.119.128 -p 2000
The authenticity of host '[192.168.119.128]:2000 ([192.168.119.128]:2000)' can't be established.
ECDSA key fingerprint is SHA256:7RM1A8obQD7eW5bqU1pGtyCAbXbJez8p/4wTtZEeR5o.
ECDSA key fingerprint is MD5:7a:be:37:51:fd:48:e6:3d:ec:02:78:44:82:88:5d:7e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.119.128]:2000' (ECDSA) to the list of known hosts.
[root@38e03d120705 ~]#
# MySQL
$ mysql -h 192.168.119.128 -P 3307 -u root -proot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.32 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
![](https://i-blog.csdnimg.cn/blog_migrate/44a654c6fdb1b0800eb6a8bdb713e04f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1e6bc0ec24a4b7f2c6d6ac031e230614.png)
![](https://i-blog.csdnimg.cn/blog_migrate/001b2f509f5e2ed4b8f6ca20749a955f.png)
总结:
1. docker-compose文件常用语法
语法 | 功能 |
---|---|
version | 指定compose的版本 |
services | 被指每个容器的启动参数,每个services就是一个容器 |
image | 指定服务的镜像名称或镜像ID |
build | 基于Dockerfile构建一个镜像 |
command | 覆盖容器启动后默认执行的命令 |
container_name | 指定的容器名称 |
depends_on | 解决容器的依赖,启动先后问题 |
dns | 自定义DNS服务器 |
environment | 添加环境变量 |
extra_hosts | 添加主机名映射 |
lables | 添加元数据到构建产生的镜像中 |
ports | 暴露端口 |
volumes | 挂载主机路径或者已创建的卷 |
networks | 指定一个网络名称,并在容器中创建 |
2. 总结docker-compose常用管理命令
语法 | 功能 |
---|---|
build | 修改dockerfile或者docker-compose后重建镜像 |
ps | 显示所有容器信息 |
kill | 前置停止一个运行的容器 |
logs | 显示服务日志 |
up | 构建,启动,链接一个服务相关的容器 |
create | 为服务创建容器,只创建 |
down | 停止和删除容器、网络、卷、镜像 |
start | 启动一个已经存在的容器 |
stop | 停止一个已经运行的容器 |
pause | 暂停一个运行中的容器的服务 |
uppause | 恢复被暂停容器的服务 |
restart | 重启docker-compose中停止或运行中的容器 |
rm | 删除已经停止的容器,运行中的容器需要使用docker-compose stop 停止容器 |