Docker学习笔记——01基础语法

一. Docker概述

1. Docker为什么会出现?

  1. 一款产品: 开发–上线 两套环境!应用环境,应用配置!

  2. 开发 — 运维。 问题:我在我的电脑上可以允许!版本更新,导致服务不可用!对于运维来说考验十分 大

  3. 环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop…) !费事费力。

  4. 发布一个项目( jar + (Redis MySQL JDK ES) ),项目能不能带上环境安装打包!

  5. 之前在服务器配置一个应用的环境 Redis MySQL JDK ES Hadoop 配置超麻烦了,不能够跨平台。 开发环境Windows,最后发布到Linux!

  6. 传统:开发jar,运维来做!
    现在:开发打包部署上线,一套流程做完!

  7. 安卓流程:java — apk —发布(应用商店)

    docker流程: java-jar(环境) — 打包项目帯上环境(镜像) — ( Docker仓库:商店)

  8. Docker给以上的问题,提出了解决方案!

2. 虚拟机技术缺点

1. 虚拟机运行模式
  1. 模式
    在这里插入图片描述

  2. 资源占用比较多

  3. 冗余步骤多

  4. 启动很慢

2. docker运行模式
  1. 模式
    在这里插入图片描述

3. Docker能做什么

1. 比较Docker和虚拟机技术的不同
  1. 传统虚拟机, 虚拟出一个硬件, 运行一个完整的操作系统, 然后再这个系统上安装和运行软件
  2. 容器里的应用直接运行在虚拟机, 容器是没有自己的内核的, 也没有虚拟我们的硬件, 所以就轻便了
  3. 每个容器间相互隔离, 每个容器内部都有一个属于自己的文件系统, 互不影响.
2. 应用更快捷的交付和部署
  1. 传统: 一堆帮助文档, 安装程序
  2. Docker: 打包镜像发布测试, 一键运行
3. 更便捷的升级和扩缩容

使用了Docker之后, 部署应用就像搭积木一样

4. 更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的

4. 跟高效的计算资源利用

Docker是内核级别的虚拟化, 可以在一个物理机上运行更多的容器实例

4. 架构

1. 组成
  1. 架构图
    在这里插入图片描述
2. 镜像(image):
  1. Docker镜像就好比一个模板, 可以通过这个模板来创建容器服务
  2. tomcat --> run --> tomact01容器(提供服务器)
  3. 通过这个镜像可以创建多个容器(最终服务运行或项目运行就在容器中)
3. 容器(container):
  1. Docker利用容器技术, 独立运行一个或一组应用, 通过镜像来创建的.
  2. 启动, 停止, 删除, 基本命令
  3. 目前就可以把这个容器理解为一个简易的Linux系统
4. 仓库(repository):
  1. 仓库就是存放镜像的地方
  2. 仓库分为公有仓库和私有仓库
  3. Docker Hub(默认是国外的)

二. Docker安装

1. 前提
  1. 系统版本3.10以上

    # 显示操作系统的发行版号
    [root@Jiangfengtime ~]# uname -r
    3.10.0-514.26.2.el7.x86_64
    
  2. 系统环境查看

    [root@Jiangfengtime ~]# cat /etc/os-release 
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    
2. 安装步骤
  1. 卸载旧版本

    yum remove docker \
    	docker-client \
    	docker-client-latest \
    	docker-common \
    	docker-latest \
    	docker-latest-logrotate \
    	docker-logrotate \
    	docker-engine
    
  2. 需要的安装包

    yum install -y yum-utils
    
  3. 设置镜像仓库

    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
    
    # 阿里云的镜像
    yum-config-manager \
    	--add-repo \
    	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  4. 更新yum软件包索引

    yum makecache fast
    
  5. 安装docker

    # docker-ce: 社区版	docker-ee: 企业版
    yum install docker-ce docker-ce-cli containerd.io
    
  6. 启动docker

    # 启动
    systemctl start docker
    # 重启
    systemctl reload docker
    # 关闭
    systemctl stop docker
    
  7. 查看docker版本
    在这里插入图片描述

  8. 运行hello word

    docker run hello-world
    

    在这里插入图片描述

  9. 查看下载的镜像

    docker images
    

    在这里插入图片描述

  10. 卸载Docker

    # Uninstall the Docker Engine, CLI, and Containerd packages
    # 卸载依赖
    yum remove docker-ce docker-ce-cli containerd.io
    
    # 删除资源
    # docker的默认工作路径: /var/lib/docker
    rm -rf /var/lib/docker
    
3. 配置阿里云镜像加速
  1. 官网位置
    在这里插入图片描述

  2. 命令位置
    在这里插入图片描述

  3. 执行

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://21yhdus0.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  4. 操作
    在这里插入图片描述

三. 底层原理

1. Run干了什么
  1. 流程图
    在这里插入图片描述

2. Docker工作原理
  1. Docker 是一个Client-Server结构的系统, Docker的守护进程运行在主机上, 通过Socket从客户端访问

  2. Docker Server接受到Docker-Client的指令, 就会执行这个命令
    在这里插入图片描述

3. Docker为什么比VM快?
  1. Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。

  2. Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟

    在这里插入图片描述

  3. 所以说, 新建一个容器的时候, docker不需要像虚拟机一样重新加载一个操作系统内核, 避免用到, 虚拟机时加载Guest OS, 分钟级别.

    而Docker时利用宿主机的操作系统, 省略了这个复杂的过程; 秒级别.

四. Docker命令

1. 帮助命令

# 显示docker的版本信息
docker version

# 显示docker的系统信息, 包括镜像和容器数量
docker info

2. 镜像命令

1. docker images:
  1. 帮助命令

    # 帮助命令
    docker images --help
    

    在这里插入图片描述
    在这里插入图片描述

  2. docker images

    docker images
    
    # REPOSITORY      TAG         IMAGE ID       CREATED         SIZE
    # hello-world     latest      bf756fb1ae65   9 months ago    13.3kB
    
    # 解释
    # REPOSITORY: 镜像的仓库源
    # TAG: 镜像的标签
    # IMAGE ID: 镜像的ID      
    # CREATED: 镜像的创建时间
    # SIZE: 镜像的大小
    
    # 可选项
    Options:
      -a, --all             # 列出所有镜像
      -q, --quiet           # 只显示镜像ID
    

    在这里插入图片描述

2. docker search: 搜索镜像
  1. 命令

    docker search mysql
    

    在这里插入图片描述
    在这里插入图片描述

  2. 可选项

    Options: -f, --filter filter Filter output based on conditions
    provided
    –format string Pretty-print search using a Go template
    –limit int Max number of search results (default 25)
    –no-trunc Don’t truncate outpu

    # --filter=STARS=3000: 搜索STARS大于3000的镜像
    docker search mysql --filter=stars=3000
    

    在这里插入图片描述

3. docker pull: 下载镜像
  1. docker pull --help

    docker pull --help
    

    在这里插入图片描述

  2. docker pull 镜像名 [:tag]

    [root@Jiangfengtime ~]# docker pull mysql:5.7
    [root@Jiangfengtime ~]# docker pull mysql
    Using default tag: latest		# 如果不写tag, 默认就是latest
    latest: Pulling from library/mysql
    bb79b6b2107f: Pull complete 	# 分层下载, docker image的核心, 联合文件系统
    49e22f6fb9f7: Pull complete 
    842b1255668c: Pull complete 
    9f48d1f43000: Pull complete 
    c693f0615bce: Pull complete 
    8a621b9dbed2: Pull complete 
    0807d32aef13: Pull complete 
    9eb4355ba450: Pull complete 
    6879faad3b6c: Pull complete 
    164ef92f3887: Pull complete 
    6e4a6e666228: Pull complete 
    d45dea7731ad: Pull complete 
    Digest: sha256:86b7c83e24c824163927db1016d5ab153a9a04358951be8b236171286e3289a4	# 签名
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest	# 真实地址
    
    # 等价于
    docker pull mysql
    docker pull docker.io/library/mysql:latest
    

    在这里插入图片描述

4. docker rmi -f
  1. 命令

    # 通过IMAGE ID 删除镜像
    docker rmi -f bf756fb1ae65
    # 通过REPOSITORY 删除镜像
    docker rmi -f hello-world
    # 删除所有镜像
    docker rmi -f $(docker images -aq)
    

3. 容器命令

说明: 我们有了镜像才可以创建容器,linux, 下载一个centos镜像来测试学习

  1. 下载contos

    docker pull centos
    
1. 启动容器
  1. 启动容器

    docker run [可选参数] image
    
    # 参数说明
    --name="Name"			容器名称	tomcat01, tomcat02, 用来区分容器
    -d						后台方式运行
    -it						使用交互方式运行, 进入容器查看内容
    -p						指定容器的端口 -p 8080:8080
    	-p ip:主机端口:容器端口
    	-p 主机端口:容器端口(常用)
    	-p 容器端口
    	容器端口
    -P						随机指定端口
    
  2. 实践

    docker run -it centos /bin/bash
    

    在这里插入图片描述

2. 退出容器
  1. 命令

    # 从容器中退出到主机(退出并停止运行)
    exit
    
    ctrl + p + q(退出, 在后来运行)
    

    在这里插入图片描述

3. 列出所有运行的容器
  1. 命令

    docker ps
    docker ps -a
    
    # -a: 列出正在运行的容器 + 历史运行过的容器
    # -n=?: 显示最近创建的?个容器
    # -q: 只显示容器的编号
    

    在这里插入图片描述

4. 删除容器
  1. 命令

    # 删除指定的容器, 不能删除正在运行的容器
    #  -f: 强制删除, 可以删除正在运行的容器
    docker rm 容器id
    
    # 删除所有的容器
    docker rm -f $(docker ps -aq)
    docker ps -a -q|xargs docker rm
    
5. 启动和停止容器的操作
  1. 命令

    docker start 容器id		# 启动容器
    docker restart 容器id		# 重启容器
    docker stop 容器id		# 停止当前正在运行的容器
    docker kill 容器id		# 强制停止当前容器
    
    

4. 常用其他命令

1. 后台启动容器
  1. 命令: -d

    # docker run -d 镜像名
    docker run -d centos
    
  2. 问题:

    docker ps 时, 发现contos停止了
    在这里插入图片描述

  3. 原因

    [常见的坑] docker容器使用后台运行时, 必须要有一个前台进程, docker发现没有应用, 就自动停止

    nginx容器启动后, 发现自己没有提供服务, 就会立即停止

2. 查看日志
  1. 命令

    # 先启动一个容器
    # 容器中会产生日志
    docker run -d centos /bin/sh -c "while true; do echo hjf; sleep 1; done"
    
    # 查看容器的日志
    docker logs -f -t --tail 10 5a94aa135611
    

    在这里插入图片描述

  2. 参数说明

    -f: follow, 动态输出, 如果不加-f参数, 则只输出运行命令时的日志
    -t: timestamps, 显示时间戳
    --tail n: 显示日志的最后n条
    
3. 查看容器中的进程信息
  1. 命令

    docker top 容器id
    

    在这里插入图片描述

4. 查看镜像的元数据
  1. 命令

    docker inspect 容器id
    

    在这里插入图片描述

    此时可以发现, 之前写的容器id, 实际上是真实ID的前12位

5. 进入当前正在运行的容器
  1. 说明

    容器通常都是使用后台方式运行, 需要将进入后台修改一些配置

  2. 命令1

    # docker exec -it 容器id bashShell
    docker exec -it 5a94aa135611 /bin/bash
    

    在这里插入图片描述

  3. 命令2

    # docker attach 容器id
    # 进入到正在执行的代码
    docker attach 5a94aa135611
    
  4. 说明

    docker exec : 进入容器后开启一个新的终端, 可以在里面操作(常用)

    docker attach: 进入容器正在执行的终端, 不会启动新的进出

6.从容器内拷贝文件到主机
  1. 命令

    # docker cp 容器id:文件路径 /主机路径
    docker cp 5750731000b1:/home/hjf.txt /home
    
  2. 示例

    # 进入容器
    docker attach 5750731000b1
    # 新建文件
    touch /home/hjf.txt
    # 退出容器
    exit
    # 拷贝容器文件到主机
    docker cp 5750731000b1:/home/hjf.txt /home
    

    在这里插入图片描述

  3. 说明

    拷贝是一个手动过程, 未来我们使用 -v 卷的技术, 可以实现容器中的数据和主机里的数据自动同步

说明

  1. 本文参考了狂神的Docker教程
  2. 【狂神说Java】Docker最新超详细版教程通俗易懂
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值