文章目录
一 基本概念
docker是开源的应用容器引擎,解决软件跨环境迁移问题
容器是完全使用沙箱机制,相互隔离
容器性能开销极低
二 安装
-
卸载原有docker
yum remove docker \ > docker-client \ > docker-client-latest \ > docker-common \ > docker-latest \ > docker-latest-logrotate \ > docker-logrotate \ > docker-engine
-
更新yum
yum update
-
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置阿里云镜像仓库地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装docker社区版
yum install -y docker-ce
-
查看docker版本
docker -v
参考Centos7安装Docker_玩物丧志的快乐的博客-CSDN博客
三 使用
架构
配置镜像加速器
配置阿里云镜像加速器
去阿里云-容器镜像服务-镜像加速器
选择使用的操作系统,根据指引配置
服务命令
# 启动
systemctl start docker
# 停止
systemctl stop docker
# 重启
systemctl restart docker
# 查看状态
systemctl status docker
# 设置开机启动
systemctl enable docker
镜像命令
查看镜像
docker images
# 查看所有镜像id
docker images -q
repository: 镜像
tag: 版本
image id: 镜像id
created: 创建时间
size: 大小
搜索镜像
docker search xxx
下载镜像
# 下载最新版本
docker pull xxx
# 下载指定版本
docker pull xxx:版本
版本去https://hub.docker.com查找镜像的Supported tags
删除镜像
# 删除单个镜像
docker rmi 镜像id
docker rmi 镜像:版本
# 删除所有镜像
docker rmi `docker images -q`
容器命令
创建容器
# 创建完会进入容器
docker run -it --name=xxx 镜像:版本 /bin/bash
# 后台创建容器,创建完不会进入容器
docker run -id --name=xxx 镜像:版本
退出容器:exit
查看容器
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
进入容器
docker exec -it xxx /bin/bash
启动容器
docker start xxx
停止容器
docker stop xxx
删除容器
不能删除运行中的容器
docker rm xxx
# 删除所有容器
docker rm `docker ps -aq`
查看容器信息
docker inspect xxx
数据卷
概述
数据卷:宿主机的一个目录或文件
容器目录和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器挂载
一个容器可以挂载多个数据卷
数据卷作用:
-
容器数据持久化
-
外部机器和容器间接通信
-
容器之间数据交换
配置
# docker run ... -v 宿主机目录(文件):容器目录(文件)
docker run -it --name=m1 -v /root/data:/root/data_container mysql:5.7 /bin/bash
目录必须是绝对路径
一个-v可以挂载一个数据卷
数据卷容器
解决多容器数据交换问题
# 配置数据卷容器
docker run -it --name=a -v /volume mysql:5.7 /bin/bash
# 绑定数据卷容器
docker run -it --name=b --volumes-from a mysql:5.7 /bin/bash
通过docker inspect a可以查看Mounts挂载信息
source为宿主机目录,destination为容器目录
"Source": "/var/lib/docker/volumes/0f476522043cbd37350ada6cca948b976e756ad43e7b846699d96cf84b1b0d61/_data",
"Destination": "/volume"
四 应用部署
部署mysql
端口映射:宿主机3307端口映射到容器3306端口
外部机器访问3307端口
docker run -id \
# 端口映射
-p 3307:3306 \
--name=xxx \
# 设置数据卷
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/logs:/logs \
-v /root/mysql/data:/var/lib/mysql \
# 设置root密码
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7 /bin/bash
部署tomcat
docker run -id \
--name=xxx \
-p 8080:8080 \
-v /root/tomcat:/usr/local/tomcat/webapps \
tomcat
部署nginx
宿主机的nginx.conf先准备好
docker run -id \
# 端口映射
-p 80:80 \
--name=xxx \
# 设置数据卷
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/logs/nginx \
# html为资源文件目录
-v /root/nginx/html:/usr/share/nginx/html \
nginx /bin/bash
部署redis
docker run -id --name=xxx -p 6379:6379 redis:5.0
五 dockerfile
镜像原理
docker镜像是由特殊的文件系统叠加而成
最低端是bootfs(内核),使用宿主机的bootfs
第二层是rootfs,可以往上叠加其它镜像
统一文件系统将不同的层整合成一个文件系统
从一个镜像启动容器时,docker在最顶层加载一个读写文件系统作为容器
镜像制作
容器转为镜像
# 容器转为镜像
docker commit 容器id 镜像名称:版本号
# 镜像转成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
# 压缩文件转成镜像
docker load -i 压缩文件名称
dockerfile
dockerfile是一个文本文件,包含了一条条指令,基于基础镜像,构建一个新的镜像
dockerfile常用指令参考Dockerfile 详解_万wu皆可爱的博客-CSDN博客_dockerfile
六 docker compose
服务编排:按照一定的业务规则批量管理容器
docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建、启动、停止
-
用docker file定义运行环境镜像
-
用docker-compose.yml定义组成应用的各服务
-
运行docker-compose up启动应用
docker compose使用参考docker-compose教程(安装,使用, 快速入门)_pushiqiang的博客-CSDN博客_docker 安装
七 docker容器虚拟化与虚拟机比较
相同点:具有相似的资源隔离和分配优势
不同点:容器虚拟化的是操作系统,虚拟机虚拟化的是硬件;虚拟机可以运行不同操作系统,容器只能运行同一类型操作系统