基础核心指令
// 登录自己的Hub,可以官网注册个,方便存储私有镜像
docker login
镜像部分:
// 查看镜像
docker images
// 搜索flink相关镜像
docker search flink
// 拉取自身Hub或者官方镜像
docker pull yyoc97/dev:test
// 推送远程仓库
docker push yyoc97/dev:test
// 删除镜像 -f强制,(容器操作rm,参数类似)
docker rmi 容器name/id -f
// 保存hello-world镜像到本地
docker save -o hello.tar hello-world
// 装载本地ubuntu_test镜像到docker环境,再使用docker images查看
docker load < ubuntu_test.tar
// 通过Dockerfile创建镜像, /tmp/docker_builder/为Dockerfile路径,build_repo/first_image为生成镜像标签
docker build -t build_repo/first_image /tmp/docker_builder
容器部分:
// 查看容器,-a全部,-q停止中的
docker ps -a -q
// 根据镜像单独创建容器,返回容器id,
docker create ubuntu:lastest
// 直接运行创建,-d后台运行,--name名字为test,--add-host初始网络映射,-v挂载目录,-p 指定端口映射,-P随机端口,
docker run -d --name test --add-host server.shop.test.com:10.40.10.29 -v /data/logs/test:/data/logs -p 8600:8080 jar-app
// 启动、停止或者重启容器
docker start/stop/restart 容器name/id
// 进入docker终端
docker exec -it 容器id或容器名 /bin/bash
// 共享其他容器数据卷 --volumes-from
docker run -d --volumes-from dbdata --name db1 nginx
// 容器互联,容器可以共享网络,run的启动参数带上
--link name:alias
相关原理
原理
Docker 的基础是Linux容器(LXC)等技术。在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。Linux 命名空间、控制组和 UnionFS 三大技术支撑了目前 Docker 的实现,也是 Docker 能够出现的最重要原因。
- NameSpace
是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法 - Cgroups:
Cgroups是Linux内核功能,它让两件事情变成可能:限制Linux进程组的资源占用,列如:CPU、内存、磁盘 I/O 和网络带宽。 - Union文件系统:
在union文件系统里,文件系统可以被装载在其他文件系统之上,其结果就是一个分层的积累变化。
优势
- 高效的部署和扩容
- 更高的资源利用率
- 更简单的管理
常见异常
Error response from daemon: No such container: bd1
操作容器时,有时候不能通过容器name,要根据id来指定。可能是有些名字被系统预暂用的缘故。
Dockerfile样例
一般而言,分为四部分:基础镜像信息,维护者信息、镜像操作指令和容器启动时执行指令。
# 第一行必须指定基于的基础镜像
FROM ubuntu
# 维护者信息
MAINTAINER docker_user [email protected]
# 镜像操作指令,可以多条
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN bash -c 'touch test.txt'
# 容器启动时执行指令
CMD /user/sbin/nginx
编排和监控
资源管控一直是生产环境中不容忽视的重点,常用的组件有k8s、CAdvisor、DataDog等