docker入门教程
docker是什么?
Docker是一个开放源代码的开放平台软件,用于开发应用、交付(shipping)应用和运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、更能高效地利用服务器。 容器更多的用于表示软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。
官方文档
apt更新
安装
测试
添加当前用户
images和container关系
将images视为模具,则container是images生产后再加工的产物
常用命令
疑问解惑(生成式AI)
docker的镜像一般都是系统的不同版本吗?
不完全是。Docker镜像可以包含不同类型的映像,包括操作系统映像、应用程序映像以及其他组件的映像。
操作系统映像是包含完整操作系统环境的镜像。这些映像通常基于特定操作系统的不同版本,例如Ubuntu、CentOS、Debian等。操作系统映像为容器提供了必要的操作系统组件和库,使其能够在容器内运行。
应用程序映像是包含特定应用程序和其依赖的镜像。这些映像通常基于特定版本的编程语言或应用程序框架,例如Node.js、Python、Ruby等。应用程序映像使得可以在不同环境中轻松部署和运行特定的应用程序。
此外,还有其他类型的映像,例如数据库映像、Web服务器映像等,用于特定的用途和场景。
总而言之,Docker镜像可以是包含不同版本的操作系统映像,也可以是包含特定应用程序或组件的映像。根据需要,可以选择适合的镜像来构建和部署容器。
容器不能访问原本系统中的mysql?需要在容器中重新安装?
在默认情况下,Docker容器是与宿主系统隔离的,容器内部无法直接访问宿主系统上的服务或资源,包括宿主系统中运行的MySQL数据库
容器的端口号一定要有映射这一步?不映射的话永远的访问不到?
是的,如果你希望从宿主系统或其他网络中访问容器内的应用程序,通常需要进行端口映射。
Docker容器内的应用程序运行在容器的网络命名空间中,与宿主系统和其他容器隔离。默认情况下,容器内的应用程序无法直接通过宿主系统的IP地址或其他网络地址访问。
通过端口映射,你可以将容器内的端口映射到宿主系统上的一个端口,从而使得容器内的应用程序可以通过宿主系统的IP地址和映射的端口进行访问。这样,宿主系统和其他网络中的客户端可以通过宿主系统的IP地址和映射的端口与容器内的应用程序进行通信。
如果你不进行端口映射,容器内的应用程序仍然可以在容器内部相互通信,但无法直接通过外部网络访问。这意味着你无法从宿主系统或其他网络中访问容器内的应用程序。
因此,如果你希望从外部网络中访问容器内的应用程序,你需要进行端口映射。这样,你可以通过宿主系统的IP地址和映射的端口来访问容器内的应用程序。
如何对端口进行映射
要对端口进行映射,你可以在运行 Docker 容器时使用 -p 或 --publish 参数。这个参数的语法是 host-port:container-port,其中
例如 建议上网搜
docker run -d --name my-container -p 8888:8080 -p 9999:9090 my-image:tag
目前踩到的坑
- docker可以使模块化,更易于各个技术栈的伸缩,我一开始直接新建ubuntu,然后将前后端数据库扔进去,实际上和直接部署没有什么区别。
- docker在建立容器时就要设置端口(建立后也可以,但复杂)。一定程度上也呼应了模块化的思想,即我知道这个容器是干什么的,而不是走一步看一步。