任务:利用docker搭建一个本地的cms

目的:熟悉docker的使用,学习基于容器的应用部署

引题

​ docker其实是一种虚拟化的技术,当前我们所了解的虚拟化可以分为主机虚拟化(熟知的vmware)和容器虚拟化(即docker),区别在于容器虚拟化的是操作系统而不是硬件,主机虚拟化是在物理机的基础上再搭建一个完整的主机系统。

​ 用一句话来概括的话,主机级虚拟化就是通过各种各样的手段,把物理资源重新分配,然后抽象出一部分拿来做虚拟机的虚拟硬件,是对硬件的模拟;而容器虚拟化技术相当于把操作系统进行虚拟化,把物理的操作系统模拟为逻辑上的多个操作系统,不同的操作系统有自己的用户空间,实现了应用程序间的隔离。

两者的对比:

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

总结一下docker的优势:运行环境一致、更快的启动速度、隔离性、快速扩展、迁移方便、持续交付和部署、高内聚和低耦合。

docker基本概念

Image(镜像)——一个特殊的文件系统:

相当于是一个 root 文件系统,用于创建 Docker 容器的模板,比如 Ubuntu 系统。

Container(容器)——镜像运行时的实体:

容器是独立运行的一个或一组应用,是镜像运行时的实体,镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Repository(仓库)——集中存放镜像文件的地方:

仓库可看成一个代码控制中心,用来保存镜像。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

展示一下我的镜像仓库:

实战

利用不同平台搭建blog

常用的命令:

sudo docker ps #查看正在运行的container
sudo docker ps -a #查看本地container列表
sudo docker images #查看本地镜像
sudo docker -v #查看docker版本
sudo docker-compose -v #查看docker-compose版本
sudo docker-compose up -d #建立连接运行镜像
sudo docker pull tag #从仓库pull一个镜像到本地
sudo docker push tag #从本地push一个镜像到仓库
sudo docker run -it 镜像名称 /bin/bash #使用某一镜像来运行容器
sudo docker run -it 容器id /bin/bash #启动某一容器(退出时容器会关闭)
sudo docker exec -it 容器id /bin/bash #启动某一容器(退出时容器不会关闭)
sudo docker stop container/image #停止镜像或容器运行
sudo docker start container/image #开启镜像或容器
sudo docker rm container #删除容器
sudo docker rmi image #删除镜像

1、安装docker

菜鸟教程提供了一键安装的命令可以直接使用:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2、更新 apt 包索引

sudo apt-get update

3、更新仓库源:

sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"

4、查看docker版本:

sudo docker -v

5、测试docker是否已经安装成功可以运行:

sudo docker run hello-world

6、下载是用于定义和运行多容器 Docker 应用程序的工具docker-compose

sudo apt-get install docker-compose

至此,我们的环境已经搭建完毕,下面就开始搭建blog

我打算利用mysql+wordpress来搭建一个cms

环境:ubuntu16.04、mysql5.6、wordpress:latest

环境已经编号,下面来编写docker-compose.yml文件

version: '3'         # docker-compose的版本
services: #一个service表示一个container
wordpress:
image: wordpress #选择镜像
restart: always #重启策略
ports: #映射到本地的80端口
- 80:80
environment:
WORDPRESS_DB_HOST: db #wordpress的选择的数据库
WORDPRESS_DB_USER: exampleuser #数据库用户
WORDPRESS_DB_PASSWORD: examplepass #数据库密码
WORDPRESS_DB_NAME: exampledb #数据库名
networks:
- jackxu-net #配置容器连接的网络
volumes:
- wordpress:/var/www/html #将主机的数据卷或着文件挂载到容器里

db:
image: mysql:5.6 #镜像
restart: always #重启策略
environment:
MYSQL_DATABASE: exampledb #mysql名
MYSQL_USER: exampleuser #mysql用户
MYSQL_PASSWORD: examplepass #mysql密码
MYSQL_RANDOM_ROOT_PASSWORD: '1' #随机一个root账户密码
volumes:
- db:/var/lib/mysql
networks:
- jackxu-net

volumes:
wordpress:
db:

networks:
jackxu-net:
driver: bridge #桥接模式

运行脚本

然后进入本地的80端口开始博客的配置

然后可以美化自己的本地博客,至此,利用docker搭建本地cms完成

成果图: