Docker安装及应用

目录

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

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值