getting-started-with-docker
2024-06-06 11:19:45 4 举报
AI智能生成
讲述 docker 相关知识点, 愿你不要从入门到"放弃"
作者其他创作
大纲/内容
安装
为什么
更高效的利用系统资源
不需要进行硬件虚拟以及运行完整操作系统等额外开销
更快速的启动时间
直接运行于宿主内核,无需启动完整的操作系统, 相比虚拟机更快启动
运行环境一致
不会再出现 「这段代码在我机器上没问题啊」 这类问题
持续交付和部署
开发人员通过 Dockerfile 来进行镜像构建, 可以结合 持续集成(Continuous Integration) 系统进行集成测试
运维人员在生产环境中快速部署该镜像,可以持续部署(Continuous Delivery/Deployment) 系统进行自动部署
平台迁移
docker 可以多平台运行, 保证我们的应用可以轻松迁移到其他平台
微服务
概念
镜像
可以类比操作系统镜像,本质是一个 root 文件系统
容器运行时所需的程序、库、资源、配置等文件
运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
分层存储, 基于Union FS 技术, 方便复用和定制
在构建镜像的时,每一层尽量只包含该层需要添加的东西,在该层构建结束前清理掉所有额外的文件
容器
容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层
持久存储: 启动时候绑定 Volume
仓库
类比 npm registry, 官网 Registry: https://hub.docker.com
可以使用 Docker 官方提供的 Docker Registry 来部署私有 Registry
Docker 服务端
一个守护进程, 管理容器以及响应 Docker 客户端的请求
Docker 客户端
一个命令行工具, 用户通过它与 Docker 服务端交互, 来操纵和查看容器
Docker 仓库
类似于 Github 上的一个个项目一样
仓库下可以有很多镜像, 类似同一个 Git 项目的不同 Tag 一样, Docker 仓库下的不同镜像是靠 tag 来区分的
Docker 顶层仓库
顶层仓库是由 Docker 公司和选定的能提供优质基础镜像的厂商管理
用户通常基于这些基础镜像构建自己的镜像
命令
容器
创建
docker run
基于镜像创建新容器,并运行命令
使用
创建和启动容器, 并运行指定命令: docker run ubuntu ls
创建一个具有交互 Shell 的容器: docker run -it ubuntu bash
指定主机名: docker run -h mwumli ubuntu hostname
指定容器名: docker run --name mwumli ubuntu ls
自动重启容器, 最多 5 次: docker run --restart-on-failure:5 -d ubuntu command
容器退出后自动删除: docker run --rm ubuntu ls
设置工作目录
docker run -w /usr/local ubuntu pwd
后台运行一个容器: docker run -d ubuntu /bin/sh -c "while true; do echo hello,world!; sleep 1; done"
数据共享
容器和宿主机
docker run -v /host-dir:/container-dir -v container-dir ubuntu touch share.txt
容器之间
docker run -it --volumes-from container debian /bin/bash
link 互联
docker run --rm --link redis:db -it ubuntu bash
启动
docker start
启动一个已停止的容器
重新启动
docker restart
停止运行中的容器,然后重新启动
列举
docker ps
列出所有运行状态的容器
docker ps
列出所有容器
docker ps -a
列举所有已退出的容器ID
docker ps --filter="status=exited" --format="{{.ID}}"
停止
docker stop
本质是使用 docker kill 发送 SIGTERM 信号
暂停/取消暂停
docker pause
docker unpause
杀死
docker kill
默认发送 SIGKILL 信号,可以指定其他信号
删除
docker rm
删除所有已停止的容器: docker rm $(docker ps -a -q --filter="status=exited")
日志
docker logs
内部进程
docker top
运行新进程
docker exec
信息
docker inspect
获取实例日志路径: docker inspect --format='{{.LogPath}}' $INSTANCE_ID
获取实例IP地址: docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID
获取实例镜像名: docker inspect --format='{{.Config.Image}}' $INSTANCE_ID
列出端口映射
docker port
导出
docker export
将容器的文件系统保存为一个 tar 包
导入
docker import
将 docker export 导出的 tar 包导入为一个镜像
提交
docker commit
镜像
删除
docker rmi
列举
docker images
导出
docker save
保存一个或多个镜像到一个 tar 包
导入
docker load
导入一个 docker save 保存 tar 包, tar 包中包含的镜像就被还原到当前 docker 镜像列表
拉取
docker pull
推送
docker push
volume
docker volume
docker volume create
docker volume rm
docker volume prune
docker volume ls
docker volume inspect
network
docker network
docker network create
docker network rm
docker network ls
docker network connect
docker network disconnect
docker network prune
审查 docker 对象
docker inspect
镜像构建
白手起家
中途介入
docker commit
docker build
准备构建指令 Dockerfile
指定基础镜像: From ubuntu:14.04
触发器: ONBUILD [instruction]
设置元信息: LABEL author=MwumLi email="mwumli@hotmail.com"
设置环境变量: ENV refreshed 2019-09-22
指定卷: VOLUME /opt/data
指定运行用户: USER partick
复制文件到镜像中: ADD 或 COPY
运行命令: RUN apt-get update
暴露端口: EXPOSE 80
设置工作目录: WORKDIR /tmp
设置入口点: ENTRYPOINT ["s3cmd"]
设置启动命令: CMD echo 'docker setup'
忽略 .dockerignore
剔除不需要作为上下文传递给 Docker 引擎的. 加快构建速度
构建: 执行构建命令
基于构建缓存可以加快重新构建镜像速度
文章
Docker 镜像构建教程:减小镜像体积
私有 Registry
docker pull/push 需要在镜像 tag 前指定私有 registry 地址, 因此需要使用 docker tag 命令对镜像标签进行重新标记
Docker 远程 API
通过调用 docker 远程 API 可以开发一些基于 docker 的自定义应用,比如 docker web 终端
多 CPU 架构支持
0 条评论
下一页