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学习记录(1)——搭建自己的Docker Registry

最近在编写Kubernetes demo的时候,遇到了一个问题:当相同的Pod部署到不同的Node上时,每个Node都得下载Pod中指定的镜像文件。 由于“墙”...

3280
来自专栏生信宝典

用了Docker,妈妈再也不担心我的软件安装了 - 基础篇

Docker能做什么 The key benefit of Docker is that it allows users to package an appli...

3336
来自专栏IT探索

docker使用笔记

1)mkdir /etc/systemd/system/docker.service.d

751
来自专栏龙渊阁测试精英

Docker_部署jenkins(dockerfile实现)

我用的是ubuntu14.04的基础镜像,并且在基础镜像中已经把ant,tomcat,jdk的安装包配置好了。具体的这里不做赘述。

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

Docker入门教程

Docker是一个部署和管理容器化应用程序的平台。由于容器的灵活性,容器在开发人员,管理员和开发人员工程师中很受欢迎。

1391
来自专栏python3

Docker修改hosts

Docker修改hosts?这还不简单,打开vim直接敲就完事儿了!然而事与愿违,事情没有我们想的那么简单。在很多场景中,比如我们需要搭建一个集群,这时候容器要...

1652
来自专栏Spring相关

在Centos7上安装Docker

在Centos7上安装Docker-ce直接用yum install docker -y安装的docker版本为1.12,但是docker发展很快,现在都18....

1233
来自专栏大数据和云计算技术

简单3步,docker跑起来

docker使用起来真是简单,只需要简单的几步,一个程序就能跑起来。 第一步,从docker官网上下载DockerToolbox-1.8.1c.pkg到本地,然...

36814
来自专栏性能与架构

Docker中配置centos容器支持ssh

image.png 在Docker起步中,已经下载了ubuntu系统镜像,启动容器后成功执行了一个简单的系统命令 此时的容器是封闭的,下面我们就建立起和容器的沟...

3058
来自专栏zhisheng

Docker 入门(一):理解三大核心

Docker 的前世今生 Docker 的核心理念是 Build, Ship, and Run Any App, Anywher,即一次封装,到处运行。 从前,...

3397

扫码关注云+社区