目录
Docker 是一个允许用户"在任何地方构建、分发及运行任何应用"的平台。
Dockerfile 被认为是构建 Docker 镜像的标准方式。
Docker 基础
Docker 初探
docker 是什么以及为什么用 docker
docker 有什么好处
-
替代虚拟机
-
软件原型
-
打包软件
-
让微服务架构成为可能
-
网络建模
-
离线时启用全栈生产力
-
降低调试支出
-
文档化软件依赖及接触点
-
启用持续交付
关键的 docker 命令
命令 | 目的 |
---|---|
docker build | 构建一个 Docker 镜像(如:docker build -t app:laster .) |
docker run | 以容器形式运行一个 Docker 镜像,docker run -d 以守护进程启动 |
docker commit | 将一个 Docker 容器作为一个镜像提交 |
docker tag | 给一个 Docker 镜像打标签,命令:docker tag 镜像 id 想给镜像取的名字 |
docker exec -i -t 容器名 /bin/bash | 将会在正在运行的容器里启动/bin/bash;容器名也可以用容器 id;-i 意味着这条 exec 命令以交互模式运行,-t 确保 exec 将会按照一个终端预期的那样工作 |
docker image list | 查看 docker 镜像列表信息 |
docker exec -it 容器名 /bin/bash | 进入 docker 容器 |
docker cp 容器名:路径 目标路径 | 将容器文件下载到目录(如: docker cp carteam-server:/script/car-team-service-1.0-SNAPSHOT.jar /opt ) |
docker ps | 查看正在运行中的容器 |
docker start 容器名 | 启动 docker |
docker save | 将 docker 镜像打包成 tar 包,命令 docker save -o *.tar 镜像名 |
1. 新建一个目录,如:ids_docker
2. 执行copy.sh文件;或者直接将Dockerfile、run.sh 和应用程序copy到对应的文件夹;
3. 打包成 docker 镜像,执行命令: docker build -t ids:laster .
4. 查找镜像文件,执行命令:docker image list
5. 启动镜像,执行命令:docker run -d imageName
6. 查看docker进程,执行命令:docker ps
7. 将镜像打包成tar,执行命令:docker save -O *.tar imageName
镜像与容器
一个 Docker镜像是由文件和元数据组成的。容器是从镜像中创建的,继承了他们的文件系统,并使用它们的元数据来确定其启动配置。容器是相互分离的,但可以配置进行彼此通信。
构建一个 Docker 应用程序
-
如何使用 Dockerfile 来创建Docker 镜像
-
如何为 Docker 镜像打标签以便引用
-
如何运行新建的 Docker 镜像
创建 新的 Docker 镜像的方式
创建 Docker 镜像有4种标准的方式。如下表:
方法 | 描述 | 技巧 |
---|---|---|
Docker 命令/"手工" | 使用 docker run 启动一个容器,并在命令行输入命令来创建镜像。使用 docker commit 来创建一个新镜像 | |
Dockerfile | 从一个已知基础镜像开始构建,并指定一组有限的简单命令来构建 | |
Dockerfile 及配置管理(configuration management,CM)工具 | 与 Dockerfile 相同,不过将构建的控制权交给了更为复杂的 CM工具 | |
从头创建镜像并导入一组文件 | 从一个空白镜像开始,导入一个含有所需文件的 TAR 文件 |
-
编写一个 Dockerfile
Dockerfile 是一个包含一系列命令的文本文件。如下:
FROM node //定义基础镜像 MAINTAINER god_yin@aliyun.com //声明维护人员 RUN git clone -q https://github.com/docker-in-practice/todo.git //克隆 todoapp 代码 WORKDIR todo //移动到新的克隆目录 RUN npm install > /dev/null //运行 node 包管理器的安装命令(npm) EXPOSE 8000 //指定从所构建的镜像启动的容器需要监听这个端口 CMD ["npm", "start"] //指定在启动时需要运行的命令
-
构建一个 Docker 镜像
# 构建 Docker 镜像 docker build Dockerfile文件所在路径 # 将镜像打标签 docker tag 要打标签的镜像ID 为镜像打的标签名
-
运行一个 Docker 容器
#docker run 子命令启动容器,-p 将容器的8000端口映射到宿主机的8000端口上,--name 给容器赋予一个唯一的名字,最后一个参数是镜像 docker run -p 8000:8000 --name examplel todoapp #运行这个命令查看已经启动和移除的容器,以及其 ID 和状态(就想进程一样) docker ps -a # 重新启动容器,这次是在后台运行 docker start examplel #docker diff 子命令显示了自镜像被实例化成一个容器以来哪些文件受到了影响 docker diff examplel
-
Docker 分层
Docker 分层协助用户管理在大规模使用容器时会遇到一个大问题。想象一下,如果启动了数百甚至数千个 to-do 应用,并且每个应用都需要将文件的一份副本存储在某个地方。
可想而知,磁盘空间会迅速消耗光!默认情况下,Docker 在内部使用写时复制(copy-on-write)机制来减少所需的磁盘空间量。每当一个运行中的容器需要写入一个文件时,它会通过将该项目复制到磁盘的一个新区域来记录这一修改。在执行 Docker 提交时,这块磁盘新区域将被冻结并记录为具有自身标识符的一个层。
理解 Docker-深入引擎室
Docker 架构
调用 Docker 客户端可以从守护进程获取信息或给它发送指令。守护进程是一个服务器,它使用 HTTP 协议接收来自客户端的请求并返回响应。相应地,它会向其它服务发送请求和接收镜像,使用的同样是 HTTP 协议。
私有 Docker 注册中心是存储 Docker 镜像的一项服务,可以从任何有相应权限的 Docker 守护进程向其发送请求。
Docker 守护进程
Docker 守护进程是用户与 Docker 交互的枢纽,它控制者用户机器上的 Docker 访问权限,管理着容器与镜像的状态,同时代理着与外界的交互。守护进程通常也是服务器,接收来自客户端的请求,为其执行操作。docker 命令是一个客户端,而 Docekr 守护进程则作为服务器对 Docker 容器和镜像进行操作。
开放 Docker 守护进程
# 查看 docker 守护进程 ps -ef | grep -E 'docker (-d|daemon)\b' | grep -v grep #手工重启并向外界开放守护进程 docker daemon -H tcp://0.0.0.0:2375 #查看 docker 进程 docker ps -a
以守护进程方式运行容器
在 docker run 命令中使用-d 标志
#-d标志标识以守护进程方式运行容器,-i 标志则赋予容器与 Telnet 会话交互能力,使用 -p 将容器的1234端口公布到宿主机上,--name 标志赋予容器一个名称,以便后期用来对它进行引用,netcat(nc)标志在1234端口上运行一个简单的监听应答(echo)服务器。 docker run -d -i -p 1234:1234 --name daemon ubuntu nc -l 1234
将 Docker 移动到不同分区
<