一.docker的介绍
1、Docker 是什么?
Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙
盒”机制,容器之间不会存在任何接⼝。
Docker 通过 Linux Container(容器)技术将任意类型的应⽤进⾏包
装,变成⼀种轻量级、标准化、可移植、⾃管理的组件。在包装应
⽤的同时,可连带该应⽤的依赖和环境⼀并进⾏打包,所以可以将
这种“包”移植到任意环境去运⾏,省去兼容性的问题。
Docker 的优缺点
(1)优点
1. 体积⼩:减⼩系统的开销值,⼀台主机可以运⾏上千个容器。
2. 启动迅捷:更快速的交付和部署,docker容器 ,⽐传统虚拟机
要快很多,docker核⼼解决的问题就是利⽤容器实现VM类似的
功能。3. 操作⽅便:通过配置 dockerfile 便⽀持灵活的⾃动化创建和部
署。
4. 更轻松的扩展:可以实现更简单的、更可靠的迁移,避免了兼容
性等问题。
5. 更强的可扩展性和可移植性。
(2)缺点
1. 安全问题:如果没有正确配置,⼀个容器中的恶意代码可能会影
响到主机上的其他容器以及主机本身的安全。
2. 存储问题:当使⽤⼤量容器时,存储和管理容器映像可以变得⾮
常困难。这可能需要使⽤分布式存储或其他解决⽅案来管理⼤量
容器的存储。
3. 性能问题:在某些情况下,容器和虚拟机相⽐会导致性能损失。
这些性能问题越来越少,但是仍然需要考虑。
4. ⽹络问题:Docker 可能会在⽹络配置上存在⼀些问题,这可能
需要更多的时间来诊断和解决。
5. 复杂性:Docker 是⼀个⾮常灵活的系统,但这同时也让它更加
复杂。⻓时间使⽤ Docker 会产⽣⼤量的脚本和配置⽂件,这些
可能变得难以维护。
6. 资源消耗:使⽤ Docker 必须占⽤⼀些资源,包括 CPU、内
存、磁盘等等。如果运⾏容器的主机资源不⾜,可能会导致性能
问题。7. 学习曲线:Docker 是⼀个相对新的技术,相⽐传统环境需要⼀
定的学习曲线。需要了解Docker 基本概念、命令和配置⽂件
等。
8. 需要花费时间配置和管理:使⽤ Docker 需要花时间配置和管理
容器集群和应⽤程序。需要配置每个容器,管理 Jenkins、
Kubernetes 等运⾏ Docker 容器的⼯具。
9. 映像构建复杂:构建Docker映像需要按照特定格式编写
Dockerfile 脚本,需要遵循⼀定的规范和流程,这可能需要更多
的时间和精⼒。
Docker 核⼼概念
1. 镜像(images):⼀个⾯向 docker 容器引擎的只读模板,也
是容器的基础,类似于 iso 镜像⽂件。
2. 容器(container):基于镜像所创建的虚拟实例,相当于⼀个
简易的 Linux 环境,可启停,且多个容器之间互相隔离。
3. 仓库(Repository):集中存放 docker 镜像的位置,可使⽤
docker pull 或 push 命令下载或上传到私有或公有仓库。
4. 仓库注册服务器(registry):存放仓库的地⽅,如果没有私有
仓库,则使⽤公共仓库 docker hub。
二.安装docker
1.配置环境:
[root@docker0 ~]# cat << EOF | tee /etc/modules-load.d/k8s.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter
[root@docker0 ~]# modprobe overlay
[root@docker0 ~]# modprobe br_netfilter
[root@docker0 ~]# 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@docker0 ~]# sysctl --system
2.安装:
[root@docker0 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
3.添加仓库:
[root@docker0 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker0 ~]# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
4.启动服务:
[root@docker0 ~]# systemctl start docker.service
5.查看现有的镜像:
[root@docker0 ~]# docker images
6.搜索镜像:
[root@docker0 ~]# docker search tomcat
三.Docker的基本操作
- 镜像操作
(1)配置docker镜像站:
[root@docker0 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
[root@docker0 ~]# systemctl restart docker.service
(2)下载centos镜像:
[root@docker0 ~]# docker pull centos
[root@docker0 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
(3)运行并创建容器:
[root@docker0 ~]# docker run -i -t --name=c0 centos:latest /bin/bash
docker是软件 -i是交互 -t是允许在终端运行,取名为c0,latest是版本
现在是已经进入了一个新系统
(4)配置阿里云的yum仓库:
[root@c28bcbe962be ~]# rm -rf /etc/yum.repos.d/*
[root@c28bcbe962be ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.21
ls /etc/yum.repos.d/
yum clean all && yum makecache
yum -y install iproute
yum -y install httpd
yum -y install net-tools
cat /etc/redhat-release
echo “docker_httpd_server” > /var/www/html/index.html
(5)启动服务:
httpd -k start
(6)访问
访问自身:
curl http://localhost:80
在宿主机上访问:
[root@docker0 ~]# curl 172.17.0.2
docker_httpd_server
无法在物理机上访问,也无法ping到这个主机
如果没有指令正在执行,容器就会停止
[root@c28bcbe962be ~]# exit
(7)重启容器:
[root@docker0 ~]# docker start c0
c0
[root@docker0 ~]# docker attach c0 //将c0的终端挂载到当前的宿主机上面来
[root@c28bcbe962be /]#
[root@c28bcbe962be /]# netstat -lnput|grep 80
[root@c28bcbe962be /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[root@c28bcbe962be /]# curl localhost
docker_httpd_server
以上是退出之后就没进程了,需要从新启动
期望退出想继续运行:ctrl+p+q(按住ctrl不松手,先按p再按q)
四.docker远程管理
管理步骤:
- 停用docker服务
[root@c28bcbe962be /]# exit
exit
[root@docker0 ~]# systemctl stop docker
2.进入配置文件修改
[root@docker0 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
,
"hosts": [
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
]
}
[root@docker0 ~]# systemctl start docker
[root@docker0 ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd //这行剩下的删了
[root@docker0 ~]# systemctl stop docker.service
[root@docker0 ~]# systemctl start docker.service
3.加载daemon.json
[root@docker0 ~]# systemctl daemon-reload
4.启动服务
[root@docker0 ~]# systemctl start docker.service
5.查看状态
[root@docker0 ~]# netstat -lnput|grep 2375 //确保端口打开
tcp6 0 0 :::2375 :::* LISTEN 40705/dockerd
[root@docker0 ~]# ls -lh /var/run/ //确保docker.sock文件在
srw-rw----. 1 root docker 0 8月 22 16:10 docker.sock //出现这个就行
根据以上允许远程连接,需要2375端口打开,查看有docker.sock文件则就可以远程连接
- 远程管理
[root@docker0 ~]# docker -H 192.168.2.13 images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB