目录
文章目录
1.Docker简介
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
1.1 Docker的应用场景
(1)Web 应用的自动化打包和发布。
(2)自动化测试和持续集成、发布。
(3)在服务型环境中部署和调整数据库或其他的后台应用。
(4)从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
1.2 Docker的优点
(1)启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多
(2)资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源
(3)体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多
1.3 Docker 的用途
(1)提供一次性的环境。比如本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
2.Docker 的安装
2.1 安装Docker及设置
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
[root@lnmp ~]# uname -r
3.10.0-957.12.2.el7.x86_64
- 安装必要的系统工具
[root@lnmp ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息
[root@lnmp ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@lnmp ~]# yum makecache #更新YUM缓存
- 安装 Docker-ce
[root@lnmp ~]# yum -y install docker-ce
- 查看docker是否安装成功
[root@lnmp ~]# docker version
Client:
Version: 18.09.6
API version: 1.39
Go version: go1.10.8
Git commit: 481bc77156
Built: Sat May 4 02:34:58 2019
OS/Arch: linux/amd64
Experimental: false
- Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组
[jimmy@lnmp ~]# sudo usermod -aG docker jimmy #-aG是一起使用 把用户加到某个组
- Docker 是服务器----客户端架构 设置开启服务
[root@lnmp ~]# systemctl enable docker
3.Docker Hello World
3.1 输出Hello world
[root@lnmp ~]# docker run ubuntu:15.10 /bin/echo "hello world"
hello world
解析:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果
3.2 运行交互式的容器
通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
[root@lnmp ~]# docker run -it ubuntu:15.10
root@af434062a813:/# #进入了ubuntu15.10系统的容器
3.3 启动容器(后台模式)
[root@lnmp ~]# docker run -d ubuntu:15.10 /bin/bash -c "while true; do echo hello world; sleep 1; done"
61efe4bfd4c87c90629b3247cfc6ad8dea6849957ae6b0231277dab8311a11be
解析:-d表示以后台进程模式运行,一长串字符为容器ID
[root@lnmp ~]# docker ps #查看是否正在运行
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61efe4bfd4c8 ubuntu:15.10 "/bin/bash -c 'while…" About a minute ago Up About a minute clever_wilbur
[root@lnmp ~]# docker logs 61efe4bf #容器内使用docker logs命令,查看容器内的标准输出
hello world
hello world
hello world
hello world
hello world
3.4 停止容器
[root@lnmp ~]# docker stop 61efe4bfd4c8
61efe4bfd4c8
4. Docker 容器使用
4.1 运行web应用
docker容器中运行一个 Python Flask 应用来运行一个web应用
[root@lnmp ~]# docker pull training/webapp
Using default tag: latest
latest: Pulling from training/webapp
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
[root@lnmp ~]# docker run -d -P training/webapp python app.py
e0e026dbebf3ebf7bf16f2c98a541735c51cc75cd2a6a9c8f29504e5936e81eb
解析:
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
4.2 查看WEB应用容器
[root@lnmp ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0e026dbebf3 training/webapp "python app.py" About a minute ago Up About a minute 0.0.0.0:4000->5000/tcp hopeful_buck
解析:
PORTS 0.0.0.0:4000->5000/tcp :Docker开放了5000端口(默认 Python Flask 端口)映射到主机端口 4000 上
4.3 通过浏览器访问web应用
4.4 可以通过 -p 参数来设置不一样的端口
root@lnmp ~]# docker run -d -p 5000:6000 training/webapp python app.py
8b1942aa86cf08823c247fd35f539816fb58a642e301c33561a179e53ed10054
[root@lnmp ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b1942aa86cf training/webapp "python app.py" 22 seconds ago Up 20 seconds 5000/tcp, 0.0.0.0:5000->6000/tcp
4.5 查看网络端口的快捷方式
通过查看ID号或NAME可以查看网络端口情况
[root@lnmp ~]# docker port ad1841f6fbc2
3000/tcp -> 0.0.0.0:5000
4.6 查看 WEB 应用程序日志
[root@lnmp ~]# docker logs -f 52c0b3dd6592
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
10.0.0.1 - - [09/Jul/2019 08:38:12] "GET / HTTP/1.1" 200 -
10.0.0.1 - - [09/Jul/2019 08:38:12] "GET /favicon.ico HTTP/1.1" 404
解析:
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
4.7 查看WEB应用程序容器的进程
[root@lnmp ~]# docker top 52c0b3dd6592
UID PID PPID C STIME TTY TIME CMD
root 14017 14000 0 16:37 ? 00:00:00 python app.py
4.8 检查 WEB 应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
[root@lnmp ~]# docker inspect 52c0b3dd6592
[
{
"Id": "52c0b3dd6592f535c7c706c0e8aa18f550ed9b17867f6381f099abc860b0f94e",
"Created": "2019-07-09T08:37:47.896896672Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 14017,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-07-09T08:37:48.759008305Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
4.9 停止 WEB 应用容器
[root@lnmp ~]# docker stop 52c0b3dd6592
52c0b3dd6592
4.10 重启WEB应用容器
[root@lnmp ~]# docker start 52c0b3dd6592
52c0b3dd6592
4.11 查询最后一次创建的容器
[root@lnmp ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
52c0b3dd6592 training/webapp "python app.py" 8 minutes ago Up 40 seconds 0.0.0.0:4002->5000/tcp eloquent_herschel
4.12 删除WEB应用容器(删除前必须停止)
[root@lnmp ~]# docker rm 52c0b3dd6592
52c0b3dd6592
5. Docker 镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载
5.1 列出镜像列表
[root@lnmp ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f68d6e55e065 7 days ago 109MB
mysql 5.6 3ed1080b793f 4 weeks ago 256MB
centos 7.6.1810 f1cb7c7d58b7 3 months ago 202MB
php 7.0 cd45c80ef616 6 months ago 357MB
ubuntu 15.10 9b9cb95443b5 2 years ago 137MB
training/webapp latest 6fae60ef3446 4 years ago 349MB
解析:
(1)REPOSITORY:表示镜像的仓库源
(2)TAG:镜像的标签(同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,可以使用REPOSITORY:TAG来定义不同的镜像)
(3)IMAGE ID:镜像ID
(4)CREATED:镜像创建时间
(5)SIZE:镜像大小
如果不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像
5.2 获取一个新的镜像
[root@lnmp ~]# docker pull ubuntu:13.10
13.10: Pulling from library/ubuntu
a3ed95caeb02: Pull complete
0d8710fc57fd: Pull complete
5037c5cd623d: Pull complete
83b53423b49f: Pull complete
e9e8bd3b94ab: Pull complete
7db00e6b6e5e: Pull complete
Digest: sha256:403105e61e2d540187da20d837b6a6e92efc3eb4337da9c04c191fb5e28c44dc
Status: Downloaded newer image for ubuntu:13.10
5.3 查找镜像
从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
也可以使用 docker search 命令来搜索镜像
[root@lnmp ~]# docker search httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 2541 [OK]
centos/httpd 23 [OK]
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 22
armhf/httpd The Apache HTTP Server Project 8
polinux/httpd-php Apache with PHP in Docker (Supervisor, CentO… 3 [OK]
salim1983hoop/httpd24 Dockerfile running apache config 2 [OK]
rgielen/httpd-image-simple Docker image for simple Apache httpd based o… 1 [OK]
lead4good/httpd-fpm httpd server which connects via fcgi proxy h… 1 [OK]
解析:
(1)NAME:镜像仓库源的名称
(2)DESCRIPTION:镜像的描述
(3)OFFICIAL:是否docker官方发布
5.4 拖取镜像
使用httpd 官方版本的镜像,使用命令 docker pull 来下载镜像
[root@lnmp ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
fc7181108d40: Already exists
b183a5e3b6da: Pull complete
c52952f0d826: Pull complete
12159e0df4b9: Pull complete
46c097b10878: Pull complete
Digest:
sha256:c62e1946b2922d02155a46c0a1d9ba6fdc28a4ba91799c02c3a35332d47d2b94
Status: Downloaded newer image for httpd:latest
5.5 创建镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
(1)从已经创建的容器中更新镜像,并且提交这个镜像
(2)使用 Dockerfile 指令来创建一个新的镜像
5.51 更新镜像
[root@lnmp ~]# docker run -it ubuntu:15.10
root@ee8276fb1010:/# apt-get update #在运行的容器内使用 apt-get update 命令进行更新
root@ee8276fb1010:/# exit
[root@lnmp ~]# docker commit -m="been update" -a="laokong" ee8276fb1010 laokong/ubuntu:v2
sha256:658e046b1e990905dd4b2402237b6ba3e68185122636d8ad5495b2e1845ea7ba
sha256:658e046b1e990905dd4b2402237b6ba3e68185122636d8ad5495b2e1845ea7ba
[root@lnmp ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
laokong/ubuntu v2 658e046b1e99 About a minute ago 137MB
httpd latest 2283150097ca 9 hours ago 144MB
解析:
(1)-m:提交的描述信息
(2)-a:指定镜像作者
(3)ee8276fb1010:容器ID
(4)laokong/ubuntu:v2:指定要创建的目标镜像名
5.52 构建镜像
使用命令 docker build , 从零开始来创建一个新的镜像,需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建镜像
[root@lnmp dock]# vi Dockerfile
FROM centos:6.7
MAINTAINER Fisher "jimmyr2016@163.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd laowang
RUN /bin/echo 'laowang:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
解析:
(1)每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的
(2)第一条FROM,指定使用哪个镜像源
(3)RUN 指令告诉docker 在镜像内执行命令,安装了什么
[root@lnmp ~]# docker build -t laowang/centos:6.7 /dock/.
Sending build context to Docker daemon 2.048kB
Step 1/9 : FROM centos:6.7
6.7: Pulling from library/centos
cbddbc0189a0: Pull complete
Digest: sha256:4c952fc7d30ed134109c769387313ab864711d1bd8b4660017f9d27243622df1
Status: Downloaded newer image for centos:6.7
---> 9f1de3c6ad53
Step 2/9 : MAINTAINER Fisher "jimmyr2016@163.com"
---> Running in 1146c18d765c
Removing intermediate container 1146c18d765c
---> 97c0c2a67395
Step 3/9 : RUN /bin/echo 'root:123456' |chpasswd
---> Running in 598491f30d9e
Removing intermediate container 598491f30d9e
---> 5715cd589fa7
Step 4/9 : RUN useradd laowang
---> Running in 556c7d27d0a2
Removing intermediate container 556c7d27d0a2
---> b641a6c73a82
Step 5/9 : RUN /bin/echo 'laowang:123456' |chpasswd
---> Running in a8d14c13da43
Removing intermediate container a8d14c13da43
---> 5444b482746e
Step 6/9 : RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
---> Running in fdedfe1fc808
Removing intermediate container fdedfe1fc808
---> e117b478f734
Step 7/9 : EXPOSE 22
---> Running in a5c135bc0020
Removing intermediate container a5c135bc0020
---> ee37d8d93072
Step 8/9 : EXPOSE 80
---> Running in fbdee9f827bc
Removing intermediate container fbdee9f827bc
---> 95664707cfaa
Step 9/9 : CMD /usr/sbin/sshd -D
---> Running in f9b2e76520df
Removing intermediate container f9b2e76520df
---> d5e058a0cf01
Successfully built d5e058a0cf01
Successfully tagged laowang/centos:6.7
[root@lnmp ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
laowang/centos 6.7 d5e058a0cf01 About a minute ago 191MB
laokong/ubuntu v2 658e046b1e99 21 minutes ago 137MB
[root@lnmp ~]# docker run -it laowang/centos:6.7 /bin/bash
[root@c1bc1e63f18b /]# tail -1 /etc/passwd
laowang:x:500:500::/home/laowang:/bin/bash
使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像
解析:
(1)-t :指定要创建的目标镜像名
(2). :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
5.6 设置镜像标签
使用 docker tag 命令,为镜像添加一个新的标签
[root@lnmp ~]# docker tag d5e058a0cf01 laowang/centos:110
[root@lnmp ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
laowang/centos 110 d5e058a0cf01 7 minutes ago 191MB
6.Docker 容器连接
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息,会创建一个父子关系,其中父容器可以看到子容器的信
6.1 网络端口映射(默认tcp端口)
[root@docker ~]# docker run -d -P training/webapp python app.py
2064a0b17901c27963170540abd5bf79ea12327f78663fec66d47a41c0a11519
[root@docker ~]# docker run -d -p 5000:5000 training/webapp python app.py
4f370fc935b5be84bc79d761f343e854370c5e196c30f2f56cf9087b59d38a83
[root@docker ~]# docker run -d -p 127.0.0.1:5005:5000 training/webapp python app.py
526829ad94abef85fdd2d708716b38c56d837327f5acac6971a813bf2b7b280c
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
526829ad94ab training/webapp "python app.py" 33 seconds ago Up 27 seconds 127.0.0.1:5005->5000/tcp thirsty_matsumoto
4f370fc935b5 training/webapp "python app.py" 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp goofy_goldberg
2064a0b17901 training/webapp "python app.py" 13 minutes ago Up 13 minutes 0.0.0.0:4000->5000/tcp gallant_hoover
解析:
-P :是容器内部端口随机映射到主机的高端口
-p : 是容器内部端口绑定到指定的主机端口,还能指定IP地址
6.2 指定UDP端口
[root@docker ~]# docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py
860475c60b0c520e75ffe5b9f16abd4c3397af7176cd3d6481fd6399043858a9 #指定udp端口
6.3 容器命名
创建一个容器的时候,docker 会自动对它进行命名。也可以使用 --name 标识来命名容器
[root@docker ~]# docker run -d -P --name laowang training/webapp python app.py
d3838e86211a37b2e5b885844ad1ed9414aa82e1ed9467907f3115ca3b6bd82a
7.Docker 安装和部署 Nginx
容器nginx配置文件路径
/usr/share/nginx/html
/etc/nginx/nginx.conf
/var/log/nginx
[root@docker ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11665 [OK
[root@docker ~]# docker pull nginx
[root@docker ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f68d6e55e065 8 days ago 109MB
[root@docker ~]# docker run -d -p 8090:80 --name jimmy-nginx nginx
bff20de1a0e9cf08a102e445365cffdf0afa1c68b742561a24d3129e5896f294
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bff20de1a0e9 nginx "nginx -g 'daemon of…" 2 minutes ago Up About a minute 0.0.0.0:8090->80/tcp jimmy-nginx
[root@docker /]# mkdir -p /nginx/www /nginx/logs /nginx/conf #创建需要挂载的文件夹
[root@docker /]# docker exec -it bff20de1a0e9 /bin/bash #进入容器查看配置文件
[root@docker ~]# docker cp bff20de1a0e9:/etc/nginx/nginx.conf /nginx/conf #复制容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录
[root@docker ~]# docker run -d -p 8089:80 --name jimmyr-nginx-web -v /nginx/www:/usr/share/nginx/html -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /nginx/logs:/var/log/nginx nginx
2cd8fd89e1c674c5928683b5a2da01e220f333745e83df3cf860a572ab8a5845
解析:
(1)-p 8089:80 将容器的 80 端口映射到主机的 8082 端口
(2)–name jimmyr-nginx-web:将容器命名为 jimmyr-nginx-web
(3)-v /nginx/www:/usr/share/nginx/html:将/nginx/www挂载到容器的/usr/share/nginx/html
(4)-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将/nginx/conf/nginx.conf挂载到容器的 /etc/nginx/nginx.conf
(5)-v /nginx/logs:/var/log/nginx:将/nginx/logs挂载到容器的/var/log/nginx
[root@docker conf]# cd /nginx/www #进入本地www目录
[root@docker www]# vim index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>早起的鸟儿有虫吃(jimmyr2016)</title>
</head>
<body>
<h1>老孔,老陆,老方加油</h1>
<p>每天多学一点,多努力一点,游戏少玩一点</p>
</body>
</html>
8.Nginx + PHP 部署
容器php7.0-fpm配置文件路径:
/nginx/conf/conf.d/jimmyr-php.conf(本机)
容器里php 文件的存储路径:/www
容器里nginx 配置文件的存储目录:/etc/nginx/conf.d
[root@docker ~]# docker search php
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
php While designed for web development, the PHP … 4606 [OK]
[root@docker ~]# docker pull php:7.0-fpm
[root@docker ~]# docker run -d --name jimmyr-php --restart=always -v /nginx/www:/www php:7.0-fpm
6413df8ce9638a29fa63ef46d92a3f07a4f0fd4e5adb4a9ff72721349132b8fd
[root@docker ~]# mkdir /nginx/conf/conf.d #创建php配置文件目录
[root@docker ~]# cd /nginx/conf/conf.d/
[root@docker conf.d]# vi jimmyr-php.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
解析:
(1)php:9000: 表示 php-fpm 服务的 URL
(2)/www/: 是 myphp-fpm 中 php 文件的存储路径,映射到本地的 ~/nginx/www 目录。
[root@docker conf.d]# docker run -d --name jimmyr-php-nginx -p 8088:80 -v /nginx/www:/usr/share/nginx/html:ro -v /nginx/conf/conf.d:/etc/nginx/conf.d:ro --link jimmyr-php:php nginx
解析:
(1)-p 8083:80: 端口映射,把 nginx 中的 80 映射到本地的 8083 端口。
(2)/nginx/www: 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存储目录。
(3)/nginx/conf/conf.d: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录。
(4)–link jimmyr-php:php 把 jimmyr-php 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 10.0.0.150,让 nginx 通过 php:9000 访问 php-fpm
(5)ro 表示只读
[root@docker www]# cd /nginx/www
[root@docker www]# vi index.php
<?php
echo phpinfo();
?>
9.Docker 安装 MySQL
容器mysql配置文件路径:
mysql配置文件:/etc/mysql/my.cnf.d
mysql日志目录:/logs
mysql配置的数据文件:/var/lib/mysql
[root@docker www]# docker search mysql
[root@docker www]# docker pull mysql:5.6
[root@docker /]# mkdir -p /mysql/conf /mysql/logs /mysql/data
[root@docker /]# docker run -p 3306:3306 --name jimmyr-mysql -v /mysql/conf:/etc/mysql/conf.d -v /mysql/logs:/logs -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
91aed081e14217eb4187688343aa26f1b729b9945a8dcea5d8376aa687a6dbd0
解析:
(1)-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
(2)-v /mysql/conf:/etc/mysql/conf.d:将/mysql/conf目录挂载到容器的 /etc/mysql/my.cnf.d
(3)-v /mysql/logs:/logs:/mysql/logs目录挂载到容器的 /logs
(4)-v /mysql/data:/var/lib/mysql :将/mysql/data目录挂载到容器的 /var/lib/mysql
(5)-e MYSQL_ROOT_PASSWORD=123456:设置环境变量,初始化 root 用户的密码
10.Docker 配置 nginx、php-fpm、mysql
(1)(本地)nginx配置文件路径:/nginx/conf.d/default.conf
(2)(本地)nginx和php的html文件存储目录:/www
(3)(本地)mysql配置的数据文件存放路径:/mysql/data
(4)(本地)mysql日志目录:/mysql/logs
(5)(本地)mysql配置文件:/mysql/conf
(6)php文件的存储目录:(本地)/www挂载到(容器php)/var/www/html
(7)nginx文件的存储目录:(本地)/www挂载到(容器nginx)/usr/share/nginx/html
(8)nginx 配置文件的存储目录:(本地)/nginx/conf.d挂载到(容器nginx)/etc/nginx/conf.d
(9)mysql配置的数据文件:(本地)/mysql/data挂载到(容器mysql)/var/lib/mysql
(10)mysql日志目录:(本地)/mysql/logs挂载到(容器mysql)/logs
(11)mysql配置文件:(本地)/mysql/conf挂载到(容器mysql)/etc/mysql
- 创建nginx配置文件目录和php文件存储目录,运行php
[root@docker /]# mkdir -p /nginx/conf.d
[root@docker /]# mkdir /www
[root@docker /]# cd /nginx/conf.d/
[root@docker conf.d]# touch default.conf
[root@docker conf.d]# docker run -d --name jimmyr-php -v /www:/var/www/html:ro php:7.0-fpm
d7fb78df8da623d62e3728585a855d391a57f65880b313718f01c7e62e13e534
- 编辑 nginx 配置文件
[root@docker conf.d]# vi /nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
解析:
php:9000 表示 php-fpm 服务的访问路径
- 启动nginx
[root@docker conf.d]# docker run -d --name jimmyr-nginx -p 80:80 -v /www:/usr/share/nginx/html:ro -v /nginx/conf.d:/etc/nginx/conf.d:ro --link jimmyr-php:php nginx
c14611358eb1f739788149fb289d658865c989facb8664652f4e9ba53777790f
解析:
(1)-p 80:80 用于添加端口映射,把 jimmyr-nginx 中的 80 端口暴露出来
(2)/www 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存储目录
(3)/nginx/conf.d 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录
(4)–link jimmyr-php:php 把 jimmyr-php 的网络并入 jimmyr-nginx,并通过修改 jimmyr-nginx 的 /etc/hosts,把域名 php 映射成 10.0.0.150,让 nginx 通过 php:9000 访问 php-fpm
[root@docker conf.d]# cd /www
[root@docker www]# vi index.html
jimmy
[root@docker www]# vi index.php
老陆,老孔
- 配置mysql
[root@docker www]# mkdir -p /mysql/data /mysql/logs /mysql/conf
[root@docker www]# docker run -p 3306:3306 -d --name jimmyr-mysql -v /mysql/conf:/etc/mysql -v /mysql/logs:/logs -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --link jimmyr-php mysql:5.6
- 配置phpmyadmin
[root@docker www]# docker search phpmyadmin
[root@docker www]# docker pull phpmyadmin/phpmyadmin
[root@docker www]# docker run -d --name jimmyr-phpadmin --link jimmyr-mysql:db -p 8080:80 phpmyadmin/phpmyadmin
4b5fc0de3c73eb81dc84a9179bb40e085a60b7b4d11d33413825180940a9ea38