mysql docker自动化_容器自动化(一):docker基础(上)

一,Docker简介,功能特性与应用场景

1.1 Docker简介

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

Docker Client 客户端

Docker Daemon 守护进程

Docker Image 镜像

Docker Container 容器

1.2 Docker功能特性

隔离环境(系统,网络,文件系统)与应用

解决依赖与版本问题

易于分发,开箱即用

节点与容器快速扩容

镜像制作简单便捷,管理方便

(1)隔离

通过cgroup(隔离和跟踪资源的使用)& namespace(组与组之间隔离)来实现轻量级的进程隔离

对于容器中运行的进程来说,自己独占了一个系统

容器间网络,文件及其他资源都互相隔离

(2)版本与依赖

传统模式下,多个不同环境或版本的项目需要部署在不同机器上,部署与后期维护管理复杂繁琐。

使用Docker,通过多个不同版本或者环境的镜像,可以同时运行在一台机器上互不干扰,部署与后期维护简单方便。

(3)分发与使用

镜像可以通过导入,导出,上传到镜像仓库等多种方式进行分发

在启动了Docker的系统上直接使用docker run即可启动镜像,无需特别配置。

(4)扩容

容器扩容简单方便

扩容节点只需安装并启动Docker即可

(5)镜像制作

镜像的灵魂Dockerfile

使用Dockerfile进行指令控制

基于Linux命令,易于理解,快速上手

易于定制与修改

1.3 Docker应用场景

Docker通常应用于如下场景:

web应用的自动化打包和发布;

自动化测试和持续集成,发布;

应用服务,如MySQL,Redis等,通过Docker实现快速部署;

k8s私有云

1.3.1 场景1:多版本多种类系统与软件

4190a43fb1a0a854a45bdfee70eba41b.png

1.3.2 场景2: 环境

28d313d9597dadf563ab6145e51b5073.png

1.3.3 场景3: 分发

67fb05ce80bd11081e4bfac0c111890e.png

二,Docker的安装

2.1 安装环境

最小化安装Centos7.5,关闭防火墙和selinux

6baa3d0bc4d569115544950c2051baf7.png

2.2 版本选择

Docker

17.03之后版本变为Docker CE

Docker CE

社区版,Community Edition

Docker EE

企业版,Enterprise Edition

收费版本,强调安全性,提供一些高级特性及商业支持

2.3 Docker安装:标准版本

[root@Docker ~]# yum -y install docker

3ce8443fdfbd17baf29eb2079ff01d70.png

2.4 Docker安装:CE社区版

首先清理掉yum安装的docker标准版

这里有两种方式

第一种清理docker方法:

[root@Docker ~]# yum -y remove docker

第一种清理docker方法:

[root@Docker ~]# yum history list       #查看yum安装的历史列表

[root@Docker ~]# yum history info 16      #查看yum历史安装ID为6的安装信息

84950c8e7eb3b18ed21194ddc27971f3.png

[root@Docker ~]# yum -y history undo 16      #进行yum安装操作回退

安装Docker的CE社区版

安装依赖包

[root@Docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2

添加docker的CE版本的yum源配置文件

[root@Docker ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

5e407acd1108e98cda255e3eb6b9f3db.png安装CE版本的docker

[root@Docker ~]# yum -y install docker-ce

启动docker,添加开机启动,查看docker版本

[root@Wangwenli ~]# systemctl start docker

[root@Wangwenli ~]# systemctl enable docker

[root@Wangwenli ~]# docker version

0f9915a8e34ab6c51bdcc74535298318.png

三,Docker的操作命令

3.0 添加docker国内镜像源

在开始学习docker之前,我们首先要更改一下docker的默认源镜像下载地址(默认是从国外下载,很慢),我们需要添加国内的源地址

[root@Wangwenli ~]# cat /etc/docker/daemon.json

{

"registry-mirrors":[ "https://registry.docker-cn.com" ]

}

25aed2aa8a9cba94defe04d2b3579eb0.png

[root@Wangwenli ~]# systemctl daemon-reload

[root@Wangwenli ~]# systemctl restart docker

3.1 Docker命令:search(用于从docker的官方公有镜像仓库查找镜像)

[root@Wangwenli ~]# docker search centos

b44fa6d29ada3a746d9f30105797a5f6.png

特别说明:

Name:镜像的名字

DESCRIPTION:描述

STARS:星级(越高越好)

OFFICIAL:是否是官方发布的

AUTOMATED:是否自动化的

(2)查找星级多于100的centos镜像

[root@Wangwenli ~]# docker search centos -f stars=100

5e75d0d140ae80c8c586404c787cc1c4.png

特别提示:

/:符号用于分割作者名称和镜像名称

ansible/centos7-ansible:ansible是作者名称,centos7-ansible是镜像名称

(3)多条件查找--filter

查找官方发布的,星级大于100的centos镜像

[root@Wangwenli ~]# docker search centos --filter is-official=true --filter stars=100

0007b5866f15fbacd027187ff7902d38.png

3.2 Docker命令:pull(用于从Docker Hub上下载公有镜像)

查找符合条件的hello-world镜像

[root@Wangwenli ~]# docker search hello-world --filter is-official=true --filter stars=100

bf069f3c430be549f5ce7b4609d0c704.png

下载目标hello-world镜像

[root@Wangwenli ~]# docker pull hello-world

fefd8e3178cf2644e7c6317ba7cb0344.png

下载目标centos:7镜像(网速不好的话,需要点时间耐心等待)

[root@Wangwenli ~]# docker pull centos:7

3.3 Docker命令:images

用于本地镜像的查看

2af5365d10998e273853ecadaf3319e9.png

特别说明:

REPOSITORY:镜像仓库(下边罗列的都是本地已有镜像名称)

TAG:镜像的标记(为了区分同名镜像)

IMAGES ID:镜像的ID号

CREATED:此镜像的创建时间

SIZE:此镜像的大小

3.4 Docker命令:build

用于本地自定义镜像的构建,需要创建Dockerfile文件

创建Dockerfile文件的存储目录

[root@Docker ~]# mkdir -p /root/dockerfile/lib/centos/7

[root@Docker ~]# cd /root/dockerfile/lib/centos/7

创建docker.sh脚本

[root@Docker 7]# vim docker.sh

[root@Docker 7]# cat docker.sh

#!/bin/bash

while true

do

echo "nihao"

sleep 5

done

创建Dockerfile配置文件,文件名称必须为Dockerfile,第一个字母必须大写

[root@Docker 7]# vim Dockerfile

[root@Docker 7]# cat Dockerfile

FROM centos      #从centos源镜像的基础上进行构建

LABEL MAINTATNER="wwl"     #作者的名称

RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    #RUN:在镜像构建过程中运行命令

ADD docker.sh /home/test/ #从本地系统中把docker.sh文件添加到构建中的镜像的/home/test/目录下

RUN chmod +x /home/test/docker.sh   #在镜像构建过程中运行命令

CMD ["/home/test/docker.sh"]   #构建镜像完成时,最后执行的命令

根据Dockfile配置文件构建一个自定义镜像

[root@Docker 7]# docker build -t wwl/centos7:1 .   #-t 指定镜像名称 :1 设定镜像的tag标记

b216de76b841bc53bceadd1b39e55c8a.png

8329daddf9634676bb1595b01607d352.png

3.5 Docker命令:run

运行一个本地镜像

[root@Docker 7]# docker run -dit 930caa8ceeb6 /bin/bash

1af173b11dbb11131a823f9ef64979cf2db906bb2d442d00447cc8161971cc66

特别提示:

docker run:运行一个指定的images id

-d:放在后台运行

-i:可以进行命令交互

-t:制作一个伪终端用于登陆

930caa8ceeb6:镜像的ID,可以简写成930

3.6 Docker命令:ps

查看已经运行的镜像的进程

[root@Docker 7]# docker ps -a  #查看所有运行的镜像进程(包含退出的exit)

6dd68731a6fdddeee174b568d9d47817.png

特别提示:

STATUS:进程的状态,UP表示正在运行中,EXIT表示已经退出了。

3.7 Docker命令:attach

从本地系统中切入到某个STATUS状态是UP的镜像进程里

[root@Docker 7]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS

NAMES1af173b11dbb        930caa8ceeb6        "/bin/bash"         4 minutes ago       Up 4 minutes

upbeat_napier[root@Docker 7]# docker attach 1af173b11dbb  #切入到容器号为1af173b11dbb的镜像进程里

[root@1af173b11dbb /]# ls     #已经进入容器里了

anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

[root@1af173b11dbb /]# exit   #退出容器

exit

[root@Docker 7]# docker ps -a    #容器的进程的STATUS已经处于EXIT状态(之前是后台运行的,切入进去后执行exit就等于手动退出了)

5146949080308f11aa174fb04821e7b2.png

3.8 Docker命令:stop

用于停止一个正在运行着的容器进程

f35a105bf6c77800cb8898b718fc0643.png

再次在后台启动一个镜像

增加了一个容器进程

4f82e9bf948a0c364366517369938d3c.png

停止一个运行着的容器进程

8354b4ebc1225fa9fa15fa6b3b077429.png

3.9 Docker命令:start

用于启动一个已经停止了的容器进程

df30be9f592b9e1b5f39e713c0c2baea.png

3.10 Docker命令:rm

用于删除一个已经停止了的容器进程

88775839021649c168bc937e745f8534.png

3.11 Docker命令:rmi

用于删除一个未用作容器启动的本地镜像

66a9f5371d4aaf63dda36ef05991190c.png

[root@Docker 7]# docker rmi 930

Error response from daemon: conflict: unable to delete 930caa8ceeb6 (cannot be forced) - image is being used by running container 8576060bb73d     #但要注意,被用作容器启动的镜像是不能删除的(需先rm删除容器进程)

[root@Docker 7]# docker rmi -f 930

Error response from daemon: conflict: unable to delete 930caa8ceeb6 (cannot be forced) - image is being used by running container 8576060bb73d   #强行删除被容器进程占用的镜像也是不行的

查看容器进程,被占用中

7cb71fa7888666496ac9593d5c9169bf.png

3.12 Docker命令:commit

将一个更改过的容器进程的容器状态保存为一个新的镜像

查看启动的容器进程

42ed45ff9d228bffda62997dece745f0.png

切入容器进程,在容器进程里创建yunjisuan目录,退出容器进程

ac0118efb66b44eb03cd5eb5b9dc3179.png

7b63d3dd4e7bd4050e8e52a2a07da59f.png

将更改后的容器进程保存为一个新的镜像

[root@Docker 7]# docker commit 857 wwl/centos:2

sha256:e11d502b90bc022ae5d8ed6b068e25e45f50a89edf6d9dfaf6caa7ede44c4acb

0516fc3a5c94f4221bff892293d8b8ed.png

启动新保存的镜像

[root@Docker 7]# docker run -dit e11 /bin/bash

0ffd2ef0e3bdaa36f02cc4f59ea0e19c2355878dbe820e9053e7d4a8aafda7bd

查看新镜像的容器进程

bbd1c6af45aba55d9e8508c342e4a3da.png

切入新镜像的容器进程,我们发现之前创建的目录仍旧存在

d1953c2a6dd44edde08796937da202a5.png

3.13 Docker命令:exec

用于从本地操作系统上直接向容器进程发布执行命令并返回结果

d0f5c3034013da04c19633f6f9b49ef5.png

[root@Docker ~]# docker exec 0ff ls /tmp  #查看容器进程里的/tmp目录下所有内容

ks-script-h2MyUP

yum.log

[root@Docker ~]# docker exec 0ff ls -d yunjisuan   #查看容器进程里/yunjisuan目录

yunjisuan

3.14 Docker命令:cp

用于在容器进程和本地系统之间复制文件

d7fa5b6bea79798e02f7a236c1062765.png

[root@Docker ~]# docker exec 0ff ls /tmp    #向容器进程发布命令

ks-script-h2MyUP

yum.log

[root@Docker ~]# docker cp 0ff:/tmp/yum.log .    #将指定容器进程的/tmp/yum.log复制到当前目录下

[root@Docker ~]# ls

anaconda-ks.cfg  dockerfile  yum.log    #已经复制过来了

[root@Docker ~]# docker cp anaconda-ks.cfg 0ff:/tmp/   #将本地文件复制到容器进程里

[root@Docker ~]# docker exec 0ff ls /tmp

anaconda-ks.cfg  #复制成功

ks-script-h2MyUP

yum.log

3.15 Docker命令:create

用于创建一个容器进程,但是并不启动它

0124fc8c097911e335a40155b65b27eb.png

3.16 Docker命令:diff

查看容器进程与源镜像做对比,发生了改变的文件或文件夹

04f67e462affabb4220b98a6b40f40cc.png

启动一个镜像的容器进程

[root@Docker ~]# docker run -dit e11

d1e90a6a0013e735c4fca03f1325e9a966fd356bec8d33bc534c1c73e7d90b30

fd4140380715322321c06ca1f816b744.png

切入容器进程,在容器进程中创建文件,退出容器进程

b86a0a9d4f90088ec4a20d78b7bd24aa.png

查看容器进程的变化

53288e8618135110a1a824fed283ed29.png

3.17 Docker命令:events

时时监测容器的变化情况

前台时时监控容器的变化若要检测,需要另外再起一个窗口进行操作

96d9de071e79e3eec0ba7ec67057261a.png

663643a9b785115096e5e93216cfa7ed.png

3.18 Docker命令:export

将容器进程的文件系统导出到本地

6f69281f1505e427b7bda859f1cfaa1a.png

将容器进程导出成一个tar包

62052c2c80f52fc8e52a534d79c0d7f5.png

3.19 Docker命令:import

用于将export导出的文件系统创建为一个镜像

a24612fada72218a0f15b4471fb1938d.png

3.20 Docker命令:history

用于查看一个镜像的历史修改纪录

67e66c617f208f0bd65f388379b330d1.png

3.21 Docker命令:info

用于查看当前操作系统的docker运行信息

[root@Docker ~]# docker info

Containers: 1    #容器进程1个

Running: 1       #正在运行状态的容器1个

Paused: 0

Stopped: 0

Images: 8    #一共有8个镜像

Server Version: 18.09.1

Storage Driver: overlay2

Backing Filesystem: xfs

Supports d_type: true

Native Overlay Diff: true

Logging Driver: json-file

Cgroup Driver: cgroupfs

Plugins:

Volume: local

Network: bridge host macvlan null overlay

Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

Swarm: inactive

Runtimes: runc

Default Runtime: runc

Init Binary: docker-init

containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce

runc version: 96ec2177ae841256168fcf76954f7177af9446eb

init version: fec3683

Security Options:

seccomp

Profile: default

Kernel Version: 3.10.0-862.el7.x86_64

Operating System: CentOS Linux 7 (Core)

OSType: linux

Architecture: x86_64

CPUs: 1

Total Memory: 974.6MiB

Name: Docker

ID: 5YNS:BXNE:O23E:DZWE:ST6K:OEXH:LBAB:DCAD:5W3D:RUJU:FQ64:3O5O

Docker Root Dir: /var/lib/docker

Debug Mode (client): false

Debug Mode (server): false

Registry: https://index.docker.io/v1/

Labels:

Experimental: false

Insecure Registries:

127.0.0.0/8

Registry Mirrors:

https://registry.docker-cn.com/

Live Restore Enabled: false

Product License: Community Engine

3.22 Docker命令:inspect

查看某个镜像的详细信息

a33f1a6b45f9fe4996175b9180c9217a.png

[root@Docker ~]# docker inspect ea32ac5ede08

[

{

"Id": "sha256:ea32ac5ede089e65676f3e00b7580be456234206999e75c767debd0071c7d7a7",

"RepoTags": [

"wwl/centos:3"

],

"RepoDigests": [],

"Parent": "",

"Comment": "Imported from -",

"Created": "2019-01-14T07:43:56.554044061Z",

"Container": "",

"ContainerConfig": {

"Hostname": "",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": false,

"AttachStderr": false,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": null,

"Cmd": null,

"Image": "",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": null

},

"DockerVersion": "18.09.1",

"Author": "",

"Config": {

"Hostname": "",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": false,

"AttachStderr": false,

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": null,

"Cmd": null,

"Image": "",

"Volumes": null,

"WorkingDir": "",

"Entrypoint": null,

"OnBuild": null,

"Labels": null

},

"Architecture": "amd64",

"Os": "linux",

"Size": 201779577,

"VirtualSize": 201779577,

"GraphDriver": {

"Data": {

"MergedDir": "/var/lib/docker/overlay2/3da3b10942aa4ef821dbe590d8c1b968ca72c06430618ffd317f

a0920ca860bd/merged",                "UpperDir": "/var/lib/docker/overlay2/3da3b10942aa4ef821dbe590d8c1b968ca72c06430618ffd317fa

0920ca860bd/diff",                "WorkDir": "/var/lib/docker/overlay2/3da3b10942aa4ef821dbe590d8c1b968ca72c06430618ffd317fa0

920ca860bd/work"            },

"Name": "overlay2"

},

"RootFS": {

"Type": "layers",

"Layers": [

"sha256:f92b22b571a9faebf9f5e013f8f7d84c0181c0610fdb8b20fc2da22f43b0b56d"

]

},

"Metadata": {

"LastTagTime": "2019-01-14T15:43:56.603952511+08:00"

}

}

]

3.23 Docker命令:kill

强行停止一个或多个正在运行状态的容器进程

362a21dda5c1f228c52c00dfd707b3c6.png

3.24 Docker命令:save

用于将一个镜像的文件系统导出到本地(export导出的是容器)

重新build一个镜像

7677b47f8804cde02b3d50252cc589e0.png

save导出test:1这个镜像(也可以用id号)

1f0e1a9cf63700e0bcf22c5b978a3185.png

3.25 Docker命令:load

用于将save导出到本地的tar包,重新加载为镜像(和源镜像的名字标识完全一样)

删除别的镜像,就保留两个

56178d0906f232c1517dd451363e0c36.png

将之前test:1这个镜像的save备份导入系统

30a9198609a1dd9b384860965e665106.png

3.26 Docker命令:logs

用于输出一个容器进程内的操作日志

be9f4a2936de1f08bc8fbaa107285050.png

只显示容器日志的后5行

2549680591ab363aa5f24b22c7eb3e4c.png

3.27 Docker命令:pause && unpause

用于将一个或多个容器的进程暂停和恢复

1564c971977166ea05aa12f161d6c66b.png

3.28 Docker命令:port

用于列出一个容器的端口映射及协议

[root@Docker 7]# docker run -dit -p 6666:22 test:1  #启动一个镜像的容器进程 -p 指定本地6666端口映射到容器的22端口

d7641bcd7949432b0eaa084bd7600cf2631add788ecb2ec6f124ffa2532a5bd0

[root@Docker 7]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PO

RTS                  NAMESd7641bcd7949        test:1              "/home/test/docker.sh"   5 seconds ago       Up 3 seconds        0.

0.0.0:6666->22/tcp   romantic_gates2d5d764e0e22        test:1              "/home/test/docker.sh"   4 minutes ago       Up 4 minutes

silly_jackson

查看容器进程的端口映射及协议

[root@Docker 7]# docker port d7641bcd7949

22/tcp -> 0.0.0.0:6666

[root@Docker 7]# docker pull nginx

ca604add52575f3b13675ad61d93f433.png

[root@Docker 7]# docker run -dit --name nginx_test -p 80:80 7042885a156a  启动本地镜像nginx,进程名叫nginx_test,将本地的80端口映射到容器的80端口

97100eefd9910daee43c6596801311c4.png

nginx关闭了守护模式,就相当于nginx在前台启动了,平常启动nginx是在后台启动,但是放后台启动容器启动不了,所以在启动时关闭了nginx的守护模式

7d22cf8b5f2c7be79408f337c7898103.png

本地没有安装nginx,看的就是容器里的nginx,就是访问宿主机的80端口,映射到了容器里的80端口

3.29 Docker命令:rename

给容器进程重命名

e2bf39c00868616818ab1e20e82d6db6.png

3.30 Docker命令:restart

重启一个容器进程

fbb2bfd9a05e175b333013cfc02dd636.png

3.31 Docker命令:stats

用于时时输出容器的资源使用情况

514982cc8b5d3ef6739c24d83a207eee.png

9cfedaa8c27349ab5bf07ae7948264e2.png

--no-tream只输出一次

dcd64795b4d2009ab8b7a36f70aa29fd.png

3.32 Docker命令:tag

用于从一个指定的镜像创建另外一个镜像

9dafaf61e4dc8047616d5c09a4242921.png

3.33 Docker命令:top

用于显示指定容器的进程信息

53e3945fd00cf14dddc9e43867237526.png

3.34 Docker命令:update

用于调整一个或多个容器的启动配置

57f15a567bd11a49988720f40f3c366e.png

3.35 Docker命令:version and wait

version用于显示docker的版本信息

wait用于捕捉一个或多个容器的退出状态,并返回退出状态码

显示docker版本信息

a591937d2d6df9cbe0caff1114bb9943.png

监听容器的退出状态并返回状态码

bf3daef0cf10d4fab4431ab798c35cf8.png

[root@Docker 7]# docker wait wwl

需要在开一个窗口stop这个容器进程再查看

ddd3454ad1e32e36181423f74021abb4.png

3aa6f07a83037c8cbb373d5cd9da032f.png

3.36 Docker命令:login && logout && push

login用于登陆docker hub官方公有仓库

logout用于登出docker hub官方公有仓库

push用于将本地镜像提交到docker hub

由于docker hub国内已经无法注册,因此无法演示上述内容

四,管理应用程序数据

4.1 Volume和Bind Mount

将Docker主机数据挂载到容器

Docker提供三种不同方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。

volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)

bind mounts:可以存储在宿主机系统的任意位置

tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统

71cdf54fc0fedb8a278f14d18d552eaa.png

4.1.1 Volume

创建一个卷

09094dd00f7730cc35e384e978fd7245.png

下载一个nginx官方镜像(前面已经下载过)

[root@Docker 7]# docker run -dit --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/

html nginx

2f512e3012c467bd06d52ff4367f18ab.png

特别说明:

--name:容器的名字

--mount:挂载

src:源卷的名字

dst:挂载到容器中的路径

向容器中的挂载目录创建文件,查看是否挂载成功

[root@Docker 7]# docker exec nginx-test touch /usr/share/nginx/html/test.txt

[root@Docker 7]# docker exec nginx-test ls /usr/share/nginx/html/

50x.html

index.html

test.txt   #有了

[root@Docker 7]# ls /var/lib/docker/volumes/nginx-vol/_data/

50x.html  index.html  test.txt  #成功

清理容器进程

051d7101e9b232ae6f23a2cb280fbf75.png

清理容器后,挂载的卷的数据仍旧存在

f2a51e591feee75a995a130ea188dd5e.png

重新启动镜像nginx的容器进程

7decf3772b04dedb4de845f61e9df40f.png

特别提示:

docker run的-p参数:指定端口的映射,88:80的意思就是将宿主机88端口的访问映射到容器进程的80端口

现在我们通过浏览器访问宿主机的88端口,进而访问容器进程的80端口

41031ae684694405e5451d8a01d7fb65.png

在数据卷nginx-vol里换一个网页在访问

b99cbf834b1ed9c246561d1adc318ddb.png

335c27251c8606ecf2012aabb6eeb84a.png

现在我们再启动一个镜像nginx的进程,让两个nginx的容器进程公用一个数据卷nginx-vol

[root@Docker 7]# docker run -dit --name nginx-test2 -p 89:80 --mount src=nginx-vol,dst=/usr/sh

are/nginx/html nginx

8e6cb04e7e976b1f78142b8d0aa5575a.png

我们用浏览器访问docker宿主机的89端口

2b61fd7de2f8fd9c92b4bf50e81c0fbb.png

4.1.2 Bind Mounts

[root@Docker 7]# docker run -dit --name nginx-test3 -p 90:80 --mount type=bind,src=/var/lib/do

cker/volumes/nginx-vol/_data,dst=/usr/share/nginx/html nginx

a1d3fcf3e82c19029fc61d1dfd4d70b0.png

我们用浏览器访问docker宿主机的90端口

ac4a345a14b62ea1df66b6d60207f08b.png

特别提示:

bind mounts可以挂载宿主机上的任意目录,而volume先得创建后才能挂载

用卷管理,卷创建好是空的,然后挂载到镜像里,镜像里的源目录是有东西的,它会自动出现在卷里,但是bind mounts会把镜像里的东西给顶了,以这种方式挂过去,默认是以自己目录为主,如果用卷,是以对方目录为主

4.2 实战容器部署LNMP网站平台

首先我们下载一个wordpress博客

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

4.2.1 创建MySQL数据库容器

下载MySQL5.6版本镜像:[root@Docker ~]# docker pull mysql:5.6

547ee0282eb3dab62b36b0a9dfd178ef.png

[root@Docker ~]# docker network create lnmp  #创建一个自定义网络

启动MySQL数据库容器

[root@Docker ~]# docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 --mount src=mys

ql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8

索引的长度不能超过254=254x3字节(一个汉字三字节),索引太长容易影响sql的效率

d4f1d987281d3ebee92af17cf7a75656.png

特别提示:

自定义网络lnmp如果不提前创建的话,在启动容器进程时会报错

如果没有提前pull好mysql:5.6那么容器在启动时会自动下载对应镜像

如果没有提前docker volume create mysql-vol,那么容器启动时会自动创建

4.2.2 向容器里的Mysql创建一个库

[root@Docker ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

7a5eb1b5a61245de22b801ec50c0c28e.png

4.2.3 查看添加的库

f5d0c732cbc89aa0d94712a2454c41f5.png

4.2.4 创建nginx+PHP环境容器

nginx和PHP都需要访问网页目录,并且nginx和php的网页路径必须一样,nginx和tomcat配合就不是,tomcat自己可以独立访问动静态,只是tomcat处理静态很差,太慢,前面才加了nginx,然后nginx推给8080端口就到了tomcat

创建一个网页目录

67a595a181ecbbee8888a3024dd5aa4c.png

下载richarvey/nginx-php-fpm镜像

[root@Docker ~]# docker pull richarvey/nginx-php-fpm

562684283f750e0ec2824825c1136e97.png

启动richarvey/nginx-php-fpm镜像的容器

[root@Docker ~]# docker run -dit --name lnmp_web --network lnmp -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

51bfaad723735673d4b80892be641af9.png

e87acdd6906384f028ab2a5b0ab17b46.png

4.2.5 解压wordpress到网页目录/app/wwwroot下

a15760e938deaeb6d455de59fccffa75.png

建一个静态首页

4175b305f499cfbbad7ce03f5953bb25.png

4.2.6 博客wordpress访问测试

0fd295024ed2c80651d4e56225468216.png

如果还访问不了,那么执行下面的,重启docker

11fdd9705953c5954249444b1e9bbcd8.png

通过浏览器进行docker宿主机的88端口的访问测试

http://IP:88/

访问成功后再去访问

30f9dec5001da64e1ff78d76fbea2c8b.png

e14f34a21f0dad77f4781257aef41242.png

特别提示:

如果多次连续访问同一网页,那么浏览器有可能默认去掉指定的端口

因此,若访问不到,请查看是否指定了88端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值