1.docker常用的命令
docker ps
docker info
docker run hello world
docker images
docker version
docker --version
docker system info
2.docker引擎升级(以Ubuntu为例)
2.1停止docker守护程序
2.2移除旧版本的docker
apt-get update
apt-get remove docker docker-engine docker-ce docker.io -y
2.3安装新版本的docker
wget -qO- https://get.docker.com/ | sh
2.4配置新版的docker为开机自启动
systemctl enable docker
2.5确保容器重启成功
docker container ls
docker service ls
3.docker储存驱动的选择
在linux上可选择的储存驱动包括AUFS(最原始也是最老的)、Overlay2(可能是未来最佳选择)、DeviceMapper、Btrfs、ZFS
修改/etc/docker/daemon.json
{
"storage-driver": "overlay2"
}
通过docker system info来检查docker当前的储存驱动类型
4.镜像&容器
查看所有的镜像
docker image ls
从镜像来启动容器
docker container run
从linux中启动容器
docker container run -it ubuntu:latest /bin/bash
从Windows中启动容器
docker container run -it microsoft/powershell:nanoserver pwsh.exe
(-it 参数会将shell切换到容器的终端)
5.
docker container run 和docker service create可以从某个镜像启动一个或者多个容器
docker image pull ubuntu:latest 拉取一个最新的ubuntu镜像
docker image pull
示例
docker image pull mongo:3.3.11
如果希望从第三方奖项库安装,则需要在第三方镜像仓库前面加上第三方镜像仓库服务的DNS名称
示例
docker image pull gcr.io/nigelpoulton/tu-demo:v2
6.
docker image ls --filter dangling=true
返回悬虚镜像,就是没有标签的镜像。
docker image prune 移除所有的悬虚镜像。
7.docker镜像搜索
docker search nigelpoulton 该命令会搜索所有NAME字段中包含特定字符串的仓库。这里命令返回既有官方的,也有非官方的。
可以通过使用 --filter "is-official=true" 只显示官方的镜像
docker search nigelpoulton --filter "is-official=true"
注意,search默认只显示25条数据,可以通过 --limit参数来增加 返回的行数
8查看镜像分层
docker image inspect ubuntu:latest
每一个镜像都有一个digest的,可以通过 --digests参数来查看本地的镜像
docker image ls --digests alpine
也可以通过digest来pull镜像
docker image pull alpine@sha256:c0xxxx...xxx
9.删除镜像
docker image rm
docker image rm $(docker image ls -q) -f 删除所有的镜像
10.容器
运行容器 docker container run
示例
docker container run -it ubuntu /bin/bash (-it参数可以将当前终端连接到容器的shell终端之上)
docker container start 启动该容器
docker container stop 手动停止该容器
docker container rm 删除容器
11.应用的容器化
(1)编写应用代码
(2)创建一个Dockerfile,其中包含对当前应用的描述,依赖以及该如何运行这个应用
(3)对该Dockerfile执行docker image build命令
(4)等待Docker将应用程序构建到Docker镜像中
分析Dockerfile文件
FROM xxx 表示以xxx镜像作为当前镜像的基础
LABEL maintainer="[email protected]" 表示规定当前镜像的维护者为[email protected]
RUN apk add --update nodejs nodejs-npm 表示使用基础镜像的apk包管理器将nodejs和nodejs-npm安装到当前镜像下。RUN指令表示会在基础镜像之上,新建一个镜像层来储存这些安装内容
COPY public/ data/public 表示将应用的public复制到当前镜像中,并且新建一层来储存data/public。
RUN npm install 会根据package.json中的配置信息来安装相关的依赖包,会新建一层镜像层。
EXPOSE 8080 来设置TCP对外的提供服务的端口,不会产生新的镜像层。
ENTRYPOINT ["node", "./app.js"] 指令来设置当前镜像的入口程序。
docker image build -t web:latest . << 不要忘记最后有个.表示Docker在进行构建时,使用当前目录作为构建上下文
可以通过docker image inspect web:latest来确认刚刚构建的镜像配置是否正确
推送镜像到远端仓库
推送需要提供Register(镜像仓库服务)Repository(镜像仓库)Tag(镜像标签),无需对Register和tag指定值,因为会有默认值。
docker打标签命令 docker image tag
示例: docker image tag web:latest will/web:latest
推送代码示例 docker image push will/web:latest(把will 替换成自己的Docker ID)
运行容器
docker container run -d --name c1 -p 80:8080 web:latest
-d参数的作用是让应用程序以守护线程的方式在后台运行
-p 80:8080的作用是让主机的80与容器的8080端口进行映射
12 查看构建镜像的过程中执行了哪些指令
可以通过 docker image history web:latest
看到SIZE不为0的都是新建镜像层。
也可以通过docker image inspect web:latest来查看
13 生产环境的多阶段构建。
对于生产环境的镜像而言,将其缩小到仅包含运行应用说必须的内容即可。
每一个RUN都会新增一个镜像层,通过使用&&连接多个命令以及使用\换行的方法,将多个命令包含在一个RUN指令中,这是一个值得提倡的方式。
在一个Dockerfile中引入多个FROM构建多个环境的镜像
在构建linux镜像时,若使用apt包管理器,则可以在执行apt-get install命令增加 no-install-recommends参数,这样能确保apt 仅安装核心的依赖,而不是推荐和建议的包,能显著减少不必要包的下载数量。