一、Docker安装
1、yum包更新
yum update
2、安装需要的软件包
yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、安装docker
yum install -y docker
5、查看docker版本,验证是否验证成功
docker -v
二、Docker架构
1、镜像(Image)
Docker镜像,就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就是包含了完整的一套Ubuntu16.04最小系统的root文件系统。
2、容器(Container)
镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停。
3、仓库(Repository)
仓库可看成一个代码控制中心,用来保存镜像。
4、中央仓库
https://hub.docker.com
三、配置镜像加速度
阿里云
四、Docker操作
1、Docker服务操作
(1)启动docker
systemctl start docker
(2)查看docker状态
systemctl status docker
(3)关闭docker
systemctl stop docker
(4)重启docker
systemctl restart docker
2、镜像的操作
(1)拉取镜像
docker pull 镜像名称
docker pull 镜像名称:版本
(2)查看全部镜像
docker images
docker images -q (查看全部镜像的编号)
(3)删除镜像
docker rmi 镜像的标识
docker rmi `docker image -q` (删除全部镜像)
(4)镜像的导出
docker save -o 导出的路径 镜像id
(5)镜像的导入
docker load -i 镜像文件
(6)镜像重命名
docker tag 镜像id 镜像名:标识
(7)搜索镜像(联网)
docker search 镜像名称
(8)提交修改
docker commit 镜像id
3、容器的操作
(1)启动容器
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识 | 镜像名称[:tag]
-d :代表后台运行容器
-p 宿主机端口:容器端口 :做端口映射
--name 容器名称 :指定容器的名称
(2)查看容器
docker ps [-qa]
-a : 查看全部的容器,包括没有运行的
-q :只查看容器的标识
(3)查看容器日志
docker logs -f 容器id
-f :可以滚动查看日志的最后几行
(4)进入容器内部
docker exec -it 容器id bash
(5)删除容器(删除容器前需要先停止容器)
docker stop 容器id
docker rm 容器id
docker rm $(docker ps -qa) (杀死全部)
(6)重启容器
docker start 容器id
(7)查看容器信息
docker inspect 容器id
4、数据卷
将宿主机中的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会随着改变
(1)创建数据卷
docker volume create 数据卷名称
创建数据卷之后,默认会存放在一个目录下 /var/lib/dpcker/volumes/数据卷名称/_data
(2)查看数据卷的详细信息
docker volume inspect 数据卷名称
(3)查看全部数据卷
docker volume ls
(4)删除数据卷
docker volume rm 数据卷名称
(5)应用数据卷
当映射数据卷时,如果数据卷不存在,docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中
docker run -v 数据卷名称:容器内部路径 镜像id
直接指定一个路径作为数据卷的存放位置,这个路径下是空的
docker run -v 路径:容器内的路径 镜像id
5、数据卷容器
(1)创建数据卷容器
docker run -it --name=容器名称 -v /volume(容器内路径) 容器名称:版本 /bin/bash
(2)创建容器使用数据卷
docker run -it --name=c1 --volumes-form c3 容器名称:版本 /bin/bash
四、Docker原理
1、操作系统组成部分
进程调度子系统
进程通信子系统
内存管理子系统
设备管理子系统
文件管理子系统
网络通信子系统
作业控制子系统
2、Linux文件系统
Linux文件系统由bootfs和rootfs两部分组成。
bootfs:包含bootloader(引导加载程序)和kernel(内核)
rootfs:root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
不同的linxu发行版,bootfs基本一样,二rootfs不同。
3、Docker镜像原理
Docker镜像是由特殊的文件系统叠加而成。
最低层是bootfs,并使用宿主机的bootfs
第二层是root文件系统rootfs,称为base image
然后再往上可以叠加其他的镜像文件。
docker的同一文件系统即使能够将不同的层整合成为一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度来看,只存在一个文件系统。
一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。
当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。
五、docker自定义镜像
1、创建一个Dockerfile文件
Dockerfile文件中常用的内容
FROM:指定当前自定义镜像依赖的环境
MAINTAINER:维护者信息
RUN:执行命令
COPY/ADD:将相对路径下的内容复制到自定义景象中
ENV:定义环境变量
ARG:定义参数
VOLUME:定义数据卷
EXPOSE:指定暴露的端口
USER:指定用户及用户组
LABEL:定义元数据
WORKDIR:声明镜像的默认工作目录
CMD:需要执行的命令(在workdir下执行的,cmd可以写多个,但是指以会后一个为准)
2、启动镜像
将准备好的Dockerfile和响应的文件拖拽到linux操作系统中,通过docker的命令制作镜像
docker build -f Dockerfile文件 -t 镜像名称:[tag] .
六、docker-compose
docker-compose可以帮助我们批量的管理容器,只需要通过一个docker-compose.yml文件去维护即可。
1、安装
(1)去github下载docker-compose 下载1.24.1版本
(2)将下载好的文件拖入linux
(3)改变docker-compose名字,增加执行权限
(4)将docker-compose移动到/usr/local/bin,添加环境变量
(5)测试,任意目录下数据docker-compose
2、docker-compose.yml文件
文件示例:
version: '3.1'
services:
mysql: # 服务的名称
restart: always # 代表只要docker启动,那么这个容器就跟着一起启动
image: mysql:5.7.4 # 指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql # 映射数据卷
tomcat:
restart: always
image: tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
3、docker-compose命令
在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
(1)基于ducker-compose.yml启动管理的容器
docker-compose up -d
(2)关闭并删除容器
docker-compose down
(3)开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|restart
(4)查看有docker-compose管理的容器
docker-compose ps
(5)查看日志
docker-compose logs -f
七、Docker容器虚拟化与传统虚拟机比较
1、相同
容器和虚拟机具有相似的资源隔离和分配优势。
2、不同
容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。
传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统。
3、对比
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬件使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于容器 |
系统支持量 | 单机支持上千容器 | 一般几十个 |