Docker概述
Docker是什么
- 是一种轻量级的“虚拟机”
- 在Linux容器里运行应用的开源工具
- Docker是一个开源的应用容器引擎
- 基于go语言,dotCloud公司(后改为Dockerinc)
- 容器是完全使用沙箱机制,相互隔离
Docker与虚拟机的区别
- 轻量级
Docker的使用场景
- 打包应用程序简化部署
- 可脱离底层硬件任意迁移
- 例:服务器从腾讯云迁移到阿里云
Docker容器与传统虚拟机的区别
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗50%左右 |
性能 | 接近原生 | 弱于 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源限制 | 安全隔离 |
Docker核心概念
- 镜像
- 一个面向Docker容器引擎的只读模板
- 容器
- 从镜像创建的运行实例,它可以被启动、停止和删除。
- 所创建的每一个容器都是相互隔离、互不可见,以保证安全性平台。
- 可以将容器看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用。
- 仓库
- 集中保存镜像的地方
CentOS按照Docker的两种方式
- 使用CURL获得Docker的按照脚本进行安装
- 使用YUM仓库来安装Docker
Docker部署
#使用aliyun下载核心包
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo [root@localhost ~]# https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# yum clean all
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
#添加国内镜像站
[root@localhost ~]# cat <<EOF> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://cf-workers-docker-io-8jv.pages.dev"],
"insecure-registries": ["192.168.10.106"]
}
EOF
#安装Docker-CE
yum -y install docker-ce
#修改内核参数
[root@localhost ~]# cat>> /etc/sysctl.conf <<EOF
[root@localhost ~]# net.ipv4.ip_forward=1
[root@localhost ~]# net.bridge.bridge-nf-call-ip6tables = 1
[root@localhost ~]# net.bridge.bridge-nf-call-iptables = 1
[root@localhost ~]# EOF
[root@localhost ~]# sysctl -p
#开启Docker服务
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# systemctl enable docker
[root@localhost ~]# docker version
Doker基本操作
#搜索镜像
[root@localhost ~]# docker search lamp
#获取镜像
[root@localhost ~]# docker pull mattrayner/lamp
#查看镜像信息
[root@localhost ~]# docker images
#查看镜像的详细信息
[root@localhost ~]# docker inspect c15
#修改镜像标签(老名字+新名字)
[root@localhost ~]# docker tag mattrayner/lamp lamp:lamp
[root@localhost ~]# docker images
#删除镜像
[root@localhost ~]# docker rmi lamp:lamp
#用ID删除
[root@localhost ~]# docker rmi c15
#存出镜像和
[root@localhost ~]# docker save -o lamp mattrayner/lamp
[root@localhost ~]# docker rmi mattrayner/lamp
#载入镜像
[root@localhost ~]# docker load<lamp
Docker容器操作
#容器的创建与启动 此命令只是把容器创建了出来,并没有运行
[root@localhost ~]# docker create -it mattrayner/lamp /bin/bash
-i:让容器的输入保持打开状态
-t:让Docker分配一个伪终端
-d:以守护进程的方式运行该容器
[root@localhost ~]# docker ps -a
#容器的运行
[root@localhost ~]# docker start 5a
#在创建容器时直接启动容器
[root@localhost ~]# docker run centos:7 /usr/bin/bash -c "ls /root"
注意:此命令只是用该容器执行了一下ls命令,随后此容器就关闭了
#在启动容器时持续在后台运行
[root@localhost ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
或
[root@localhost ~]# docker run -dit centos:7 /bin/bash
#容器的终止 根据id
[root@localhost ~]# docker stop b18
#进入容器
[root@localhost ~]# docker exec -it 03f /bin/bash
#退出
[root@03f062851c52 /]# exit
#容器导出
[root@localhost ~]# docker export 03f >centos7
#容器导入生成镜像
[root@localhost ~]# docker import centos7 centos7:test
[root@localhost ~]# docker images
#容器删除根据id
[root@localhost ~]# docker rm 7f
#删除所有容器
docker rm -f $(docker ps -a | awk '{print $1}')