前言
一、Docker的相关概念
1.1 Docker的定义
- 使用最广泛的开源容器引擎
- 一种操作系统级的虚拟化技术
- 依赖于Linux内核特性: Namespace(资源隔离)和 Cgroups(资源限制)
- —个简单的应用程序打包工具
1.2 Docker组成
Dokcer Client
管理Docker的工具、Docker命令。
Docker Host
Docker主机
守护进程处理Client发出的指令
1.3 镜像管理
1.3.1 镜像的定义
总之,镜像就是一个模板,安装到操作系统后,操作系统就有镜像里的内容以及镜像的所有容器,同时一次性拥有tomcat/nginx/mysql等进程。
镜像就是仓库里已经配置的容器。
1.3.2 配置加速器
docker run -d nginx
访问国外网站时 下载会很慢 所以配置加速器会快一些
默认是从https://hub.docker.com拉取镜像的
注意:刚安装docker /etc/docker./daemon.json是不存在内容的
{
"registry-mirrors":
["https://b9pmyelo.mirror.aliyun.com"]
}
注意:以上地址使用的是阿里云的镜像加速器,需要自己在阿里云控制台获取最新地址。(控制台-容器镜像服务-镜像工具-镜像加速器)
systemctl restart docker # 重启docker
docker info # 查看docker信息
配置加速器成功
1.3.3 常见管理命令
save导出
docker save [image-name] -o [outname]
例如:
docker save redis -o redis.tar
scp命令
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
load 导入
docker load -i [outname]
例如:
docker load -i redis.tar
1.4 容器管理
保存的容器:/var/lib/docker/containers/
保存的镜像:/var/lib/docker/overlay2/
创建容器常用选项
-d 和-it -d区别
-p publish
发布到服务器
docker run -d -p 88:80 nginx #服务器的88映射到容器的80端口
进入一个命名为web的nginx容器内创建html访问
创建名为web的docker nginx容器
docker run -d -e env=prod -p 88:80 --name web -h web --restart=always nginx
停止容器,有端口占用
docker stop [container_id]
重启容器
docker restart web
进入web容器
docker exec -it web bash
成功访问
常用管理命令
commit
dockerfile: 镜像->文件,dockerfile->镜像
status
ps
rm
容器数据持久化
数据两种挂载方式(volumn/mount)
将宿主机目录挂载到docker目录
制作镜像原则
jenkins、gitlab使用docker都是采用-v将仲们自身产生的数据持久化宿主机
容器网络
-
veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一端出。用于解决网络命名空间之间隔离。
-
docker0:网桥是一个二层网络设备,通过网桥可以将Linux支特的不同的端口连接起来,并实现类以交换机那样的多对多的通信。
外部访问容器
DNAT
: 目标网络地址转换
容器访问外部
SNAT
:源网络地址转换
1.5 Dockerfile构建镜像
dockerfile概述
Dockeri通过Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文件,由一条一条的指令组成。
dockerfile常用指令
构建镜像命令
构建nginx镜像
构建tomcat镜像
1.7 镜像仓库
Harbor概述
Harbor 是由VMWare 公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/DAP集成以及审计日志等,足以满足基本企业需求。
官方:https://goharbor.io/
Github:https://github.com/goharbor/harbor
Harbor部署
Harbor基本使用
docker compose 命令