1.Docker简述
Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2.Docker生命周期

一句话简述生命周期
Docker镜像拉取pull一个image并创建在本地,通过creat在服务器上创建容器,通过start命令启动已创建的容器,随后根据需求,使用pause/unpause/stop控制容器的启停/暂停。
3.Docker安装
官网下载方式
脚本安装方式
官方脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
国内镜像
curl -sSL https://get.daocloud.io/docker | sh
4.安装完成
启动docker
sudo systemctl start docker
设置开机启动
sudo systemctl enable docker
测试docker是否安装完成
docker run hello-world
从中央仓中拉取名为hello-world的容器
结果

出现此信息,Docker已正确安装,后面通过docker ps -a可以查到部署过的hello-world容器
5.配置开机docker容器开机自启
1.docker的update命令
[root@iZbp1e9mxelwe7pwimpw8sZ ~]# docker update --help Usage: docker update [OPTIONS] CONTAINER [CONTAINER...] Update configuration of one or more containers Options: --blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period --cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota --cpu-rt-period int Limit the CPU real-time period in microseconds --cpu-rt-runtime int Limit the CPU real-time runtime in microseconds -c, --cpu-shares int CPU shares (relative weight) --cpus decimal Number of CPUs --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) --kernel-memory bytes Kernel memory limit -m, --memory bytes Memory limit --memory-reservation bytes Memory soft limit --memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap --pids-limit int Tune container pids limit (set -1 for unlimited) --restart string Restart policy to apply when a container exits
[root@iZbp1e9mxelwe7pwimpw8sZ ~]
#
翻译结果
选项: --blkio-weight uint16块IO(相对权重),介于10到1000之间,或者禁用0(默认为0) --cpu-period int限制CPU CFS(完全公平的调度程序)期限 --cpu-quota int限制CPU CFS(完全公平的调度程序)配额 --cpu-rt-period int限制CPU实时时间(以微秒为单位) --cpu-rt-runtime int以毫秒为单位限制CPU实时运行时间 -c,--cpu-shares int CPU份额(相对权重) --cpus十进制CPU数 --cpuset-cpus允许执行的字符串CPU(0-3,0,1) --cpuset-mems允许执行的字符串MEM(0-3,0,1) --kernel-memory字节内核内存限制 -m,--memory bytes内存限制 --memory-reservation字节内存软限制 --memory-swap字节交换限制等于内存加交换:'-1'以启用无限交换 --pids-limit int调整容器的pids限制(设置-1为无限制) --restart字符串容器退出时要应用的重新启动策略
2.–restart参数解释
参数名 | 解释 |
no | 不自动重启容器. (默认值) |
on-failure | 容器发生error而退出(容器退出状态不为0)重启容器,可以指定重启的最大次数,如:on-failure:3 |
unless-stopped | 在容器已经stop掉或Docker stoped/restarted的时候才重启容器 |
always | 在容器已经stop掉或Docker stoped/restarted的时候才重启容器,手动stop的不算 |
3.设置开机自启动(以容器名为tomcat8的容器为例)
docker update --restart=always tomcat8
4.测试结果
关闭所有容器
[root@iZbp1e9mxelwe7pwimpw8sZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZbp1e9mxelwe7pwimpw8sZ ~]
#
重启开机后的结果:容器已经自启动
[root@iZbp1e9mxelwe7pwimpw8sZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b397fad059a2 tomcat:8 "/usr/local/tomcat8/…" 5 weeks ago Up 8 seconds 0.0.0.0:80->8080/tcp tomcat8
[root@iZbp1e9mxelwe7pwimpw8sZ ~]
#
6.Docker常用命令
1.通过Dockerfile构建镜像容器
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
首先,编写一份Dockerfile文件(Dockerfile文件语法编写待续,可直接学习这里的)
编写完,运行Dockerfile创建需要拉取的镜像并配置容器中安装的软件、部署的项目。
bulid命令
下面以部署一个nginx进容器为例
该命令需在Dockerfile文件的存放目录下运行
通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。
注:最后的.
代表本次执行的上下文路径。
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
docker build -t nginx:v3 .
然后通过run命令,将镜像运行
run命令
命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
可当create和start命令使用
1、不传参运行
$ docker run nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
2、传参运行
$ docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf
2.容器增删查、状态pull、create、start、pause、unpause、stop、run、restart
docker容器的生命周期
docker pull [OPTIONS] NAME[:TAG|@DIGEST] 从远程docker hub中提取图像并将其保存在本地计算机中。此命令与Git pull命令的作用相同。 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 此命令按指定的图像创建新的Docker容器。 docker start [OPTIONS] CONTAINER [CONTAINER...] 此命令用于将已退出或新创建的容器启动到运行状态。 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 此命令创建一个新容器,并在新创建的容器中运行该映像。“docker create”和“docker start”命令都可以通过此单个命令执行。 docker stop [OPTIONS] CONTAINER [CONTAINER...] 此命令将停止正在运行的容器。这会将容器状态从运行更改为激动。 docker pause CONTAINER [CONTAINER...] 此命令通过发出SIGSTOP命令来暂停正在运行的容器中的正在运行的进程。 docker unpause CONTAINER [CONTAINER...] 此命令将暂停进程返回到运行状态。
查看
docker ps #查看正在运行的容器 docker ps -a #查看所有容器 docker images #查看所有镜像
查看容器状态
docker stats 容器名/容器id
删除容器、镜像
docker rm 容器名/容器id #删除容器 docker rmi 镜像id #删除镜像
3.进入容器exec、attach
进入容器的命令有两种:
docker exec: 在已运行的容器中,执行命令,操作对象是容器,如果你要进入已运行的容器,并且执行命令,用exec。
docker attach: 同样操作的是已运行的容器,可以将本机标准输入(键盘输入)输到容器中,也可以将容器的输出显示在本机的屏幕上,如果你想查看容器运行过程中产生的标准输入输出,用attach。
一般情况,我们使用的是:
exec
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] OPTIONS说明: -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端 CONTAINER:容器名称或ID,必选,看出exec操作的对象是容器 COMMAND:命令,必选(一般填写bash)
例子
$ docker exec -i -t mynginx /bin/bash
attach
docker attach [OPTIONS] CONTAINER CONTAINER:容器名称或ID,必选,attach的操作对象也是容器
例子
docker attach mynginx
退出快捷键,使用该方法可以避免退出容器时同时停止容器
Ctrl+P+Q
进入容器时卡停
- 只用-i时,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取。
- 如果只使用-t参数,则可以看到一个console窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况。
- 在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。
- 使用-it时,则和我们平常操作console界面类似。而且也不会像attach方式因为退出,导致整个容器退出。
docker exec -it +容器ID /bin/bash
详细exec解析看这里
4.查看容器日志
docker logs 容器名/容器id
持续查看容器日志(使用场景:容器启动失败排查)
docker logs -f 容器名/容器id
5.查看容器状态
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
docker top 容器名称/id