概念
docker
- docker是一种运行于linux和windows上的软件,用于创建、管理和编排容器。
- docker包含客户端与服务器,通过
docker version
可以看到。服务器称为docker引擎。
镜像
- docker镜像是一个包含了基础的操作系统和应用的对象。
- 镜像等价于未运行的容器
- 镜像由多个层组成,每层叠加后,从外部看来就如一个独立的对象。
容器
- 容器比虚拟器更快并且性能更高 – 虚拟机运行在完整的操作系统上,而容器会共享其所在主机的操作系统 / 内核。
- 镜像运行起来就是容器。
镜像
拉取镜像
docker image pull <repository>:<tag>
默认从官方仓库Docker Hub中进行拉取。
查看镜像
docker image ls
- tag:镜像标签。没有标签的镜像称为悬虚镜像。latest并不能保证该镜像是最新的。一个镜像只会有一个tag。
- image Id:两个镜像会存在相同的image Id。
查看全部镜像id:docker image ls -q
查看镜像的细节:docker image inspect <repository>:<tag>
...
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:6cebf3abed5fac58d2e792ce8461454e92c245d5312c42118f02e231a73b317f",
"sha256:f7eae43028b334123c3a1d778f7bdf9783bbe651c8b15371df0120fd13ec35c5",
"sha256:7beb13bce073c21c9ee608acb13c7e851845245dc76ce81b418fdf580c45076b",
"sha256:122be11ab4a29e554786b4a1ec4764dd55656b59d6228a0a3de78eaf5c1f226c"
]
},
镜像摘要
镜像摘要是基于镜像内容的密码散列值,可以唯一标识一个镜像。
查看摘要:docker image ls --digest
通过摘要拉取镜像:docker image pull <repository>@<摘要值>
删除镜像
删除单个镜像:docker image rm <镜像名称>
,镜像名称就是镜像列表的第一列值。
删除全部镜像:docker image rm $(docker image ls -q)
-f
容器
查看容器
基本命令:docker contatiner ls
查看全部容器(包括停止的容器):docker contatiner ls -a
运行容器
docker container run <options> <image>:<tag> <app>
例如运行ubuntu镜像,并启动bash shell应用,-it
表示将当前终端连接到容器的shell终端。
运行容器并起名为zed:docker container run --name zed -it ubuntu /bin/bash
hungry_为默认名字
暂停容器
通过name暂停:docker container stop zed
重启容器
通过name重启:docker container start zed
退出容器
exit
退出,这种方式相当于结束bash,由于bash是容器中唯一进程,容器中没有进程运行时,容器会停止。ctrl + pq
容器会在后台运行
重新连接到容器
删除容器
先停止容器再删除容器
容器的重启策略
重启策略是容器的自我修复能力,可以在指定的事件或者错误后重启来完整自我修复。
应用的容器化
docker的核心思想:将应用整合到容器中,并在容器中运行。
步骤:
- 编写应用程序代码
- 创建Dockerfile
- 构建镜像
- 启动
以springboot为例子
- jar和Dockerfile
Dockerfile内容:
FROM openjdk:8
MAINTAINER YOU JIA
COPY ./hello-docker-0.0.1-SNAPSHOT.jar hellodocker.jar
CMD java -jar hellodocker.jar
- 构建
docker build -t myapp .
这时myapp的镜像会存在docker镜像中
- 启动docker run --name mywebapp -p 8080:8080 -d myapp
-p是将系统的8080端口映射到容器的8080端口 - 访问