Docker学习笔记

一、Docker的构成

Docker是一个Client-Server结构系统,Docker守护进程运行在主机上,然后通过Socket连接,从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器是一个运行时环境。

  1. Docker仓库:https://hub.docker.com
  2. Docker自身组件
    • Docker Client:客户端
    • Docker Server:Docker daemon的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由的分发
    • Docker 镜像:Docker镜像运行之后变成容器(docker run)
      在这里插入图片描述

二、安装

1. 下载安装

  1. 下载地址
    docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
    docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
    运行 yum -y install *
  2. 运行docker,执行命令
    systemctl start docker
    systemctl enable docker
  3. 检验是否安装成功
    运行docker run hello-world
    在这里插入图片描述

2.加速配置

cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
chmod 777 /etc/systemd/system/docker.service
vim /etc/systemd/system/docker.service
修改配置
ExecStart=/usr/bin/dockerd --registry-mirror=https://xxxx.mirror.aliyuncs.com
检验是否成功

在这里插入图片描述

三、命令

docker + 命令关键字+ 参数
1.镜像命令

  • docker images 列出本地主机上的镜像
    • -a:列出本地所有镜像(含中间镜像层)
    • -q:只显示镜像ID
    • –digests:显示镜像摘要信息
    • –no-trunc:显示完整的镜像信息
  • docker search 搜索某个镜像
    • -s:列出收藏数不小于指定数的镜像
    • –no-trunc:显示完整的镜像信息
    • –automated:只列出automated build类型的镜像
  • docker pull name:版本号 下载镜像,不带版本号下载lalatest
  • docker rmi name:版本号 删除镜像,不带版本号删除lalatest
    • -f 强制删除
      • 跟多个镜像名删除多个
      • $(docker images -q)全部删除
  • docker commit 提交容器副本使之便成为一个新的镜像
    • -m 提交的描述信息
    • -a 作者信息
      docker commit -a=“ccw” -m=“tomcat without docs” 5cc305c720cd ccw/mytomcat:1.2
      2.容器命令
  • docker run 新建并启动容器
    • -i 以交互的模式启动容器,通常与-t同时使用
    • -t 为容器重新分配一个伪输入终端,通常与-i同时使用
    • -d 守护式进程启动,后台运行,必须有一个前台进程
    • –name 设置容器的名字
  • docker ps 查看正在运行的所有容器
    + -a 正在运行的容器+历史运行过的容器
    + -l 上一个运行的容器
    + -n数字 上几次运行的容器
    + -q 只显示容器编号
  • 退出容器
    • exit 退出容器
    • ctr+P+Q 容器停止不退出
  • 启动容器
    • docker start 容器名 启动
    • docker restart 重启容器
  • 停止容器
    • docker stop 容器id 温柔停止
    • docker kill 容器id 强制停止
  • 删除已停止的容器
    • docker rm 容器id
    • docker rm -f 容器id 强制删除
    • docker rm -f $(docker ps -a -q)删除所有容器
  • docker logs 查看容器日志
    • -t 加入时间戳
    • -f 跟随最新的日志打印
    • –tail 数字 显示最后多少条
  • docker top 容器ID 查看容器内的进程
  • docker inspect 查看容器内部细节
  • 进入正在运行的容器内部并以命令行交互
    • docker exec 在容器中打开新的终端,并且启动新的进程 docker exec -t 55ea2cbb9d76 ls -l /tmp
    • docker attach 直接进入容器启动命令终端,不会启动新的进程docker attach 55ea2cbb9d76
  • 容器内拷贝数据到宿主机
    • docker cp 容器id:容器内路径 宿主机路径

四、docker镜像

1.1镜像是什么

轻量级、可执行的的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。

  1. UnionFS
    是一种分层的、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时将不同目录挂载到同一个系统文件下
    特性:一次同时加载多个文件系统,但从外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样的文件系统会包含所有的文件和目录
  2. 加载原理
    bootfs:主要包含了bootloader和kernel,bootloader主要引导加载kernel,Linux刚启动时会加载bootfs文件系统,在docker镜像最底层的时bootfs。这一层与linux、unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就在内存中了,此时内存的使用权由boots转交给内核,系统卸载bootfs
    rootfs:在bootfs之上,包含的就是典型的Linux系统中的/dev,/proc/,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统的发行版
1.2、 创建镜像
  1. 容器>镜像:docker commit CID -t xx.xx.xx
    **工作在前台的守护进程至少一个
  2. DockerFile
    Dockerfile是一种被Docker程序解释的脚本,Dockerfile有一条一条指令组成,每条指令对应Linux下面的一条命令。
    生成命令:docker build -t
    最多128行

五、Docker容器数据卷

用于数据共享和持久化

特点:

  1. 数据卷可在容器间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止
    添加命令:
    docker run -it -v /宿主机绝对路径:/容器目录:ro 镜像名
    ro代表容器内的数据只读
    指定宿主机路径为具名挂载,相反为匿名挂载
    容器间传递共享:
    docker run -it --name dc02 --volumes-from dc01 镜像名字
    以dc01为模板运行容器,实现容器间的数据共享
    容器间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

六、DockerFile

1.是什么

是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

2.解析过程

  1. 每条保留字命令都必须大写且字母后面要至少有一个参数
  2. 指令从上至下,顺序执行
  3. 每条指令都会创建一个新的镜像层,并对镜像进行提交

3.执行大致流程

  1. docker从基础镜像运行一个容器
  2. 执行一条命令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

4.保留字指令

  • FROM 基础镜像,当前创建的镜像时基于哪一个镜像
  • MAINTAINER 镜像维护者的姓名,邮箱地址
  • RUN 容器构建时需要运行的命令
  • EXPOSE 对外暴露的端口号
  • WORKDIR 指定容器创建后,终端默认登陆进来的工作目录
  • EVN 设置环境变量
  • ADD 将外部文件拷贝进镜像并解压
  • COPY 将外部文件拷贝进镜像
  • VELUME 容器数据卷,用于数据保存和持久化
  • CMD 指定一个容器启动时要运行的命令,多个CMD命令只有最后一个生效,CMD会被docker run命令后的参数替换
  • ENTRYPOINT 指定一个容器启动时要运行的命令,docker run命令后追加
  • ONBUILD 当构建一个被继承的dockerfile时运行的命令,父镜像在被子镜像继承后,父镜像build触发
5.构建命令

docker build -f dockerfile文件路径 -t 新镜像的名字:TAG .

七、Docker网络

1.端口映射
  1. 随机映射-P
  2. 指定映射-p宿主机端口:容器端口
2.网络管理

相关命令
docker network 查看docker网络信息

  • connect 将容器连接到一个网络
    • –driver 指定网络类型
    • –gateway 主子网络IPV4或IPV6网关
    • –subnet 网段的CIDR格式子网络
  • create 创建一个网络
  • disconnect 从网络断开一个容器
  • inspect 显示网络详细信息
  • ls 网络列表
  • prune 删除所有未使用的网络
  • rm 删除网络
3.网络模式

bridge模式: Docker默认模式,它会在docker容器启动时自动配置自己网络信息,同一宿主机的所有容器都在一个网络下,彼此可以通信。利用宿主机的网卡进行通信,因为涉及到网络转换,会造成资源消耗,网络效率低。
在这里插入图片描述host模式: 容器使用宿主机的ip地址进行通信,和宿主机共享网络。
在这里插入图片描述
container模式: 新创建的容器间使用,使用已创建的容器网络,类似于局域网。容器和容器共享网络。

在这里插入图片描述
none模式: 不会配置任何网络,可以最大限度定制化。不提供网络服务,容器启动后无网络连接。
在这里插入图片描述
overlay模式: 容器彼此不在同一个网络下,而且能相互通信。
在这里插入图片描述

4.定制bridge模式网络
创建网络

docker network create --driver bridge bridge-test1
在这里插入图片描述
ip addr
在这里插入图片描述

自定义网段与网关

docker network create --driver bridge --gateway 172.99.0.1 --subnet 172.99.0.0/16 bridge_test2

在自定义网络中启动容器

docker run --net=网络名称 -it --name 镜像名称

注意

  • 使用默认的桥接模式创建的容器可以直接联网
  • 使用自定义的桥接模式创建的容器不可以直接联网,但是可以通过端口映射来实现联网
容器断开网络连接

docker network disconnect 网络名称 容器名称

容器连接网络

docker network connect 网络名称 容器名称

创建网桥、docker使用创建的网桥

使用bridge-utils创建网桥

  • 下载网桥工具
    yum install bridge-utils
  • 查看网卡
    brctl show
  • 创建网桥
    brctl addbr 网桥名称
  • 设置网桥网段
    ifconfig bro 网段 netmask
  • 配置docker文件
    vim /etc/default/docker
    最末尾添加 DOCKER_OPTS="-b=网桥名称"
  • 创建服务依赖文件
    mkdir -p /etc/systemd/system/docker.service.d
    vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf
    添加内容
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
  • 重新加载配置文件
    systemctl daemon-reload
  • 重启docker
    systemctl restart docker
5.host模式

docker run --net=host -it --name

6.none模式

docker run --net=none -it --name

八、Docker Compose

  1. 什么是docker compose
    负责对Docker容器集群的快速编排,定义和运行多个容器,通过docker-compose.yml模板文件来定义一组相关容器
  2. 核心概念
  • 服务(service):一个应用的容器。
  • 项目(project):一组相关联的应用容器组成的一个完整的业务单元,在docker-compose.yml文件中定义。
  1. 使用

    • 离线下载
      将安装包移动到/usr/local/bin目录下并改名为docker-compose
    • 赋予权限
      chmod +x /usr/local/bin/docker-compose
  2. 案例

  • 创建docker-compose.yml
version: "3.0"

services:
  tomcat: #服务名唯一
    container_name: 名字 #指定容器的名字
    image: 镜像名:tag #创建当前这个服务使用的镜像
    ports: #端口映射
      - “8080:8080”
    volumes: #容器数据卷
		#- 宿主机路径:容器内路径
		- tomcatwebapp:容器内路径
	networks: #代表当前服务使用的哪个网络桥
	  - hello
	environment: #环境变量
	  - 环境变量地址
	env_file: #将environment环境中配置放入指定的配置文件,文件以.env后缀,key=value键值对
	   - .env文件
	depends_on: #容器必须依赖哪些容器启动后才能启动
	    - 服务名
	command: 命令 #覆盖内部命令
	health_check: #心跳检测
	   test: ["CMD","curl","-f","ip"]
	   interval: 1m30s
	   timeout: 10s
	   retries: 3
	sysctls: # 修改容器中系统参数
	ulimits: #修改容器中最大进程数
	
	build: # 指定dockerfile所在的目录,自动构建镜像,自动运行容器
	  context: 路径 #指定上下文目录dockerfile文件目录
	  dockerfile: DockerFile
	 


volumes: #声明上面使用的自动创建的卷名
  tomcatwebapp: #声明的卷名 compose自动创建该卷名但是会加上项目
    external: #使用自定一卷名
      true #确定使用指定卷名 注意:一定在使用之前手动创建卷名
networks: #定义服务使用的网络桥
  hello: #定义上面服务使用的网络桥名称 默认创建就是bridge
    external: #使用外部指定的网桥,网桥一定存在
      true 
  • 运行docker-compose
    docker-compose up 启动这个项目的所有服务 必须保证运行这个命令的目录存在docker-compose.yml

指令

  1. up 启动docker-compose中的所有服务
    • -d 后台启动
  2. down 停止up命令启动的容器,并移除网路
  3. exec 服务id 进入指定容器
  4. ps 列出所有容器
  5. restart 重启服务 如果不写服务id重启所有服务
  6. rm 删除服务
  • -f 强制删除
  • -v删除数据卷
  1. start 启动服务
  2. stop 关闭服务 不会删除网络
  3. top 查看compose容器内运行的进程
  4. pause 暂停容器
  5. unpause 恢复暂停的服务
  6. logs 查看容器服务日志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值