- 1. 更换dokcer软件源
- 2. docker运行的底层原理
- 3. 常用docker命令集
- 4. docker镜像
- 5. Docker容器数据卷
- 6. Dockerfile
- 7. 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冲突