Docker 架构
Docker 包括三个基本概念:
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。为一个只读模板。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库用来保存镜像。
容器与镜像的关系类似于面向对象编程中的对象与类。在安装好并启动了Docker之后,我们可以使用在命令行中使用Docker命令操作Docker,比如我们使用如下命令打印Docker的版本信息。
docker version 打印版本信息

Docker的安装
1.查看是否安装docker
yum list installed | grep docker
2.安装docker
yum install -y docker
3.启动查看docker
systemctl start/stop/status docker
start 启动、stop 停止、status 状态
4.配置国内源
输入命令:vi /etc/docker/daemon.json
在该文件内编辑加入以下语句

systemctl daemon-reload systemctl restart docker
Docker相关操作
docker images 查看镜像列表 docker pull -a 80:80 仓库名 拉取镜像(仓库名则由作者名和软件名组成。可以从https://hub.docker.com上查找相关镜像) docker rm 镜像名 删除镜像 docker load < path 导出镜像(path是保存的路径)
docker ps -a 查看所有镜像
docker run -d --name 容器名称 镜像名称 启动容器
docker stop 镜像名称 停止容器
举例:
1.创建并运行一个容器
docker run --name mn -p 80:80 -d nginx
mn:容器名称
-p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口(这里的`-p`参数,是将容器端口映射到宿主机端口。默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了)
-d:后台运行容器
nginx:镜像名称
2.进入容器,修改文件
docker exec -it mn bash 或 docker exec -it 容器id /bin/bash
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mn :要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
注:若出现报错,①查看容器id②启动容器(docker start 容器id)③使用刚刚的命令即可进入

3.进入文件后,nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在/usr/share/nginx/html我们执行命令cd /usr/share/nginx/html,进入该目录。修改index.html的内容 容器内没有vi命令,无法直接修改,我们用下面的命令来修改:
sed -i -e 's#Welcome to nginx#Welcome to Docker!#g' -e 's#<head>#<meta charset="utf-8">#g' index.html

4.修改完成后打开主机浏览器,访问地址192.168.233.138

数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录,在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。
这就是因为容器与数据(容器内文件)耦合带来的后果。此时,使用数据卷就方便许多。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了
数据卷相关操作
docker volume create html 创建数据卷 docker volume ls 查看所有数据 docker volume inspect html 查看数据卷详细信息卷 docker volume rm html 删除指定数据卷(这里删除html数据卷) docker run --name mn -v html:/usr/share/nginx/html -p 80:80 nginx 给nginx挂载数据卷
案例:给MySQL挂载数据卷
1)拉取mysql镜像
2)创建目录/tmp/mysql/data
3)创建目录/tmp/mysql/conf,编辑默认配置文件my.cnf
4)去DockerHub查阅资料,创建并运行MySQL容器,要求:
① 挂载/tmp/mysql/data到mysql容器内数据存储目录
② 挂载/tmp/mysql/conf/my.cnf到mysql容器的配置文件
③ 设置MySQL密码
5)设置mysql密码
docker run --name mysql -e MYSQL_ROOT_PASSWORD=输入自己设置的密码 -v /tmp/mysql/data/:/var/lib/mysql -v /tmp/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf -p 3306:3306 --privileged -d mysql
6)添加新的端口,这里我设置的端口是3306,配置防火墙通行条件
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload 重新载入防火墙禁止进入规则
7)win+r 输入services.msc查看MySQL服务,启动服务,然后通过主机所下载的MySQL路径win+r进入命令编辑,输入命令
mysql -h 192.168.233.138 -P 3306 -uroot -p