docker学习基础篇 入门教程

 

1. 更换dokcer软件源

centos7中docker的配置文件在目录/etc/docker/daemon.json文件中,文件内容如下:

{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

标志默认从哪一仓库下载镜像,国外的网站速度太慢,一般使用国内的网易云或阿里云,将此配置项后的网址换为阿里云或网易云。

2. docker运行的底层原理

本地的docker分为两部分,一部分是docker客户端(即运行的shell终端),一部分是docker服务器(即daemon程序),docker客户端发出指令,由服务端操作/启动容器; 使用docker run时,需要启动的镜像在本地不存在时,服务端从远端仓库中查找镜像是否存在,存在则从仓库中下载并运行,否则退出。

蓝色的大海---宿主机系统 鲸鱼--- docker 集装箱---容器

3. 常用docker命令集

3.1 帮助命令

3.1.1 docker version

显示docker的版本信息。

3.1.2 docker info

docker信息描述,信息比version全。

3.1.3 docker --help

显示所有命令的帮助信息。

3.2 镜像命令

3.2.1 docker images

列出本地的所有镜像文件。

REPOSTIORY :标识仓库源
TAG:镜像的标签,理解为版本号
IMAGID: 镜像的ID号,唯一值
CREATED:镜像的创建时间
SIZE:镜像的大小

-a

列出所有的镜像,包含中间层的镜像,在运行过程中产生的中间层。

-q

只列出所有镜像的镜像ID。

--digests

在docker images基础上增加镜像的摘要信息显示。

3.2.2 docker search <镜像>

从docker hub上搜索镜像的名称,是从docker hub搜索,下载时从配置文件中的仓库地址下载。

-s

根据点赞数列出搜索的镜像结果,使用时 "-s 点赞数"。

3.2.3 docker pull <镜像>

从仓库中拉取镜像,参数的组成为镜像名:TAG,如果不加TAG那么拉取的镜像默认为最新的。

3.2.4 docker rmi <镜像>

  • 删除镜像,参数类型也是由“名称:TAG”组成,如果不指定,则删除的是最新的;
  • 如果有镜像重名,可以使用镜像ID来作为参数。

-f

强制删除,不管image的使用状态强制删除。

  • 删除多个时 docker rmi -f xxx xxx ,以空格分离。
  • 删除所有 docker rmi -f $(docker images -aq),罗列出所有的ID然后删除。

3.3 容器命令

3.3.1 docker run [选项] 镜像 [命令]

这里的命令不加时默认没有,否则就是容器启动后在容器中运行此命令

例如:
docker run -d centos /bin/sh -c "while true;do echo hello zzz;sleep 2;done"
这样容器启动后就会运行后边的脚本

-i

交互模式启动容器。

-t

为容器分配一个伪终端,进行交互通常与i参数一起使用。

交互模式使用/bin/bash的例子:
docker run -it centos /bin/bash

--name

指定容器的名称。

-p 外部端口:内部端口

外部端口:内部端口,外部访问时宿主机与容器的端口对应。

-P 内部端口

宿主机端口由操作系统决定,不指定,可以使用docker ps查看实际的对应端口。

-d

守护的方式运行,在后台启动。

例子:
docker run -d centos

后台启动容器时,使用docker ps -a查看会发现容器已经退出,很重要的一点:docker容器后台运行,就必须要有一个前台进程容器运行的命令不是那些一直挂起的命令(可以是ENTRYPOINT指定的),就会自动退出。 因为docker的这个机制问题,不能使用服务配置程序在容器的后台运行,这样做会导致容器的自动停止。最佳的解决方案是将要运行的程序放到前台。

3.3.2 docker ps

查看docker中运行的容器。

-a

查看所有的容器,正在运行的和历史上运行的。

-q

显示运行的容器编号。

-l

显示最近一次启动过的容器。

-n 数量

显示最近x次启动过的容器。

3.3.3 退出容器的方式

eixt

对于交互模式启动的容器,退出容器,并停止容器;对于后台运行的程序效果同ctrl+p+q。

ctrl+p+q

退出容器,但不停止容器。

3.3.4 启动/停止/重启/强制停止

  • docker start 容器名/ID
  • docker stop 容器名/ID 相当于关机
  • docker restart 容器名/ID
  • docker kill 容器名/ID 强制停止

3.3.5 docker rm

  • 删除容器,强制使用-f参数。
  • 删除多个容器,docker rm -f $(docker ps -qa)

3.3.6 docker logs [选项] 容器ID

-f

跟随最新的日志打印。

-t

加入时间戳,即打印出来的日志带时间戳信息。

--tail

显示最后的多少条日志信息。

3.3.7 docker top 容器ID

查看容器内部运行的进程。

3.3.8 docker inspect 容器ID

查看容器内部的细节,信息较多,可以用来查看容器的IP地址

3.3.9 进入正在运行的容器

docker exec -it 容器ID 命令

  • 使用docker exec -it 容器ID /bin/sh同docker attach。
  • 使用docker exec -t 容器ID ls -l /tmp 此方式不进入容器,直接返回命令在容器中的执行结果。

docker attach 容器ID

进入容器用shell交互,进入根目录。 此种方式退出容器时需要使用ctrl+p & ctrl+q退出,使用exit退出会导致容器直接停止。

3.3.10 拷贝docker中的文件到宿主机中

docker cp 容器ID:/temp /root/

将容器中的/temp路径拷贝到宿主机/root/路径下。

4. docker镜像

4.1 镜像的组成

可执行的独立软件包,包含代码、运行时、库、环境

  • UnionFs(联合文件系统),对文件系统的修改做为一次提交来一层层的叠加,一次溶蚀加载多个文件系统,从外边来看只有一个文件系统,联合加载把各层文件系统叠加起来,类似于类的继承。
  • 共用内核(bootfs),不同的操作系统由rootfs来决定,镜像只包含rootfs,最基本的命令、工具和程序库。
  • 镜像分层,易于共享资源(how?)

4.2 镜像的提交

docker commit

提交容器副本使其成为一个新的镜像。

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

5. Docker容器数据卷

5.1 什么是容器数据卷

类似于拷贝数据的U盘

  • 容器之间共享数据
  • 数据持久化

5.2 数据卷使用

docker run -it -v /宿主机绝对路径:/容器内路径 镜像名

  • 文件夹不存在时,自动创建。
  • 容器退出后,主机修改数据卷,待容器启动后自动同步。

docker run -it -v /宿主机绝对路径:/容器内路径:权限 镜像名

  • 权限可指定ro、rw、wo
  • 指容器中对此数据卷的操作权限。

使用Dockerfile添加数据卷

VOLUME ["卷1","卷2",...]

在Dockerfile文件中添加上这样一行,但是此方式,无法指定宿主机中的对应文件夹。使用docker inspect 来查看docker默认的系统文件夹。

容器之间数据共享

使用--volumes-from参数
docker run -it --name dc1 --volumes-from dc2 centos
  • 使用此方式的任何容器之间都可以共享数据。
  • 只有当所有使用数据卷的容器都关闭后,此数据卷的数据才会消失。
  • 是否只是在同一镜像产生的容器之间有作用???

6. Dockerfile

6.1 构建解析过程

  • 每条指令必须使用大写字母,后边至少跟一个参数。
  • 指令按照从上到下,顺序执行。
  • #代表注释
  • 每条指令都会创建一个新的镜像层,并对镜像层进行提交

6.2 关键字

  • FROM 基础镜像
  • MAINTAINER 镜像的维护者
  • RUN 容器构建时运行的命令
  • EXPOSE 对外暴露的端口
  • WORKDIR 镜像运行后,登录时进入的目录,也是Dockerfile中从此条目后使用命令指定相对目录时的主目录。
  • ENV 定义的环境变量可以直接在后续的Dockerfile命令中使用,用 $环境变量名 来调用,并且可以作容器中系统的环境变量使用。
  • ADD 宿主机拷贝到镜像中,自动解压。
  • COPY 宿主机拷贝到镜像中。
  • CMD 指定容器启动时运行的命令。有多个CMD,只有最后一个生效,可以被docker run时跟的CMD覆盖。
  • ENTRYPOINT 指定容器启动时运行的命令,但是不会被覆盖,命令将作为参数被追加到此关键字定义的命令后。
  • ONBUILD 被继承后触发此关键字后的命令。
例如
ONBUILD RUN echo tttt
  • .dockerignore 拷贝数据时,跳过此文件中写入的文件。

6.3 编译

docker build -t 生成镜像名称 源文件路径

dokcer history 镜像ID
可以查看镜像的编译过程

7. docker网络管理

7.1 网络模式

Nat

  • 默认的模式,可以通过宿主机访问到外网。
  • 优点 网络资源隔离 无需手动配置 可以访问外网
  • 缺点 外界无法知己访问容器IP 低性能 端口管理麻烦
dcoker run -it --name 名称 镜像 命令

Host

  • 共享主机的网络,主机和容器的网络一样
  • 优点 共享宿主机网络 网络性能无衰减 排查网络故障简单
  • 缺点 网络环境无法隔离 网络资源无法统计 端口不易管理,和宿主机的端口一样
docker run -it --name host1 --net=host 镜像 命令

other container

  • 多容器共享一个网络命名空间
  • 优点 与主机网络空间隔离 容器间共享网络空间 适合容器间网络通讯频繁
  • 缺点 ??两个网络的配置完全一模一样
容器A使用NAt模式
docker run -it --name hehe2 镜像 命令

容器B使用othercontainer模式
docker run -it --name hehe3 --net=container:hehe2 镜像 命令

none

  • 无任何网络配置,可自行配置
docker run -it --name hehe4 --net=none 镜像 命令

overlay

  • 跨主机通讯
  • 无需做端口管理
  • 无需担心IP冲突
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值