docker快速入门

不需要进行硬件虚拟以及运行完整操作系统等额外开销

直接运行于宿主内核,无需启动完整的操作系统, 相比虚拟机更快启动

不会再出现 「这段代码在我机器上没问题啊」 这类问题

开发人员通过 Dockerfile 来进行镜像构建, 可以结合 持续集成(Continuous Integration) 系统进行集成测试
运维人员在生产环境中快速部署该镜像,可以持续部署(Continuous Delivery/Deployment) 系统进行自动部署

docker 可以多平台运行, 保证我们的应用可以轻松迁移到其他平台

可以提供微服务

(Redhat/Fedora/Centos)

1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1
yum install docker-ce docker-ce-cli

安装后查看docker版本

1
 docker -v
1
systemctl start docker

运行 hello-world映像来验证是否正确安装了 Docker Engine-Community

1
docker run hello-world

可以类比操作系统镜像,本质是一个 root 文件系统
容器运行时所需的程序、库、资源、配置等文件
运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
分层存储, 基于Union FS 技术, 方便复用和定制
在构建镜像的时,每一层尽量只包含该层需要添加的东西,在该层构建结束前清理掉所有额外的文件

容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层
持久存储: 启动时候绑定 Volume

类比 npm registry, 官网 Registry: https://hub.docker.com
可以使用 Docker 官方提供的 Docker Registry 来部署私有 Registry

一个守护进程, 管理容器以及响应 Docker 客户端的请求

一个命令行工具, 用户通过它与 Docker 服务端交互, 来操纵和查看容器

类似于 Github 上的一个个项目一样
仓库下可以有很多镜像, 类似同一个 Git 项目的不同 Tag 一样, Docker 仓库下的不同镜像是靠 tag 来区分的

顶层仓库是由 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 run_和_docker _exec_的区别可以参考 https://www.fffmo.com/1392.html#ftoc-heading-6

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常用命令可以参考docker常用命令 docker快速上手

docker rmi

docker images

docker save
保存一个或多个镜像到一个 tar 包

docker load
导入一个 docker save 保存 tar 包, tar 包中包含的镜像就被还原到当前 docker 镜像列表

docker pull

docker push

docker volume create
docker volume rm
docker volume prune
docker volume ls
docker volume inspect

docker network create
docker network rm
docker network ls
docker network connect
docker network disconnect
docker network prune

docker inspect

指定基础镜像: 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 pull/push 需要在镜像 tag 前指定私有 registry 地址, 因此需要使用 docker tag 命令对镜像标签进行重新标记

通过调用 docker 远程 API 可以开发一些基于 docker 的自定义应用,比如 docker web 终端

延伸阅读:docker容器生态系统 技术栈

随机文章