Docker

docker

二、安装Docker

较旧版本的Docker被称为docker或docker-engine。

使用脚本安装

Docker CE 软件仓库

Aliyun Docker CE镜像, 清华大学Docker CE 软件仓库

Ubuntu(使用 apt-get 进行安装)

Debian

 

CentOS (使用 yum 进行安装)

安装校验

三、容器

3.2 运行我们的第一个容器,会直接进入容器

3.3 查看容器列表

3.4 容器命名

3.5 重新启动已经停止的容器

3.6 附着到容器上

3.7 创建守护式容器

不会进入容器

3.8 容器内部都在干些什么

3.9 查看容器内的进程

3.10 在容器内部运行进程

3.11 停止守护式容器

3.12 自动重启容器

3.13 深入容器:查看更多信息

3.14 删除容器

需要先stop或kill

复制文件

四、镜像

Docker国内可用镜像源仓库地址

https://www.jb51.net/server/336073lax.htm

4.2 列出镜像

4.3 拉取镜像

4.4 查找镜像

4.5.1 创建账号

Docker Hub Mirror

4.5.2 用commit命令创建镜像

4.5.3 用Dockerfile构建镜像

4.5.8 查看镜像

4.5.9 公开网络端口

4.6 将镜像推送到仓库

docker_pull_image.sh

4.7 删除镜像

4.8 运行自己的Docker Registry

导入导出镜像

磁盘占用

TYPE 列出了 Docker 使用磁盘的 4 种类型:

类型说明
Images所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
Containers运行的容器占用的空间,表示每个容器的读写层的空间。
Local Volumes容器挂载本地数据卷的空间。
Build Cache镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。

磁盘清理

五、其他

centos7使用阿里云镜像源

数据卷

数据卷容器

如果容器之间需要共享一些持续更新的数据,最简单的方式就是是用户数据卷容器,数据卷容器就是一种普通容器,专门提供数据卷供其它容器挂载使用。

创建数据卷容器,就是一个普通容器,无需启动

创建db1和db2两个容器,并使用--volumes-from挂载DataVolumeTest容器中的数据卷 注意:使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态

docker run命令

容器时间同步

在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致,这就需要同步它们的时间,让容器时间跟宿主机时间保持一致。如下:

发现两者之间的时间相差了八个小时! 宿主机采用了CST时区,CST指(China Shanghai Time,东八区时间) 容器采用了UTC时区,UTC指(Coordinated Universal Time,标准时间)

统一两者的时区有下面几种方法 1)共享主机的localtime 创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的。

2)复制主机的localtime

3)创建dockerfile文件的时候,自定义该镜像的时间格式及时区。在dockerfile文件里添加下面内容:

保存后,利用docker build命令生成镜像使用即可,使用dockerfile创建的镜像的容器改变了容器的时区,这样不仅保证了容器时间与宿主机时间一致(假如宿主机也是CST),并且像上面使用tomcat作为父镜像的话,JVM的时区也是CST,这样tomcat的日志信息的时间也是和宿主机一致的,像上面那两种方式只是保证了宿主机时间与容器时间一致,JVM的时区并没有改变,tomcat日志的打印时间依旧是UTC。

Docker版本

长话短说:现在Docker改为基于YY.MM的版本(像Ubuntu),用户可以选择Stable(发布较慢)或者Edge(发布较快)版本。

tracker server ip can't be 127.0.0.1 也不能是localhost 方法: 指定 -h hostname docker run -h zt_server -it zt:v5

Dockerfile

COPY COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。 满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩。

COPY 目录

CMD 支持三种格式

ENTRYPOINT 两种格式:

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

示例appach ENTRYPOINT和CMD配合使用

docker 镜像版本

带有stretch、buster或jessie标签的镜像是不同Debian发行版的代号。 Debian 11 (bullseye) — 当前的稳定(stable)版 Debian 10(buster) — 当前的旧的稳定(oldstable)版 Debian 9(stretch) — 更旧的稳定(oldoldstable)版,现有长期支持 Debian 8(jessie) — 已存档版本,现有扩展长期支持 Debian 7(wheezy) — 被淘汰的稳定版 Debian 6.0(squeeze) — 被淘汰的稳定版 Debian GNU/Linux 5.0(lenny) — 被淘汰的稳定版 Debian GNU/Linux 4.0(etch) — 被淘汰的稳定版 Debian GNU/Linux 3.1(sarge) — 被淘汰的稳定版 Debian GNU/Linux 3.0(woody) — 被淘汰的稳定版 Debian GNU/Linux 2.2(potato) — 被淘汰的稳定版 Debian GNU/Linux 2.1(slink) — 被淘汰的稳定版 Debian GNU/Linux 2.0(hamm) — 被淘汰的稳定版

在撰写本文时,稳定的Debian发行版是10.4,它的代号是“buster”。 “stretch”是所有版本9变种的代号,“jessie”是所有版本8变种的代号。

正在开发的未来版本是“bullseye ”和“bookworm”,但还不稳定。你可能会在DockerHub上的镜像版本列表中看到这些标签。

如果您的代码与Debian操作系统的特定版本兼容,请选择其中一个镜像。在开始一个新项目时,你很少需要使用旧版本的Debian。

slim

slim的镜像是完整镜像的配对版本。这个镜像通常只安装运行特定工具所需的最小包。以python为例,就是运行python的最小包,node.js同理。

通过省去较少使用的工具,镜像会更小。如果有空间限制且不需要完整版本,请使用此镜像。

但是,在使用这个镜像时,一定要进行彻底的测试!如果您遇到无法解释的错误,请尝试切换到完整的镜像,看看是否能够解决问题。

alpine

alipine镜像基于alpine linux项目,这是一个专门为容器内部使用而构建的操作系统。在很长一段时间里,这些是最受欢迎的镜像变体,因为它们的尺寸很小。

然而,一些团队正在弃用alpine镜像,因为这些镜像可能会导致难以调试的兼容性问题。具体来说,如果使用python镜像,一些 wheels将被构建成与Debian兼容,并且需要重新编译,才能与基于apline的镜像一起工作。

使用alpine镜像的主要原因是使你得到的镜像尽可能小。基础镜像将小于5MB。python基础镜像(将python添加到基础alpine镜像)目前是78.9MB。这仍然很小。

如果考虑到空间问题,强烈推荐使用此镜像。

它的缺点是不包含一些你可能会需要的包。主要是,它使用了一个更小的musl lib代替glibc。如果您的应用程序有特定的libc需求,您可能会遇到问题。

如果你发现Alpine镜像缺少你需要的东西,你可以直接在Dockerfile中安装它,这样能确保镜像只包含你需要的内容。需要注意,如果您正在安装外部包,您的Dockerfile将会更改。主要的区别是,您将使用apk而不是apt-get来安装包。

对alpine镜像的使用有很多担心之处,所以你需要充分了解它。需要充分阅读文档并研究。 同样,如果您在构建Dockerfile时遇到了无法解释的问题,请尝试切换到完整的镜像,看看是否能解决问题。

windowsservercore

我很少使用windows,我现在坚定地站在Mac / Linux阵营,但如果你的应用程序只运行在windows或windows Server上,这就是为你准备的镜像。

综述 如何选择镜像

以下是我使用的通用准则:

关于版本的说明

不要在生产系统Dockerfile中使用<image>:latest。这样做将总是获取最新的镜像,并且应用程序的依赖项可能与未来的版本不兼容。

当开始一个新项目时,我通常会从最近标记的版本开始,进行彻底的测试,然后根据需要升级,在投入生产之前进行彻底的测试。