Docker学习

Docker概述

Docker 解决了:开发与线上环境统一、更便捷的升级和扩容、更高效的利用计算资源
Docker 应用之间互相隔离,内核级别的虚拟化

容器

容器不是虚拟出一个完整的操作系统,每个容器之间互相隔离

基本组成

1.client
2.Docker_host
3.Registry

  • 镜像(image)
    是一个模板,通过模板来创建容器服务
  • 容器(container)
    独立运行一个或者一组应用,通过镜像创建,提供基础系统需求
    action:启动停止
  • 仓库(repository)
    存放镜像

工作机制

Docker是一个Client-Server结构系统,Docker的守护进程运行在主机上,通过Socket从客户端访问。
DocekerServer接收DockerClient的指令,就会执行这个命令

Docker安装

系统:macOS 10.15

下载地址
直接安装
配置国内源
在这里插入图片描述

	{
    "experimental": false,
    "debug": true,
    "registry-mirrors": [
        "https://你的ID.mirror.aliyuncs.com",
        "http://hub-mirror.c.163.com"
    ],
    “data-root":"/home/docker" #修改镜像存储位置
}

测试运行hello-world

docker run hello-world

查看镜像

docker images

Docker命令

官方文档

  • 镜像命令
    docker images # 查看所有镜像
    docker search #查找镜像
    docker pull #下载镜像
    docker rmi -f <容器id> #删除镜像根据ID
    docker rmi -f $(docker images -aq) #删除所有镜像
    
  • 容器命令
    • 新建容器并启动
    	docker run [可选参数]  #
    	# 参数说明
    	--name="区分作用"
    	--d 后台运行  后台运行,必须要有前台进程
    	--it  使用交互方式,进入容器查看内容 查看容器内容(centos   docker run --it centos/bin/bash)退出停止:exit ctrl+p+q 退出不停止
    	--p 	暴露端口,宿主机端口:容器内部端口(8080:8080),可加IP
    	--net 指定网络,默认是bridge
    	# 例如:
    	docker run -d --name nginx80 -p 8080:80 nginx
    	--rm 用来测试用完即删除
    	-e 环境配置 内存ES_JAVA_OPTS="Xms64m -Xmx512m"
    
    • 列出所有运行的容器
    docker ps
    docker ps -a #列出所有的容器
    
    • 删除容器
    docker rm 容器id
    docker rm -f $(docker ps -aq) #删除所有镜像
    
    • 启动和停止容器
    docker start 容器id
    docker restart 容器id
    docker stop 容器id
    docker kill 容器id
    
    • 查看日志

      docker logs -f -t --tail 10 容器id
      
    • 查看容器进程信息

      docker top 容器ID
      
    • 进入当前正在运行的容器

    docker exec -it 容器ID bashShell #开启一个新的窗口
    docker attach 容器ID #进入当前正在运行的命令行
    
    • 从容器内拷贝文件
    docker cp 容器id:容器内路径  外主机 路径
    
  • 查看命令
    docker version # 显示docker版本信息
    docker info # 显示系统信息
    docker stats #查看CPU 状态
    docker history 容器ID  # 查看构建过程
    
    • 查看容器元数据信息
    docker inspect 容器ID
    
    • 查看容器卷
    
    docker volume ls
    docker volume inspect 卷名 #具体信息(挂载主机位置)/var/lib/docker/卷名/_data
    # 具名挂载
    docker run -d -v 自定义卷名:容器目录
    
    • 查看网络
    docker network ls #查看所有网络
    docker network inspect 网络ID # 具体网络信息
    

Docker可视化

  • portainer
    Docker图形化管理工具!提供一个后台面板
    docker run -d -p 8080:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
    
  • Rancher(CI\CD)

Docker镜像

镜像是一种轻量级、可执行的软件包。打包软件环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)

是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作具体的应用镜像。
特性:一次同时加载多个文件系统,从外部只能看到一个文件系统,联合加载会把各层文件叠加起来。

分层结构

所有Docker镜像都起始于一个基础镜像层,当进行修改或增加新内容时,就会在当前镜像层(基础层)之上,创建新的镜像层。比如基于centos创建一个镜像,产生基础层,在镜像中添加Python包,就会在基础层上创建一个新的镜像层,继续添加Django,又会增加新的镜像层。
特点:镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!这层叫容器层,下面都是镜像层

commit镜像
# 类似于git
docker commit 提交容器成为一个新的副本。
-m="提交的描述信息" -a=”作者“ 容器ID 目标镜像名:[TAG]

容器数据卷

数据和容器分离,数据持久化、同步操作,容器间数据共享,将宿主机机目录挂载到容器内。容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

使用数据卷
docker run -it -v 主机目录:容器内目录 #指定路径挂载
-v 容器内路径 # 匿名挂载
# 具名挂载
-v 自定义卷名:容器目录
# 权限
-v 路径:ro/rw #只读(只能通过宿主机改变,容器内部无法改变)/读写(默认)

数据卷容器

容器间数据同步
例子:三个容器,两个MySQL容器,通过数据卷容器同步数据,删除数据卷容器,数据还在

docker run -it --name docker01  --volumes-from 数据卷容器(docker03)  

DockerFile

用来构建docker镜像的构建文件,命令参数脚本
通过命令可以生成镜像
DockerImage:通过DockerFile构建生成镜像
Docker容器:容器就是镜像运行起来提供服务

  • 构建步骤:
    1.编写一个dockerfile文件
    2.docker build 构建一个镜像
    3.docker run 运行镜像
    4.docker push 发布一个镜像(发布到仓库)
# 构建
docker build -f dockerfile文件路径 -t 生成镜像名(不能以/开头):版本 .(当前目录下生成镜像)
  • DockerFile编写:
    1.每个保留关键字(指令)都是必须是大写字母
    2.执行从上到下
    3.#表示注释
    4.每个指令都会创建提交一个新的镜像层,并提交
  • 指令说明:

FROM #基础镜像
MAINTAINER #镜像作者,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,如添加Tomcat
WORKDIR #镜像工作目录
VOLUME # 挂载目录
EXPOSE #暴露端口
CMD #指定这个容器启动的时候运行的命令,只有最后一个会生效
ENTRYPOINT #指定这个容器启动的时候运行命令,追加命令
ONBUILD #当构建一个被继承DockerFile这个时候会运行这个命令,触发指令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量!

压缩镜像
docker save	#压缩
docker load	#解压

Docker网络原理

Docker0

每启动一个docker容器,Docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0,使用桥接模式,使用evth-pair技术。Docker中的所有网络接口都是虚拟的,只要容器删除,对应网桥对就删除了,docker0不支持容器名访问网络

通过服务名连接容器

生产环境不建议使用

docker run -d -P --name tomcat03 --link tomcat02 tomcat # 连接两个容器,无法反向连接,在hosts中增加了解析
自定义网络

自定义网络docker已经帮我们维护好了对应关系,不同集群使用不同网络,保证集群网络的独立
网络模式:
bridge:桥接模式
none: 不配置网络
host:和宿主机共享网络
container:容器网络连通

docker network rm 网络ID#移除网络
docker network create #创建网络
--driver  指定模式
--subnet 指定网络192.168.1.0、24
--gateway 指定网关
网络名称

docker network connect #将一个容器连接到一个网络,就是将容器加入这个网络,一个容器两个IP

IDEA整合Docker

未完待续

Docker Compose

未完待续

Docker Swarm

未完待续

CI\CD Jenkins

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值