一、前言
容器是镜像的运行时的实例,相当于虚拟机模版启动VM一样,使用者也可以从单个镜像上启动一个或多个镜像
虚拟机和容器最大的区别是容器更快并且更轻量,本质上就是因为docker容器共享宿主机的内核或操作系统。
以上为使用一个docker镜像启动多个容器的示意图
二、容器常用命令
1、启动
docker container run <image> <app>
# 省略container也可
启动命令后接的参数说明
1.1 启动某个 centos7 容器,并运行 Bash Shell 作为其应用
docker container run -it centos7 /bin/bash
1.2 -it 参数
可以将当前终端连接到容器的 Shell 终端之上。
-t docker分配伪终端,并绑定到容器的标准输入上
-i 保持标准输入打开
1.3 -p 指定映射端口即容器暴露的端口
1.4 -d 指定容器在后台运行
1.5 --rm 容器退出时删除容器
1.6 --name 为启动的容器命名
1.7 -e 指定环境变量,容器中可以使用该环境变量
1.8 -v ,–volume 给容器挂载存储卷,挂载到容器的某个目录
1.9 -a 或者 --attach 登录容器(必须是以docker run -d启动的容器)
2.0 -w ,–workdir="": 指定容器的工作目录
2.1 -h, --hostname="", 指定容器的主机名
2.2 -u, --user="", 指定容器的用户
2.3 -c,–cpu-share=0, 设置容器cpu权重,在cpu共享场景使用
2.4 -m,–memory="",指定容器的内存上限
2.5 --dns-search=[]
, 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
2.6 --entrypoint=""
, 覆盖image的入口点
2.7 --expose=[]
, 指定容器暴露的端口,即修改镜像的暴露端口
2.8 --link=[]
, 指定容器间的关联,使用其他容器的IP、env等信息
2.9 --privileged=false
, 指定容器是否为特权容器,特权容器拥有所有的capabilities
3.0 --restart="no"
, 指定容器停止后的重启策略
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
3.1 --sig-proxy=true
, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
2、退出容器
2.1、按Ctrl-pq不停止容器而退出当前容器
2.2、按Ctrl-d 直接退出容器,如果启动时没有指定-d,则容器直接停止
3、停止容器
3.1优雅退出
docker container stop <container_name/id>
再删除容器
docker container rm
3.2粗暴退出并删除
docker container rm <container> -f
4、查看容器运行情况
4.1、docker container ls
使用 docker container ls
命令可以查看当前运行的容器以及端口的映射情况。端口信息按照 host-port:container-port 的格式显示,明确这一点很重要。
4.2 查看正在运行的容器
docker ps
4.3 查看运行容器时使用的镜像以及其他详情
docker image inspect <image>
示例:
$ docker image inspect nigelpoulton/pluralsight-docker-ci
[
{
"Id": "sha256:07e574331ce3768f30305519...49214bf3020ee69bba1",
"RepoTags": [
"nigelpoulton/pluralsight-docker-ci:latest"
<Snip>
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) CMD [\"/bin/sh\" \"-c\" \"cd /src \u0026\u0026 node \
.app.js\"]"
],
<Snip>
为了方便阅读,仅截取输出内容中我们感兴趣的部分。
Cmd 一项中展示了容器将会执行的命令或应用,除非在启动的时候读者指定另外的应用。如果去掉示例脚本中的转义字符,可以得到这样的命令:/bin/sh -c "cd /src && node ./app.js。这是基于该镜像的容器会默认运行的应用。
在构建镜像时指定默认命令是一种很普遍的做法,因为这样可以简化容器的启动。
这也为镜像指定了默认的行为,并且从侧面阐述了镜像的用途——可以通过 Inspect 镜像的方式来了解所要运行的应用。
5、docker exec 在运行状态的容器中,启动一个新进程
#命令会在容器内部启动一个 Bash Shell 进程,并连接到该 Shell。
docker container exec -it <container-name or container-id> bash
6、重启容器docker container start
重启处于停止(Exited)状态的容器。可以在 docker container start 命令中指定容器的名称或者 ID。
7、 docker container inspect
显示容器的配置细节和运行时信息。该命令接收容器名称和容器 ID 作为主要参数
8、清除所有的已经停止的容器
docker container prune
参考文章:
http://c.biancheng.net/view/3150.html
三、单体应用容器化步骤(简述)
1、获取应用代码
2、分析Dockerfile
3、构建应用镜像
4、运行该应用
5、测试应用
6、容器应用化细节
7、生产环境中的多阶段构建
8、最佳实践
详细请参考以下文章:
http://c.biancheng.net/view/3159.html