了解docker
docker 一种操作系统层面的虚拟化技术。
注:/var/lib/docker docker目录
优点
- 占用磁盘空间小,启动速度快
- 各容器之间相互隔离
- 快速部署项目
- 迁移方便
缺点
docker出来的容器(小虚拟机)不是完整操作系统,是基于完整操作系统产生的。
docker架构
docker 镜像
镜像: 一种比较特殊的文件系统,相当于容器模板,作用:按照模板产生容器、对外提供拷贝
# 查找镜像
docker search 要查找的镜像名
# 下载(拉取)镜像
docker pull 镜像名:版本(版本若省略,则最新版latest)
# 查看系统已有镜像
docker images
# 删除镜像
docker rmi 镜像id
定制镜像:
vi Dockerfile
在文件内添加指令内容。Dockerfile是用来构建镜像的文件。docker build -t 镜像名:镜像标签 .
注:最后的 . 代表本次执行的上下文路径
docker 容器
容器: 一种进程,运行在独立环境中,从镜像中产生,容器之间互相独立
格式:docker run -d -p 端口映射 -v 路径映射 镜像名
注:Apache 端口 80,项目路径 /app
# 创建容器 --privileged=true 去掉selinux影响
docker run -d -p 8081:80 -v /home/web/demo1:/app --privileged=true webdevops/php-apache-dev
# 查看容器(容器id可用前4位)
docker ps -a
# 进入容器(需运行的容器)
docker exec -it 容器id bash
# 退出容器
ctrl P+Q、ctrl d、exit
# 停止
docker stop 容器id
# 开启
docker start 容器id
# 删除
docker rm 容器id
docker 仓库
仓库: 存放镜像文件的地方。daocloud网站-docker镜像仓库
配置下载源,加速下载,daemon.json 中添加以下内容:
{
"registry-mirrors": ["https://wixr7yss.mirror.aliyuncs.com"]
}
# 修改daemon.json文件,添加以上内容
vi /etc/docker/daemon.json
# 添加内容后,重加载、重服务
systemctl daemon-reload
systemctl restart docker
docker 数据卷
数据卷: 一种目录结构经常被容器做路径上的映射
优点
- 对数据卷更新会立即更新
- 对数据卷更新不会影响镜像
- 数据卷的生命周期独立于容器
# 创建数据卷
docker volume create 数据卷名
# 查看数据卷对应目录
docker volume inspect 数据卷名
# 查看系统数据卷
docker volume ls
# 删除数据卷
docker colume rm 数据卷名
docker 网络
让多个容器之间互相通信,只要将容器放到docker网络中即可
# 创建网络
docker network create 网络名
# 查看网络对应的容器
docker network inspect 网络名
# 查看系统中docker网络
docker network ls
# 删除网络
docker network rm 网络名
docker 使用
安装
# 查看Linux内核版本(需3.10以上)
uname -r
# 升级yum
yum -y update
# 安装docker
yum install -y docker
# 重启
reboot
启动
# 关闭防火墙
systemctl stop firewalld
setenforce 0
# 切换docker用户
su user1
# 启动docker
systemctl start docker
# 验证是否启动
docker version
管理用户
非root用户每次使用docker命令都需要加上sudo,加入docker组,可不用sudo,方便使用。
# 准备用户
useradd user1
passwd user1
# 准备docker小组(名称必须是docker)
groupadd docker
# 将user1加到docker组中
usermod -G docker user1
# 切换用户
su user1
下载镜像
docker pull 镜像名:版本号
产生容器
# apache容器 --network指定了容器所在的网络 web数据卷名
docker run -d -p 8777:80 -v web:/app --network mynet --privileged=true webdevops/php-apache-dev
# mysql容器(无需路径映射)
#-e MYSQL_ROOT_PASSWORD=123456设置数据链接密码,--name mydb给容器命名
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --network mynet --name mydb --privileged=true mysql:5.5.62
使用容器
访问:http://linux的ip:prot