前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 入门

Docker 入门

作者头像
lwen
发布2018-06-11 14:43:39
7660
发布2018-06-11 14:43:39
举报
文章被收录于专栏:Java 源码分析

1. Docker 简介

直接运行于操作系统内核上的虚拟化解决方案,他是一个操作系统级别的虚拟化也就是说容器只能运行在相同或者相似的内和操作系统之上的。所以我们只能在 docker 中运行 Linux 系统而不能运行 Windows 系统。他是依赖于 Linux 的内核特性:Namespace 和 Cgroup (Control Group)。

1. VM vs Docker

可以看到,在虚拟机上我们需要包含到细腻华技术和操作系统,但是我们在 Docker 中只需要依赖底层的操作系统,和一些必要的库,所以在空间上有非常大的优势,另外就是速度上,由于启动的服务更少,无需启动 OS 所以开销更小。

2. 镜像

docker 的镜像组成如上图,最底层就启动层,然后就是 root 文件系统,接着是我们自己叠加的各种应用。注意这里的每一层都是只读的,但是在我们的 linux 中,root 一开始是只读的,加载完毕后是可写的,但是这里不同,主要就是因为可以进行镜像的叠加。然后使用联合加载技术,同时把所有的镜像层加载进去。

3. 容器

docker 的镜像相当于一个 class 类,然后容器则是 new 出来的对象。容器是基于镜像运行出来的,但是我们有时候还是需要对镜像或者容器进行修改,这里采用的方式就是在镜像的最上面一层添加上一层虚拟的层,写得操作都是在这一层,当我们要生成新的镜像的时候就是把这一层设置为只读。这也是 docker 的 CopyOnWrite 技术。

4. Namespace 和 Cgroups

Linux 内核实现的 Namespace 就是用于文件系统,进程,网络,IPC,MNT,UTS 的隔离。而 Cgroups 是用于对上面的 namespace 的资源限制,优先级设定。

2. 容器基本操作

1.启动容器

1

docker run image args cmd

2.创建交互容器

1

docker run -i -t ubuntu /bin/bash

3. 查看所有容器/最近创建的容器

1

docker ps -a/-l

4. 检查 docker 容器,返回详细信息

1

docker inspect ubuntu

5. 设置容器名

1

docker run --name ubu ubuntu

6. 以交互方式启动已经停止的容器

1

docker start -i ubu

7. 删除停止的容器

1

docker rm ubu

8. 守护运行

在运行docker 容器以后我们要退出的时候不要用 ctrl+c 或者 exit ,使用 ctrl+p/q 既可以实现以 Daemon 方式运行容器。而此时如果我们需要再次进入容器我们需要使用 docker attach name 来进入容器。

另外我们还可以使用 -d 参数在运行容器的时候让他进入 Daemon 状态。

9. 查看输出

当我们在后台状态运行容器的时候有时候我们需要查看对应的输出,就可以使用

1

docker logs -f -t --tail nun name

  • -f 是实时更新输出(follow)
  • -t 则是带有时间的日志(timestamp)
  • —tail 指定结尾行数
10. 查看运行容器中运行的进程

1

docker top name

11. 在运行的容器中启动新的进程/运行新的命令

1

docker exec -i/-t name #类似 run

12. 停止容器

12

docker stop name #信号docker kill name #杀死

3. 镜像操作

1. 查看镜像

1

docker [-f --no-tunck -a -q] images

  • -f 使用过滤器,过滤部分镜像
  • —no-tunck 不进行 id 的截断
  • -a 显示所有的镜像
  • -q 只显示镜像 id
2. tag

表示一个镜像的不同版本。

3. 删除镜像

1

docker rmi name:tag

删除镜像,当我们删除的是很多的镜像的一个 tag 则是 untag 操作。

4. 查找镜像
  1. dockerhub 网站
  2. 使用 search 命令
    • -s 过滤最低星级

1

docker search [-s num] name

5. 获取镜像

1

docker [-a] pull name

-a 这个参数就是下载所有 tag 的镜像。

6. push 镜像

1

docker push rep/name

在上传的时候我们只上传了修改的部分,而不是全部。

7. 构建 docker 镜像
1. docker commit

1

docker commit [-a -m ] name rep/name

把镜像提交成一个新的镜像。

  • -a 作者信息
  • -m 提交信息
2. docker file

创建 dockerfile 然后使用 docker bulid -t name filepath 构建镜像。

8. Dockerfile
  1. FROM 第一条非注释命令,表示采用那个镜像作为基础镜像
  2. MAINTAINER 维护者信息
  3. RUN cmd 每一个 run 都会创建一个新的层
  4. EXPOSE port 开放端口
  5. CMD 运行时运行,会被 RUN 覆盖
  6. ENTERPOINT 同上,但是不会被 RUN 覆盖
  7. ADD/COPY src des 复制文件,ADD 有类似解压功能,COPY 没有

4. Docker 容器连接

1. docker 之间的连接

我们可以使用

1

docker run --link=name:alias

接下来访问响应的主机我们只需要使用 alias 即可。因为实际上是在这台机子上做了很多的环境变量还有 host 的修改导致的。

2. 拒绝连接

123

--icc =false --link--iptables=true

如果配置了 —icc=false 那么就是拒绝所有的连接。而当我们配置了 iptables 则只允许 link 指定的容器。

5. 数据卷

数据卷说白了就是数据映射,将本机的数据映射到 docker 容器中。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Docker 简介
    • 1. VM vs Docker
      • 2. 镜像
        • 3. 容器
          • 4. Namespace 和 Cgroups
            • 1.启动容器
            • 2.创建交互容器
            • 3. 查看所有容器/最近创建的容器
            • 4. 检查 docker 容器,返回详细信息
            • 5. 设置容器名
            • 6. 以交互方式启动已经停止的容器
            • 7. 删除停止的容器
            • 8. 守护运行
            • 9. 查看输出
            • 10. 查看运行容器中运行的进程
            • 11. 在运行的容器中启动新的进程/运行新的命令
            • 12. 停止容器
            • 1. 查看镜像
            • 2. tag
            • 3. 删除镜像
            • 4. 查找镜像
            • 5. 获取镜像
            • 6. push 镜像
            • 7. 构建 docker 镜像
            • 8. Dockerfile
        • 2. 容器基本操作
        • 3. 镜像操作
        • 4. Docker 容器连接
          • 1. docker 之间的连接
            • 2. 拒绝连接
            • 5. 数据卷
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档