一、概述:
1、Docker 是什么?
Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采用"沙盒"机制,容器之间不会存在任何接口。
2、Docker 和虚拟机的区别:
1)启动速度:Docker 启动速度⾮常快,属于秒级别,⽽虚拟机通常需要⼏分钟去启动。
2)资源消耗:Docker 需要的资源更少,它直接运⾏在宿主机的内核上,以⼀系列进程的结合形式存在。⽽虚拟机则需要消耗更多的资源,因为它在操作系统级别进⾏虚拟化。
3)轻量级:Docker 更轻量,它的架构可以共⽤⼀个内核与共享应⽤程序库,所占内存极⼩⽽虚拟机则相对较重,需要消耗更多的内存。
4)隔离性:虚拟机可以实现系统级别的隔离,⽽ Docker 则属于进程之间的隔离,隔离性相对较弱。
5)安全性:Docker 的安全性也更弱。
6)可管理性:Docker 的集中化管理⼯具还不算成熟。
7)兼容性:开发⼈员不需要关系具体是哪个 Linux 操作系统,基本市⾯上主流系统都可使⽤ Docker。
8)数据持久性:Docker ⽆法存储数据,当容器重启后,数据会消失;⽽虚拟机可以存储各种数据,包括日志、数据库等。
3、Docker 解决的问题
系统环境不⼀致问题;应用隔离问题;服务器扩展问题
4、Docker 的优缺点:
(1)优点:体积小、启动迅捷、操作⽅便、更轻松的扩展、更强的可扩展性和可移植性。
(2)缺点:安全问题、存储问题、性能问题、⽹络问题、需要花费时间配置和管理、映像构建复杂。
5、Docker 架构
1)⽤ docker pull 命令从 hub.docker.com 官⽹上下载 images (镜像)。
2)可以⽤ docker save 命令将镜像保存到本地 tar ⽂件,也可以⽤ docker load 命令将本地tar ⽂件导⼊镜像。
3)可以⽤ docker build 构建 Dockerfile 镜像。
4)可以⽤ docker run 和 docker create 将镜像运⾏成 container (容器),容器内可以安装需要的 APP。
5)可以⽤ docker commit/export 将容器做成镜像反复的使⽤。
6)可以将自己制作的镜像发布到 hub.docker.com网站,需要注册账号。
6、Docker 核⼼概念:
1)镜像(images):⼀个⾯向 docker 容器引擎的只读模板,也是容器的基础,类似于 iso 镜像⽂件。
2)容器(container):基于镜像所创建的虚拟实例,相当于⼀个简易的 Linux 环境,可启停,且多个容器之间互相隔离。
3)仓库(Repository):集中存放 docker 镜像的位置,可使⽤ docker pull 或 push 命令下载或上传到私有或公有仓库。
4)仓库注册服务器(registry):存放仓库的地⽅,如果没有私有仓库,则使⽤公共仓库 docker hub。
7、Docker特性
1)文件系统隔离:每个进程容器运⾏在⼀个完全独⽴的根⽂件系统里。
2)资源隔离:实现不同的容器的资源配额和调度,cgroup。
3)网络隔离:每个进程容器运⾏在自己的⽹络空间,拥有虚拟接口和 IP 地址。
4)⽇志记录:Docker将收集到和记录的每个进程容器的标准流(stdout/stderr/stdin),⽤于实时检索或者批量检索。
5)变更管理:容器⽂件系统的变更可以提交到新的镜像中,并可重复使⽤以创建更多的容器。
6)交互式shell:Docker可以分配⼀个虚拟终端并且关联到任何容器的标准输出上,例如运⾏⼀个⼀次性交互shell。
二、安装docker
[root@docker ~]# cat << EOF | tee /etc/modules-load.d/k8s.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter
[root@docker ~]# modprobe overlay
[root@docker ~]# modprobe br_netfilter
[root@docker ~]# cat << EOF | tee /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-iptables = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> net.ipv4.ip_forward = 1
> EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
[root@docker ~]# sysctl --system
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加阿⾥云yum源
[root@docker~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker,allowerasing:允许卸载旧版本
[root@docker~]#docker-compose-plugin -y --allowerasing
[root@docker~]#yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
# 设置阿⾥云镜像加速器 , 阿⾥云官 网 : 阿里云-计算,为了无法计算的价值
登录后点击控制台
三、启动docker
[root@docker~]#systemctl start docker # 启动服务
[root@docker~]#docker images # 查看镜像
[root@docker~]#docker info | grep "https" # 查看自己的镜像加速器地址
[root@docker~]#docker search tomcat
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
]
}
[root@docker ~]# systemctl restart docker
# 拉取centos基础镜像,镜像是模版,容器是实例
[root@docker~]#docker pull centos
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
# 交互式进入容器
[root@docker ~]# docker run -it --name=c0 centos:latest /bin/bash
版本信息
[root@87eb4bb2639a /]# ls
bin home lost+found opt run sys var
dev lib media proc sbin tmp
etc lib64 mnt root srv usr
[root@87eb4bb2639a /]# cd /etc/yum.repos.d/
[root@87eb4bb2639a yum.repos.d]# ls
CentOS-Linux-AppStream.repo
CentOS-Linux-BaseOS.repo
CentOS-Linux-ContinuousRelease.repo
CentOS-Linux-Debuginfo.repo
CentOS-Linux-Devel.repo
CentOS-Linux-Extras.repo
CentOS-Linux-FastTrack.repo
CentOS-Linux-HighAvailability.repo
CentOS-Linux-Media.repo
CentOS-Linux-Plus.repo
CentOS-Linux-PowerTools.repo
CentOS-Linux-Sources.repo
# 安装阿里云网络yum源
[root@87eb4bb2639a /]#rm -rf *.repo
[root@87eb4bb2639a /]#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@87eb4bb2639a /]#yum clean all
[root@87eb4bb2639a /]#yum makecache
[root@87eb4bb2639a /]#yum -y install iproute net-tools httpd
[root@87eb4bb2639a /]# uptime //当前位置和启动时间
06:33:59 up 2:28, 0 users, load average: 0.29, 0.19, 0.11
[root@87eb4bb2639a /]# cat /etc/redhat-release //查看当前镜像版本
CentOS Linux release 8.4.2105
# 修改httpd首页文件、启动并测试访问
[root@87eb4bb2639a /]# echo 'docker_httpd_server' > /var/www/html/index.html
[root@87eb4bb2639a /]# systemctl start httpd
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
[root@87eb4bb2639a /]# httpd -k start
[root@87eb4bb2639a /]# curl localhost //容器内部
docker_httpd_server
[root@docker ~]# curl http://172.17.0.2 //宿主机
docker_httpd_server
# 查看当前容器的进程
[root@87eb4bb2639a /]# ps -all //查看docker进程
[root@87eb4bb2639a /]#ps -aux|grep docker
root 323 0.0 0.0 9192 728 pts/0 S+ 07:04 0:00 grep --color=auto docker
# 进入管理界面,将c0的终端挂载到当前宿主机上
[root@87eb4bb2639a /]# exit //退出之后没进程了
exit
[root@docker ~]# docker start c0
c0
[root@docker ~]# docker attach c0
[root@87eb4bb2639a /]#
# 期望退出,服务继续运⾏ ctrl+p+q
[root@87eb4bb2639a /]# curl localhost
docker_httpd_server
[root@87eb4bb2639a /]# read escape sequence
四、远程管理宿主机的docker进程
1、关闭docker守护进程
[root@docker ~]# systemctl status docker
[root@docker ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
2、再次测试
[root@docker ~]# docker attach c0
You cannot attach to a stopped container, start it firs
3、发现再次启动docker并未生成新的docker.sock套接字文件
#mysql案例
/var/lib/mysql/msyql.sock
mysql -uroot -proot
mysql -hxxxx -uroot -proot
[root@docker ~]# ls -lh /var/run/
srw-rw----. 1 root docker 0 8月 22 11:36 docker.sock
[root@docker ~]# systemctl start docker
srw-rw----. 1 root docker 0 8月 22 11:36 docker.sock
4、修改配置文件,设置允许远程,默认情况下没有daemon.json⽂件,在添加daemon之前,先修改
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
],
# 添加此部分
"hosts": [
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
]
}
5、删除相关sock文件
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
13 ExecStart=/usr/bin/dockerd
[root@docker ~]# systemctl daemon-reload # 加载配置⽂件
[root@docker ~]# systemctl start docker
6、重新开启docker守护进程,查看状态
[root@docker ~]#systemctl daemon-reload
[root@docker ~]#systemctl start docker
[root@docker ~]# ls -lh /var/run/docker.sock //查看sock套接字文件
srw-rw----. 1 root docker 0 8月 22 16:22 /var/run/docker.sock
[root@docker ~]# netstat -lntpu|grep 2375 //#要允许远程连接,需要有⼀个服务,使⽤端⼝体现
tcp6 0 0 :::2375 :::* LISTEN 5133/dockerd
远程管理
[root@docker ~]#docker -H192.168.2.50 -it -name ...
五、Docker 基本操作
1、镜像操作
2、容器操作