美文网首页
Docker从入门到放弃

Docker从入门到放弃

作者: 李霖弢 | 来源:发表于2021-05-13 09:46 被阅读0次

    Docker概念

    • 镜像(Image):只读模板。
      容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

    • 容器(Container):容器是镜像创建的应用实例,容器间相互隔离。

    • 仓库(Repository):镜像仓库,类似镜像界的github。
      比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
      最大的公开仓库是dockerhub)

    • 注册服务器(Registry):存放仓库的地方

    • K8S :容器集群管理系统
      用于容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。

    与虚拟机区别

    容器类似一个轻量级的虚拟机(但本质上不是虚拟机,虚拟机是操作系统级别的资源隔离,而容器是进程级的资源隔离)。
    相比虚拟机,Docker启动更快,占用空间更小,对资源的利用率更高。


    Docker的安装和卸载

    Docker可以安装在Windows、Linux、Mac等各个平台上。

    Windows

    其中Windows上安装的Docker Desktop基于WSL(Windows Subsystem for Linux) ,用于在windows上跑linux系统
    安装完毕后cmd执行docker run hello-world测试是否安装成功

    Linux
    1. 通过 cat /proc/version 查看系统版本
    2. 通过命令行安装相应docker
    查看docker版本
    • docker version

    镜像

    查看镜像
    • docker image ls
    • docker images
      注意CREATED为镜像的创建日期(不是获取该镜像的日期)
    拉取镜像

    标签通常是版本号,默认为latest
    注意:该latest是镜像管理者手动添加的tag,而非总是最新版本。

    • 从docker hub上拉取镜像
      docker pull【镜像名:标签】
      docker image pull【镜像名:标签】
    docker pull ubuntu
    docker pull ubuntu:16.04
    
    • 从个人仓库拉取镜像
      docker pull 【仓库名】/【镜像名:标签】
    docker pull xunmi/django
    
    • 从第三方拉取镜像
      docker pull 【第三方仓库地址】/【仓库名】/【镜像名:标签】

    仓库名默认library,从官方获取镜像相当于docker pull library/【镜像名:标签】

    docker pull hub.c.163.com/library/mysql:latest
    
    删除镜像

    若镜像已生成容器,需删除容器后再删除镜像

    • docker image rm 【镜像名或镜像ID】
    • docker rmi 【镜像名或镜像ID】

    容器

    查看容器

    查看正在运行的容器

    • docker ps 【可选参数】
      • -a 查看所有容器 (否则只显示正常运行中的容器)
      • -s 显示容器size
    通过配置文件生成容器
    1. vi Dockerfile 在当前目录下创建并编辑Dockerfile文件
    2. 输入 from python:3.7 ,通过 Esc + :wq + 回车 保存
    3. docker build 【可选参数】 【镜像名:标签】 【向启动容器中传入的命令】
    通过命令行生成容器
    • docker run 【可选参数】 【镜像名:标签】 【向启动容器中传入的命令】
    docker run -dp 8080:80 --name docker-test docker/getting-started
    
    • 向启动容器中传入的命令
      默认为/bin/sh (= sh = /bin/bash = bash
    • 镜像名:标签
      加载一个本地镜像生成容器,如不存在则自动从官方仓库下载
      标签默认为latest
    • 可选参数
      • -it 两个参数通常一起使用,分配一个伪终端给容器,创建后可以进入容器命令行。否则非持续运行的容器会在start后自动stop。(docker exec同理)
      • -d 会创建一个守护式容器在后台运行
      • –name 为创建的容器命名。(不支持中文字符,默认会随机给名字)
      • -v 表示目录映射关系,即宿主机目录:容器中目录,建议均使用绝对路径。不存在的目录会自动创建。
      • -p 表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
      • –network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。
    开启容器
    • docker start【容器名或id】
    • docker container start【容器名或id】
    停止容器
    • docker stop 【容器名或id】
    • docker container stop 【容器名或id】
    删除容器
    • docker rm【容器名或id】
    在运行的容器中执行命令
    • docker exec 【可选参数】【容器名或id】【命令】
      如下bash即可唤起命令行工具
    docker exec -it mynode12 bash
    
    将容器制作成镜像

    便于备份、复用

    • docker commit 【容器名或id】 【镜像名或id】
      将容器制作成镜像
    • docker save -o 【保存的文件名】 【镜像名或id】
      镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀)
    • docker load -i 备份文件路径
      导入备份

    查看镜像、容器信息

    • docker history --no-trunc 【镜像名称或id】
      查看镜像的创建历史。其中--no-trunc表示不折叠内容
    • docker port 【容器名称或id】
      查看容器端口号映射关系
    • docker inspect 【镜像、容器名称或id】
      查看镜像、容器配置信息,其中HostConfig项有初始化信息

    容器内外文件复制

    容器外执行指令

    • 容器内复制到容器外
      docker cp 【容器名或id:容器内文件路径】 【容器外文件路径】
    • 容器外复制到容器内
      docker cp 【容器外文件路径】 【容器名或id:容器内文件路径 】

    查看docker容器日志

    docker logs [OPTIONS] CONTAINER
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
    
    • docker logs -f --tail=100 b62a 实时查看b62a容器最近100行日志

    简单的操作示例

    • docker images 查看所有镜像
    • docker pull python:3.10 拉取镜像
    • docker ps -a 查看所有容器
    • docker run -itd -p 49000:5000 --name pdf -v /data/QL_pdf:/data/QL_pdf python:3.10 创建容器
    • docker exec -it 容器 bash 进入容器
    • exit 退出容器
    • docker stop 容器 关闭容器
    • docker start 容器 启动/重启容器

    常见问题

    容器创建后不处于运行状态

    docker容器运行必须有一个前台进程, 如果没有前台进程保持执行,容器认为空闲,就会自行退出。

    • 有一个一直执行(top,tail、循环等)的前台(-d会变成后台进程)进程
    docker run myempty:0.1 /bin/sh "while true; do ls;sleep 1;done"
    
    • 直接使用-i -t,此时即使有-d也不会退出

    相关文章

      网友评论

          本文标题:Docker从入门到放弃

          本文链接:https://www.haomeiwen.com/subject/cyiodltx.html