Docker 入门

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 容器中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏应兆康的专栏

Docker 简介与安装

Github: https://github.com/yingzk/MyDocker

44023
来自专栏散尽浮华

Docker容器学习梳理--基础知识(2)

之前已经总结了Docker容器学习梳理--基础知识(1),但是不够详细,下面再完整补充下Docker学习的一些基础。 Docker是个什么东西 Docker是一...

27710
来自专栏从零学习云计算

kubernetes学习记录(3)——集群外部访问Pod或Service

学习阅读的书籍为《kubernetes权威指南:从Docker到Kubernetes实践全接触》,书中有不少地方讲的比较模糊,故在此做下学习过程中的梳理。 Po...

3780
来自专栏云计算教程系列

如何在CentOS 7上安装和使用Docker Compose

Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭...

3470
来自专栏测试开发架构之路

Docker学习以及镜像制作流程

2843
来自专栏Pythonista

docker网络

容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。

3234
来自专栏性能与架构

如何 build 出尽可能小的 docker image?

1. 简介 我们自己构建 Docker image 时都希望结果镜像越小越好,那么如何才能尽量变小呢? 下面我们通过一个简单的案例,了解下优化思路,看一个简单的...

3176
来自专栏编程坑太多

『中级篇』docker 使用bind Mounting实战(36)

PS:通过这个例子我想到了,我做java开发的可以吧对应的tomcat里面的webapp下的关联容器外部,容器内就跑tomcat 连接容器外的文件app 就可以...

1004
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装和使用Docker Compose

Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭...

3561
来自专栏java技术学习之道

如何使用 Docker 搭建 Java Web 运行环境

2485

扫码关注云+社区

领取腾讯云代金券