同步操作将从 编程界的小学生/java-legendary 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
[TOC]
author:编程界的小学生
date:2021/02/11
是个容器化平台,他以容器的形式将应用程序和他相关的依赖都打包在一起,以确保您的应用程序在任何环境中无缝运行。
他将我们开发的应用程序打成个镜像,不管是DEV还是QA还是线上,拿走镜像直接运行即可,不会再出现因为环境不一致导致程序有问题的情况,减少了扯皮的时间。
部署简单方便。
方便我们统一管理应用程序以及方便OP动态伸缩。
运行、已暂停、重新启动、已退出。
采取docker ps -a
查看容器的状态。
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问,DockerServer接收到Docker Client的指令就会执行对应的命令(比如docker run
等)。
docker之间互相隔离。
Docker镜像是Docker容器的源代码。用于创建容器。
使用build命令创建镜像,并且在使用run启动时它们将生成容器。镜像存储在Docker仓库中。
重要的是,每个层只是与之前一层的一组差异层,也就是相同的层就不再重新pull了,节省了空间。
Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,在主机操作系统的用户空间中作为独立进程运行。Docker容器是Docker镜像的实例。
docker pull :拉取或者更新指定镜像
docker push :将镜像推送至远程仓库
docker rm :删除容器
docker rmi :删除镜像
docker images:列出所有镜像
docker ps:列出正在运行的所有容器
docker ps -a: 列出所有容器
docker run:启动容器
重点考察的是$符号,相当于for循环遍历。
docker kill $(docker ps -q)
docker如何清理批量后台停止的容器?
docker rm $(docker ps -a -q )
1)FROM:构建镜像基于哪个镜像;
2)MAINTAINER:镜像维护者姓名或邮箱地址;
3)RUN:构建镜像时运行的shell指令;
4)CMD:运行容器时执行的shell环境;
5)EXPOSE:声明容器的服务端口(仅仅是声明);
6)ENV:设置容器环境变量;
7)ADD:拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压;
8)COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能;
9)ENTRYPOINT:运行容器时执行的shell命令;
10)VOLUME:指定容器挂载点到宿主机自动生成的目录或其他容器;
11)USER:为RUN、CMD、和ENTRYPOINT执行命令指定运行用户;
12)WORKDIR:为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录,意思为切换目录;
13)HEALTHCHECH:健康检查;
14)ARG:构建时指定的一些参数;
15)LABEL:我们使用LABEL按照项目,模块,许可等组织我们的镜像。我们也可以使用LABEL来帮助实现自动化。在LABEL中,我们指定一个键值对,以后可用于以编程方式处理Dockerfile;
两个都是运行容器时执行的shell命令的功能。
区别:
CMD此命令会在容器启动且 docker run 没有指定其他命令时运行。
比如:
CMD ["ls" "-a"]
,docker run
的时候就会执行ls -a命令,但是docker run后面接一个其他命令参数的话就会覆盖掉CMD中的命令,比如:docker run -l
,这时候就会报错没有-l命令,并不会拼接到ls -a
后面变成docker run ls -al
。
ENTRYPOINT 的 Exec 格式用于设置容器启动时要执行的命令及其参数,同时可通过CMD命令或者命令行参数提供额外的参数。ENTRYPOINT 中的参数始终会被使用。
比如:
ENTRYPOINT ["/bin/echo", "Hello"]
当容器通过
docker run -it [image]
启动时,输出为:Hello
而如果通过
docker run -it [image] xxx
启动,则输出为:Hello xxx
将Dockerfile修改为:
ENTRYPOINT ["/bin/echo", "Hello"] CMD ["world"]当容器通过
docker run -it [image]
启动时,输出为:Hello world
而如果通过
docker run -it [image] xxx
启动,输出依旧为:Hello xxx
也就是说:ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。
docker login -u username
,然后回车会让输入密码。docker push 镜像名称:TAG
docker run -v 宿主机路径:容器内挂载路径 镜像名
VOLUME
指定了当前容器中要备份的文件路径:ro :rw参数:
:ro 只有宿主机能操作,容器内部是只读的
:rw 宿主机和容器都读写权限
让多个容器之间挂载到同一个容器的目录下。命令:
# 创建共享容器语法,只是创建不是启动。最后的/bin/true 就是一个占位符,没啥乱用。
docker create --name 共享容器名称 -v 宿主机路径:容器内挂载路径 镜像名称 /bin/true
# 启动容器的时候通过--volumes-from 共享容器名称来使用共享容器挂载点
docker run --volumes-from 共享容器名称 --name xxx -d 镜像名称
比如容器A挂载xxx目录到宿主机/home/work下了,然后容器B和容器C挂载到了容器A的xxx上,这时候A、B、C三个容器共享同一份挂载目录,修改其中一个,其他两个会同步修改,停掉容器且删除容器后数据也不会丢失!因为他在宿主机上有备份。
如果容器太多,每一次都要写-v xxx:xxx
,过于复杂,也容易出错,这时候可以通过docker create
创建共享容器,然后启动的时候通过--volumes-from
指定创建的共享容器名称即可,也就是说可以把上面-v xxx:xxx
这一串统一放到一个地方去管理,容器启动的时候直接引用这个统一配置即可,方便统一管理。
主要命令:
# 创建自定义网络叫mynet docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet # 将容器加入到自定义网络中。 docker run -d -P --name tomcat-mynet-01 --net mynet tomcat # 不同网络之间的容器互相访问采取如下命令将其加入到同网络 docker network connect
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
Docker Swarm是Docker的本机群集,它将Docker主机池转变为单个虚拟Docker主机。Docker Swarm提供标准的Docker API,任何已经与Docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主机。
看下面四篇就够了,从0基础一步一截图的方式到玩转Docker!
三、这篇Docker的网络通信与数据共享文章看不懂你来打我吧
为什么没有Docker Swarm的学习文档?
哎,没那么多服务器搭建呀,我都是一步一截图的实战方式,现在条件不足,不想写一堆纯理论没实践的文章,等我资源丰富的时候别说Docker Swarm,K8S我也给它拿下!
Docker命令大全
官方网站:https://docs.docker.com/reference/
我认为最好的Docker命令整理:https://www.cnblogs.com/toutou/p/docker_command.html
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。