从零开始学Docker(一)
docker 容器
docker的基本概念
什么是docker?
docker vs VM
Docker | VMware | |
---|---|---|
虚拟化 | 轻量级虚拟化(只虚拟出来容器所需要的资源,软件层面) | 完全虚拟化(虚拟化硬件) |
启动速度 | 秒级 | 分钟级 |
运行性能** | 接近原生 | 5%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统 |
docker架构
docker使用客户端-服务器架构。 Docker客户端(client) 与 守护进程(Docker daemon)进行对话,该守护进程 完成了构建、运行和分发 Docker 容器的繁重工作。
安装docker及配置
安装docker
检查卸载之前docker
检查之前是否安装过docker,如果有使用: yum remove docker 卸载。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum-utils
Yellow dog Updater, Modified(Yum),是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
yum-utils是yum的工具包集合,由不同的作者开发,使yum使用起来更加方便和强大
yum install -y yum-utils
Tips: yum install -y 命令 ,使用此命令安装其它工具。
[root@localhost ~]# yum install -y yum-utils
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
软件包 yum-utils-1.1.31-54.el7_8.noarch 已安装并且是最新版本
无须任何处理
配置阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
更新CentOS
yum update
列出docker源(可选)
yum list docker-ce --showduplicates | sort -r
安装最新docker
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
检查docker 版本号
[root@localhost ~]# docker -v
Docker version 24.0.2, build cb74dfc
启动docker
运行docker,在系统启动时运行。
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Doker本地镜像库配置
配置本地镜像库
从网络获取docker镜像太慢,设置阿里云的镜像库。
修改:
/etc/docker/daemon.json
文件
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://ung2thfc.mirror.aliyuncs.com"]
}
配置完成后重启docker
[root@localhost ~]# systemctl restart docker
docker网络
docker容器的ip地址在每次启动后启动顺序设置ip地址,为解决ip地址变动的问题,我们有必要设置docker内部ip地址固定。
查看docker 网络
命令: docker network ls
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
d178b0b3e0d3 bridge bridge local
bdf466052f2f host host local
b8ca990b8753 none null local
常见网络模式
网络模式 | 简介 | 指定方式 |
---|---|---|
bridge | 默认为该模式。为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥。 | 使用–network bridge指定,默认使用docker0 |
host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 | 使用–network host指定 |
none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等。 | 使用–network none指定 |
container | 新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等。 | 使用–network container:NAME或者容器ID指定 |
创建自定义网络(network)
docker network create --driver bridge --subnet=自定义网络ip/16 --gateway=网关值 自定义网络名称
docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 wn_docker_net
查看所有docker虚拟网络
[root@localhost conf]# docker network ls
NETWORK ID NAME DRIVER SCOPE
d178b0b3e0d3 bridge bridge local
bdf466052f2f host host local
b8ca990b8753 none null local
51503b70deb9 wn_docker_net bridge local
docker常见问题及解决方案
问题:IPv4 forwarding disabled
问题描述
IPv4 forwarding is disabled。网络不能联通。
解决方案
设置:net.ipv4.ip_forward = 1
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
保存&退出(:wq)
重启网络
systemctl restart network
查看ipv4重定向值
[root@localhost ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
问题: 容器中没有linux命令
当使用linux命令时,显示“command not found"。
问题描述
解决方案
- 更新容器中linux
apt-get update
root@1aba593b6c47:/etc/mysql# apt-get update
- 安装程序
apt-get install 命令
root@130dddbf14ee:/# apt-get install vim