1- 什么是Docker?
什么是Docker?
Docker是一种流行的开源容器化平台,由一群技术专家在2014年共同开发。它的出现解决了传统虚拟机技术中存在的一些问题,例如复杂的操作和较高的运行成本。
Docker的主要特点是使用容器来打包应用程序及其依赖项,并且在不同的环境中都能够保持一致的状态。相比传统虚拟机,Docker的容器更加轻量级、高效,启动和停止速度更快,并且能够在更少的资源下运行。
此外,Docker的容器内部和外部环境隔离,能够有效避免应用程序之间的冲突和影响。这也为应用程序的开发、测试和部署提供了更高的可移植性和可靠性。
Docker还拥有一个庞大的社区,提供了大量的Docker镜像和插件,可以方便地在不同的环境中使用。此外,Docker还提供了完善的生态系统,包括Docker Hub、Docker Compose和Docker Swarm等工具,使得开发人员和运维人员能够更加高效地使用和管理Docker容器。
总的来说,Docker的出现为应用程序的开发、测试和部署提供了更高的可移植性和可靠性,同时也提高了开发人员和运维人员的工作效率。因此,Docker已经成为了当今最流行的容器化平台之一。
Docker的主要特点
-
容器化:Docker使用容器来打包应用程序及其依赖项,可以快速创建和部署相同的环境,而无需关心底层系统和环境的差异。
-
轻量级:Docker容器相对于传统的虚拟机来说,更轻量级、更高效,可以快速启动和停止,减少了系统资源的浪费。
-
隔离性:Docker容器内的应用程序可以与外部环境隔离,从而避免了应用程序之间的冲突和影响。
-
易于部署:Docker容器可以在任何地方运行,只需要有相应的环境即可,从而实现了快速部署和快速扩展。
-
社区支持:Docker拥有庞大的社区支持,有很多优秀的Docker镜像和插件可供使用。
2- Docker 组件
客户端
Docker 客户端是指使用 Docker 命令行工具或图形化界面工具来管理 Docker 容器的工具。通过 Docker 客户端,用户可以创建、运行、停止、删除和检查 Docker 容器的状态等操作。Docker 客户端支持 Windows、Mac 和 Linux 等多个操作系统,用户可以根据自己的操作系统选择相应的客户端。
服务器
Docker 服务器是指用于运行 Docker 容器的主机系统。在 Docker 服务器上,用户可以运行 Docker 命令行工具来管理容器,或者使用 Docker Desktop 等图形化界面工具来管理容器。Docker 服务器需要一定的计算资源和网络带宽来支持 Docker 容器的运行。
镜像
Docker的基础是Docker镜像。镜像是一种可重复使用的软件包,它将应用程序及其所有依赖项打包在内,从而提供快速启动的应用程序。Docker的优点在于其轻量级和高度可重复使用的特性,这使得Docker镜像成为构建、共享和部署应用程序的理想选择。
Registry
Registry是Docker容器仓库的管理和存储系统。它允许开发人员将Docker镜像存储在中央存储库中,并在需要时将其提供给其他人或团队。它是Docker生态系统中的重要组成部分,因为它允许Docker镜像的管理、备份、分发和存储。使用Docker Registry,您可以轻松地将Docker镜像从本地存储库或其他服务器上传到中央存储库中,并允许其他人或团队下载和使用这些镜像。Docker Registry还支持各种身份验证和授权选项,以确保安全和保护Docker镜像。
容器
Docker容器具有独立于宿主机的隔离性,使得不同的应用程序可以在同一台服务器上运行,而不会相互干扰。
Docker容器可以运行在各种操作系统上,包括Windows、Linux、macOS等。它们可以轻松地在云环境中部署,也可以在本地环境中使用。
以上就是Docker组件的五个主要组成部分:客户端、服务器、镜像、Registry和容器。这些组件协同工作,为开发人员提供了一个可靠的容器化平台,可以轻松地构建、运行、部署和管理应用程序。
其中,客户端是Docker最重要的组件之一,它允许用户通过命令行或图形化界面工具来管理Docker容器。Docker客户端提供了一个简单、直观的用户界面,使得用户可以方便地创建、运行、停止、删除和检查Docker容器的状态等操作。Docker客户端支持多种操作系统,包括Windows、Mac和Linux等,因此用户可以根据自己的需求选择最适合自己的客户端。
另外,Docker服务器是Docker容器的运行环境,它允许用户在主机系统上运行Docker命令行工具或使用图形化界面工具来管理容器。Docker服务器需要一定的计算资源和网络带宽来支持Docker容器的运行,因此用户需要在选择Docker服务器时考虑自己的需求和资源情况。
Docker镜像是Docker的基础,它是一种可重复使用的软件包,包括应用程序及其所有依赖项。Docker镜像的优点在于其轻量级和高度可重复使用的特性,这使得Docker镜像成为构建、共享和部署应用程序的理想选择。Docker Registry是Docker容器仓库的管理和存储系统,它允许开发人员将Docker镜像存储在中央存储库中,并在需要时将其提供给其他人或团队。使用Docker Registry,用户可以轻松地将Docker镜像从本地存储库或其他服务器上传到中央存储库中,并允许其他人或团队下载和使用这些镜像。
Docker容器是一种独立于宿主机的隔离性环境,它可以运行在各种操作系统上,包括Windows、Linux、macOS等。Docker容器具有许多有用的功能,例如隔离性、自动化和快速启动等,使得用户可以轻松地构建、运行、部署和管理应用程序。
3- Docker 的用途
用途
Docker 是一个快速增长的开源容器化平台,它已经成为开发者和运维人员构建、发布和部署应用程序的首选工具之一。Docker 提供了许多有用的功能和优点,这些功能和优点使得它成为了一个受欢迎的工具。
首先,Docker 容器的轻量级和高效性是其最大的优点之一。相比于传统的虚拟机,Docker 容器的启动和停止时间更短,占用的资源更少,因此可以提高应用程序的响应速度和效率。Docker 容器还可以实现快速启动和快速扩展,从而提高应用程序的可伸缩性和可靠性。
其次,Docker 容器的隔离性也是其优点之一。Docker 容器内的应用程序可以与外部环境隔离,从而避免了应用程序之间的冲突和影响。这也使得Docker容器可以更加安全地运行,因为应用程序不会直接与操作系统或其他应用程序发生交互。
其他的功能和优点
此外,Docker 还提供了许多其他的功能和优点,例如:
-
方便的打包和部署:Docker 可以将应用程序及其依赖项打包成一个可移植的容器,使得应用程序可以轻松地部署到任何支持 Docker 的环境中。通过 Dockerfile 的编写和构建,开发人员可以轻松地将应用程序打包成一个稳定、可靠的交付包。
-
支持多种操作系统:Docker 容器可以在多种操作系统上运行,包括Windows、Linux、macOS等。这使得开发人员可以在不同的操作系统上开发、测试和部署应用程序,从而提高了应用程序的可移植性和可扩展性。
-
高度的可重复使用性:Docker 镜像是一种可重复使用的软件包,它将应用程序及其所有依赖项打包在内,从而提供快速启动的应用程序。Docker 的优点在于其轻量级和高度可重复使用的特性,这使得Docker镜像成为构建、共享和部署应用程序的理想选择。
-
安全性:Docker 容器的隔离性可以帮助应用程序更加安全地运行,因为应用程序不会直接与操作系统或其他应用程序发生交互。此外,Docker 还提供了许多身份验证和授权选项,以确保安全和保护Docker镜像。
-
开放源代码:Docker 是一个开源项目,它提供了丰富的文档和社区支持。这使得开发人员可以更轻松地学习和使用Docker,同时也为Docker的发展提供了源源不断的动力。
总之,Docker 容器化的方式已经成为开发者和运维人员构建、发布和部署应用程序的首选工具之一。Docker 的轻量级、高效性、隔离性、可重复使用性和安全性等优点,使得它成为一个受欢迎的工具。随着Docker技术的不断发展和完善,它将继续成为开发者和运维人员的得力助手,帮助他们构建更加稳定、可靠、高效和安全的应用程序。
4- 资料站
以下是10个 Docker 资源网站,并附有它们的域名:
1. Docker Hub (https://hub.docker.com)
这是 Docker 官方的持续交付和部署平台,用户可以在上面托管和分享 Docker 镜像。
2. Docker Compose (https://docs.docker.com/compose/)
这是一个基于 Docker 的容器编排工具,可以帮助用户轻松地创建和运行多个 Docker 容器的应用程序。
3. Docker Swarm (https://docs.docker.com/swarm/)
这是一个微服务容器编排平台,可以帮助用户在集群中部署和管理多个 Docker 容器。
4. Dockerfile.io (https://www.dockerfile.io/)
这是一个 Dockerfile 指南网站,提供了 Dockerfile 的详细说明和示例。
5. Docker for Mac (https://www.docker.com/docker-for-mac)
这是 Docker 官方的 macOS 应用程序,可以让用户轻松地安装、管理和运行 Docker 容器。
6. Docker for Windows (https://www.docker.com/docker-for-windows)
这是 Docker 官方的 Windows 应用程序。
7. Docker Linux (https://www.docker.com/linux)
这是 Docker 官方的 Linux 应用程序。
8. Docker Tips (https://www.docker.com/docker-tips)
这是 Docker 官方的技巧和最佳实践网站,提供了一些有用的 Docker 指南和示例。
9. Dockerize (https://dockerize.com/)
这是一个 Docker 应用程序生成器,可以帮助用户将 Web 应用程序转换为 Docker 容器。
10. Docker Datacenter (https://www.docker.com/datacenter)
这是 Docker 官方的企业级容器平台,可以帮助用户构建、管理和运行容器化的企业应用程序。
5- Docker 安装
可安装Docker的操作系统
Docker 可以安装在多种操作系统中,包括但不限于:
-
Windows 10
-
Windows Server 2019
-
macOS Catalina 或更高版本
-
Linux 发行版,如 Ubuntu、Debian、Fedora、Red Hat Enterprise Linux、CentOS、OpenSUSE 等。
-
Android 11 或更高版本
-
iOS 13 或更高版本
不同操作系统和版本的 Docker 可能会有不同的安装和配置要求。在安装和配置 Docker 之前,需要确保操作系统和版本满足 Docker 的最低要求。
安装Docker的先行条件
-
操作系统:Docker支持多种操作系统,包括Linux、Windows、macOS等。在安装Docker之前,您需要确保您的操作系统符合Docker的要求,目前Docker只支持64位操作系统。
-
虚拟机或容器化平台:Docker本身就是一个容器化平台,但如果您使用的是虚拟机,您需要确保虚拟机具有足够的资源来运行Docker。如果您使用的是容器化平台,如Kubernetes、Docker Compose等,您需要确保它们支持Docker。
-
存储空间:Docker需要一定的存储空间来存储镜像和容器。您需要确保您的系统具有足够的存储空间来支持Docker。
-
网络连接:Docker需要与互联网连接以下载镜像和使用其他Docker功能。如果您没有连接到互联网,您可能无法安装Docker或使用其他Docker功能。
6- Ubuntu或者Debian安装Docker
支持安装Docker的Ubuntu版本
Docker Engine-Community 目前支持的 Ubuntu 版本包括以下内容:
-
Ubuntu 18.04 LTS (Bionic Beaver)
-
Ubuntu 20.04 LTS (Focal Fossa)
-
Ubuntu 16.04 LTS (Xenial Xerus)
-
Ubuntu 14.04 LTS (Trusty Tahr)
Docker Engine-Community 的最新版本通常支持最新的 Ubuntu 版本,确认您的Ubuntu版本是否支持Docker。Docker最新版本在Ubuntu 20.04上支持,但是如果您的Ubuntu版本较旧,则需要进行升级。
支持安装Docker的Debian版本
-
Debian 8.8 “Jessie”
-
Debian 9.6 “Stretch”
-
Debian 10.0 “Buster”
以上三个版本的 Debian 都可以在 Docker 中运行。请注意,在使用 Docker 时,请确保你的 Docker 环境与你所使用的 Debian 版本兼容。
检查当前主机上是否安装了Docker
通过运行以下命令来检查当前正在使用的 Docker Engine 版本:
docker version
Ubuntu与Debian的安装步骤是相同的。
手动安装
卸载旧版本
Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们,卸载命令:
sudo apt-get remove docker docker-engine docker.io containerd runc
使用 Docker 仓库安装
首次安装 Docker Engine-Community 之前,需要设置一下 Docker 仓库。然后可以从仓库安装和更新 Docker 。
设置仓库
打开终端并更新系统软件包列表。您可以使用以下命令:
sudo apt-get update
安装 apt 依赖包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
设置稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"
安装 Docker Engine-Community
更新系统软件包列表:
sudo apt-get update
安装最新版本的 Docker Engine-Community 和 containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io
或者转到下一步安装特定版本
apt-cache madison docker-ce
docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~ubuntu | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~ubuntu | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages
...
例如 :安装 18.06.1~ce~3-0~ubuntu版本
sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu docker-ce-cli=18.06.1~ce~3-0~ubuntu containerd.io
验证Docker是否安装成功,提示以下信息安装成功:
sudo docker info
Containers: 0
Images: 0
...
自动安装
除了手动安装外,我们还可以使用官方安装脚本自动安装
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
这种安装方式是一站式的,安装好了就直接可以使用了,简单加快乐。
7- CentOS安装Docker
Docker 支持的 CentOS 版本
Docker 是一个广泛使用的开源容器技术,为开发者和运维人员提供了方便、高效的工具。而在 Docker 支持的平台中,CentOS 也是一个重要的操作系统。以下是 Docker 支持的 CentOS 版本:
- CentOS 7
CentOS 7 是一个高度可定制的、稳定的 Linux 发行版,自从 2014 年 10 月发布以来一直受到开发者和企业用户的欢迎。作为一个 Docker 的官方支持版本,CentOS 7 的稳定性和可靠性使其成为 Docker 容器应用的理想平台。
- CentOS 8 (原名为 RHEL 8,已于 2020 年 6 月 1 日正式发布)
CentOS 8 是 Red Hat Enterprise Linux (RHEL) 的第 8 个版本,它在内核、系统工具、软件包等方面都有很大的改进。在 Docker 方面,CentOS 8 同样提供了支持,但它还提供了一些额外的功能,如增强的内核模块支持和安全性功能。
这些版本都是支持 64 位的。
卸载旧版
旧版本的 Docker 称为 docker 或者 docker-engine ,使用以下命令卸载旧版本以及相关的依赖项:
- CentOS 7
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- CentOS 8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
以上命令会卸载 Docker 及其依赖项,如果您的系统中存在其他 Docker 版本,还需要分别卸载它们。此外,为了保证 Docker 在卸载后不会影响系统的稳定性,请确保在卸载前先备份所有的 Docker 相关文件和数据。
使用 Docker 仓库进行安装
Docker Engine-Community 可以在新主机上进行首次安装和配置。在开始之前,需要设置 Docker 仓库,这是一个非常重要的步骤。在设置 Docker 仓库之后,您可以从仓库安装和更新 Docker Engine。Docker 仓库提供了许多预安装的镜像,您可以使用这些镜像快速构建和运行应用程序。安装 Docker 还需要确保您的系统满足最低要求,并且已经安装了必要的依赖项和软件包。安装和配置 Docker 需要一定的技术知识,但是 Docker 社区提供了丰富的文档和支持,以帮助您完成这个过程。
使用yum源安装依赖包
- 安装依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 使用官方源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
国内地址比较快一些,可以选择国内地址踢馆官方源进行仓库的安装:
-
阿里云:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
清华大学:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
使用脚本自动安装
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS
系统上可以使用这套脚本安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动docker
sudo systemctl start docker
验证是否安装成功
sudo docker run hello-world
8- macOS 安装 Docker
使用 Homebrew 安装
Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:
$ brew cask install docker
在载入 Docker app 后,点击 Next,可能会询问你的 macOS 登陆密码,你输入即可。之后会弹出一个 Docker 运行的提示窗口,状态栏上会出现一个小鲸鱼的图标:。
手动下载安装
下载链接:https://docs.docker.com/desktop/install/mac-install/
提示:根据自己电脑的芯片选择安装版本
进行安装
安装后应用列表里就会出现这个鲸鱼标的应用
双击顶部状态栏会出现鲸鱼图标
查看安装结果
$ docker --version
Docker version 17.09.1-ce, build 19e2cf6
9- Windows 安装 Docker
Windows 10 安装 Dokcer
在使用Docker的过程中,安装和配置是非常重要的一步。Docker支持64位版本的Windows 10,但在使用之前需要确保系统中已经开启了Hyper-V功能。
Hyper-V是Windows操作系统中的一项虚拟化技术,它允许用户在单个计算机上创建多个虚拟机,以实现更高的性能和可扩展性。因此,如果您希望在Windows 10上安装和运行Docker,则必须先启用Hyper-V功能。
在安装Docker之前,您还需要确保系统中已经安装了64位版本的Windows 10操作系统。Docker最初发布时支持32位版本的Windows操作系统,但随着技术的发展和Docker社区的反馈,现在已经改为支持64位版本的Windows 10。
在启用Hyper-V功能之后,您可以从Docker官网下载并安装Docker。在安装过程中,您需要设置Docker的配置文件和默认路径,并选择安装Docker后要运行的容器镜像。
完成安装后,您可以通过命令行或图形界面启动Docker并开始使用。在使用Docker时,您可以使用容器镜像创建一个新的虚拟机,并在其中运行Docker容器。通过使用Docker容器,您可以在虚拟机中运行多个应用程序,以提高性能和可扩展性。
总之,在安装和使用Docker时,确保系统中已经开启Hyper-V功能是非常重要的一步。启用Hyper-V功能可以帮助您在Windows 10上运行Docker容器,从而实现更高的性能和可扩展性。
开启Hyper-V
除了右击开始选择应用和功能中寻找,还可以通过直接搜索启用或关闭 Windows 功能
勾选Hyper-V
安装 Docker Desktop for Windows
中文官网:http://docker.p2hp.com/,点击下载安装包
点击下载好的安装包,进行安装
安装完成,点击Close and restart之前确保工作进度都保存了,因为这个按钮会重启你的电脑
重启后,如果没有自动启动,可点击桌面docker应用的图标打开docker进行使用
启动docker前确定自己的系统内核版本为WSL 2
升级WSL内核的链接给大家贴在这里:https://aka.ms/wsl2kernel
10- 确认Docker正在工作
当我们准备创建和运行第一个容器时,我们需要确保我们的Docker服务处于良好的工作状态,并且可以正确地处理整个容器生命周期的所有阶段。这意味着我们需要熟悉容器的各种生命周期操作,如创建、管理、停止和删除。
确认Docker正在工作
当你在运行Docker命令时遇到"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"错误时,可能是由于Docker守护进程未启动导致的。
1. 检查Docker守护进程状态:在终端或命令提示符中执行以下命令,查看Docker守护进程的运行状态:
sudo service docker status
如果守护进程没有运行,你可以通过以下命令启动它:
sudo service docker start
2. 检查当前用户的权限: 确保当前用户具有执行Docker命令的权限。你可以将自己添加到docker用户组中,以便在不使用sudo的情况下运行Docker命令。执行以下命令将当前用户添加到docker用户组:
sudo usermod -aG docker $USER
请注意,在执行完此命令后,你需要重新登录才能使用户组更改生效。
3. 检查/var/run/docker.sock文件是否存在:执行以下命令检查Docker套接字文件是否存在:
ls -la /var/run/docker.sock
如果文件不存在,可以尝试重启Docker服务:
sudo service docker restart
4. 检查Docker安装是否正常:确保Docker已正确安装并更新到最新版本。你可以从Docker官方网站获取最新版本的安装包,并按照官方文档提供的指南进行安装。
如果上述解决方法仍然无法解决问题,可能需要进一步检查系统日志以了解具体错误原因。此外,你还可以参考Docker社区或官方文档以获取更多支持和指导。
11- 我们的第一个容器
创建第一个容器
我们以常用的Linux系统centOS 8为例。
要创建一个Docker容器,我们需要使用Docker命令行界面或者Docker Desktop应用程序。Docker是一种流行的容器化平台,它可以在不同的操作系统之间轻松移植应用程序。Docker容器提供了一个独立的环境,可以让应用程序在其中运行,而不会受到操作系统的影响。这使得Docker容器成为一种流行的应用程序部署方法,特别是在开发人员需要在不同环境中进行测试和开发时。
在本例中,我们将使用Docker来创建一个基于Ubuntu镜像的容器,并在其中运行一个命令。要运行容器,,我们需要先从Docker Hub下载Ubuntu镜像,然后使用docker run命令来启动容器。在docker run命令中,我们可以指定要运行的镜像和容器名称,并可以指定一些其他选项来配置容器的行为。
在本例中,我们使用以下命令来启动容器:
docker run ubuntu:latest /bin/echo "Hello Docker!"
在这个命令中,我们指定了要使用的镜像为Ubuntu:latest。该镜像是Ubuntu官方提供的最新镜像,它包含了Ubuntu的最新版本的内核和其他组件。接下来,我们使用了一个可执行文件的路径 /bin/echo来执行容器中的命令。这个命令将在容器中输出 “Hello Docker!” 到控制台。
执行完docker run命令后,容器就会被创建并启动。在容器中,您可以使用任何其他命令来操作容器,并与容器中的文件进行交互。
这是创建和运行Docker容器的基本过程。Docker容器提供了一种简单、快速、安全和可移植的方式来运行应用程序和服务。在未来,我们将看到更多的应用程序和服务使用Docker容器进行部署和管理。
我们的容器在哪里
在服务器中,我们的容器也是被Docker管理起来的,我们可以使用命令进行查看
查看运行中的容器:docker ps
查看所有容器:docker ps -a
因为我们上面创建的容器没有设定一些特殊的交互模式,所以在运行完程序之后,它自动停止了,我们这里需要使用查看所有容器
docker ps -a
我们可以看到我们刚才创建的输出"Hello Docker!"的容器
12- 与容器进行交互
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力
通过在docker命令中添加-i和-t参数,可以实现docker容器的交互能力,这是因为这两个参数都用于在容器内运行控制台。其中,-i参数会打开标准输入设备,让用户可以通过终端在容器内与操作系统进行交互;而-t参数会创建一个伪终端,这样用户就可以像在本地计算机上一样在容器内与控制台进行交互。
docker run -i -t ubuntu:latest /bin/bash
运行之后,我们会发现进入了一个新的服务器地址,这其实就是我们进入到了我们的容器中,在容器中可以进行各种操作
使用 cat /proc/version 命令查看当前系统的版本
cat /proc/version
我们可以看到终端打印出我们创建容器时使用的系统镜像版本
使用 ls 查看服务器上的目录文件结构
ls
使用exit命令退出容器
exit
除了使用exit命令,我们也可以按下键盘上的Ctrl+D来退出容器
扩展
在容器内部运行控制台是一项非常有用的功能,它可以让用户更加方便地操作容器内的应用程序。此外,通过控制台交互,用户还可以轻松地获取容器内部的运行状态信息,例如容器的进程ID、CPU和内存使用情况等等。这些信息可以帮助用户更好地了解容器内部的运行状况,并根据需要进行相应的调整。
除了控制台交互外,还有一些其他的方法可以与docker容器进行交互。例如,可以使用docker exec命令在容器内运行其他的命令或者进程,或者使用docker attach命令将容器内的进程与终端绑定在一起,从而可以在终端中运行其他的命令或者控制容器内部的进程。
13- 以后台进程形式存在的容器
docker run -d
docker run -d 是用于在后台运行容器的命令。其中 -d 是用来指定容器的运行模式的。
在运行容器之前,我们需要确保已经安装并启动了Docker守护进程。然后,我们可以使用以下命令来运行容器
docker run -d ubuntu:latest /bin/sh -c "while true; do echo Hello Docker; sleep 1; done"
运行完后,不难发现输出结果中并没有输出我们指定的:“Hello Docker”这一字符串,而是得到了一个随机的长字符串
使用docker ps查看容器,可以发现截取了这段字符一段作为容器的id
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
在宿主主机内使用 docker logs 命令,查看容器内的输出
docker logs happy_ellis
运行后可以看到容器内的打印程序在运行
停止容器
后台运行的容器将在后台执行,并且不会在你退出当前终端或会话时自动停止,停止容器的命令是 docker stop ,运行以下命令停止容器
docker stop happy_ellis
请注意,在后台模式下运行容器时,通常无法看到容器的实时输出。如果需要查看容器的日志或输出,可以使用 docker logs 命令。
总结起来,docker run -d 是一个在后台模式下运行容器的命令,使得容器可以在后台持续运行而不会阻塞当前终端。
14- Docker 镜像
镜像介绍
Docker 镜像是 Docker 容器的基础,它是一个轻量级、可执行的独立软件包,其中包含了运行一个应用程序所需的所有内容,包括代码、运行时环境、系统工具、库文件以及依赖项。
我们在创建、运行容器时,如果创建这个容器的镜像不存在,Docker会自动从Docker镜像仓库中获取我们需要的指定的镜像。
docker images 命令用于列出本地计算机上已经下载的 Docker 镜像列表。它会显示每个镜像的名称、标签、镜像 ID、大小和创建时间等信息。
在命令行中运行docker images ,我们将看到类似以下的输出:
其中,每一行代表一个镜像,每一列也有自己特殊的意义:
-
REPOSITORY:镜像的仓库/来源。它可以是官方仓库(如 ubuntu、nginx)或自定义仓库(如 myrepo/myimage)。
-
TAG:镜像的标签。它通常表示镜像的版本或相关信息,如 latest、14.04等。同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本。
-
IMAGE ID:镜像的唯一标识符,由一串字符组成。
-
CREATED:镜像的创建时间。
-
SIZE:镜像的大小。
这些信息可以帮助我们了解当前系统中已经下载的镜像,以及它们的相关信息。
Docker 镜像的特点
-
轻量级:Docker 镜像是通过使用容器化技术构建的,它们非常小巧且精简,只包含了应用程序运行所需的最低限度的组件。
-
可移植性:Docker 镜像是可移植的,可以在任何支持 Docker 的平台上运行,无论是开发环境、测试环境还是生产环境,保持一致的运行方式。
-
可扩展性:Docker 镜像是可扩展的,可以基于现有的镜像构建新的镜像,通过添加额外的组件、配置或代码来满足特定的需求。这种层次结构和复用性使得镜像的管理和维护变得更加容易。
-
版本控制:Docker 镜像支持版本控制,每个镜像都有一个唯一的标识符(Image ID),可以通过标识符来管理和跟踪不同版本的镜像。
-
安全性:Docker 镜像可以提供更高的安全性,因为它们是隔离的、独立的运行环境。每个容器都运行在其自己的命名空间中,相互之间不会相互影响,这样可以减少潜在的安全漏洞。
-
通过使用 Docker 镜像,开发人员可以方便地打包应用程序及其依赖项,并在任何支持 Docker 的环境中快速部署和运行。同时,镜像还提供了一种标准化和可重复的部署方式,简化了应用程序的交付和管理过程。
镜像的使用
- 如果我们要使用指定的一个版本的ubuntu镜像创建并运行容器,比如使用15.10版本的镜像,我们可以使用以下命令:
docker run -i -t ubuntu:15.10 /bin/bash
这条命令的含义如下:
-
docker run:运行 Docker 容器的命令。
-
-t:表示要分配一个终端(tty)设备。
-
-i:表示要保持标准输入流(stdin)打开。
-
ubuntu:15.10:指定要基于哪个镜像来运行容器。在这里,使用的是 Ubuntu 15.10 版本的镜像。
-
/bin/bash:在容器内要运行的命令,这里是启动一个 Bash 终端。
运行该命令将会启动一个新的 Ubuntu 15.10 版本的容器,并打开一个 Bash 终端。我们可以在容器中执行各种操作,例如安装软件包、运行命令等。当退出 Bash 终端时,容器也将停止并退出。
- 当我们在 docker run 命令中不指定镜像的版本标签时,Docker 将默认使用该镜像的 latest 标签版本。
例如,如果我们运行以下命令:
docker run -t -i ubuntu /bin/bash
Docker 将会自动下载并使用最新版本的 Ubuntu 镜像,即 ubuntu:latest。
latest 是一个常用的标签,它表示镜像的最新版本。但是需要注意的是,某些镜像的 latest 标签可能不是真正的最新版本,因此最好明确指定所需的版本标签来确保一致性和可重现性。
使用docker pull获取镜像
docker pull 命令用于从远程镜像仓库中获取(拉取)一个新的镜像到本地。
要拉取一个新的镜像,只需使用以下命令格式:
docker pull [镜像名称]:[标签]
其中,[镜像名称] 是我们要拉取的镜像的名称,例如 ubuntu、nginx 等。[标签] 则是镜像的具体版本或标识符,例如 latest、20.04 等。
举个例子,如果要拉取最新的 Ubuntu 镜像,可以运行以下命令:
docker pull ubuntu:latest
Docker 将会从 Docker Hub 或其他配置的镜像仓库中下载该镜像,并保存在我们的本地环境中。
当拉取镜像时,我们可以在命令行中看到下载的进度信息,一旦下载完成,即可使用 docker images 命令查看本地镜像列表,确认镜像已成功拉取到本地。
删除镜像
要删除 Docker 镜像,可以使用 `docker rmi` 命令。以下是删除镜像的步骤:
-
打开终端或命令行界面。
-
运行 `docker images` 命令,查看您本地的镜像列表。这将列出已下载的镜像及其相关信息,包括镜像 ID 和标签。
-
根据要删除的镜像,找到其镜像 ID 或标签。
-
运行 `docker rmi` 命令,后面跟随要删除的镜像的镜像 ID 或标签。例如,要删除镜像 ID 为 `13b66b487594` 的镜像,可以运行如下命令:`docker rmi 13b66b487594`。或者,如果要删除标签为 `ubuntu:latest` 的镜像,可以运行如下命令:`docker rmi ubuntu:latest`。
-
确认删除操作。命令执行后,Docker 将删除指定的镜像。如果镜像正在被使用,则需要先停止和删除相关的容器,才能成功删除镜像。
请注意,在删除镜像之前,请确保不再需要该镜像,并且没有其他依赖该镜像的容器正在运行。
更新镜像
要更新 Docker 镜像,可以按照以下步骤进行操作:
- 运行容器:使用 `docker run` 命令创建一个容器。可以使用如下命令运行一个基于 Ubuntu 15.10 的容器:
docker run -t -i ubuntu:15.10 /bin/bash
- 在容器内更新:容器启动后,进入容器的命令行界面。在这个例子中,通过 `/bin/bash` 命令进入容器的 Bash Shell。然后在容器内执行以下命令:
apt-get update
-
退出容器:在容器内完成更新操作后,使用 `exit` 命令退出容器。
-
提交容器副本:使用 `docker commit` 命令提交容器的副本,以生成一个新的镜像。命令的格式为:
docker commit <容器ID> <镜像名称>:<标签>
例如,如果容器ID为 `060240caac28`,可以运行如下命令进行提交:
docker commit 060240caac28 myimage:latest
其中,“myimage” 就是我们希望更新的镜像名称,`latest` 是新的标签或版本号。
- 查看更新后的镜像:使用 `docker images` 命令查看本地镜像列表,确认已经生成了更新后的镜像。
请注意,提交容器副本生成的新镜像是一个单独的镜像,与原始镜像相互独立。更新后的镜像可以在其他容器中使用或推送到远程镜像仓库。
- 使用新镜像创建容器,运行命令:docker run -t -i myimage /bin/bash
构建镜像
要构建一个镜像,我们可以使用 Docker 工具根据一个包含构建指令的 Dockerfile 文件进行操作。
- 在 Dockerfile 中定义您的镜像配置,可以使用任何文本编辑器。这包括选择基础映像、安装软件包、添加文件等等。下面是一个简单的示例
在上面的示例中,您需要根据实际情况自定义以下部分:
-
FROM 行指定了基础映像,您可以选择适合您需求的映像。
-
RUN 行用于在镜像中运行命令,以安装所需的软件包或执行其他操作。
-
EXPOSE 暴露端口给主机
-
CMD 行指定了容器启动时要执行的命令。
保存DockerFile文件
- 在Dockerfile 的目录中使用以下命令来构建镜像:
docker build -t image_name:tag .
其中,image_name 是想要为镜像设置的名称,`tag` 是可选的标签,表示镜像的特定版本。注意 “.” 表示当前目录。
-
Docker 将按照 Dockerfile 中的指令运行构建过程,并且会下载所需的依赖项。这可能需要一些时间,具体取决于镜像的大小和网络速度。
-
构建完成后,可以使用以下命令查看已构建的镜像列表:
docker images
- 我们可以使用上面构建的镜像来运行一个容器
docker run -it myubuntu:tag /bin/bash
- -it :用于在容器中启动一个交互式会话,以便您可以与容器进行交互。
给镜像设置标签
要给已经存在的镜像设置标签,可以使用 docker tag 命令。以下是命令的格式:
docker tag <existing_image> <new_image>:<tag>
-
<existing_image> 是现有镜像的名称或 ID。
-
<new_image> 是要创建的新镜像的名称。
-
<tag> 是要为新镜像设置的标签。
例如:
运行命令后,我们使用查看一下镜像列表:
可以看到myubuntu这个镜像多出了一个v10版本的镜像。
15- Dockerfile
Dockerfile是什么?
上一节,构建镜像时,我们用到了Dockerfile简单的构建了演示镜像,那么Dockerfile是什么呢?
实际上,Dockerfile 是一种文本文件,用于指示 Docker 镜像的构建过程。它包含了一条条的指令和参数,每条指令相当于执行 Docker 中的一个命令,并且构建顺序按照文件中的顺序执行。
使用 Dockerfile 可以方便地自定义镜像,以应对不同的需求。通过编写 Dockerfile 文件,可以定义基础镜像、安装软件、配置环境变量、复制文件等操作,最终生成一个新的 Docker 镜像。
编写Dockerfile的语法
<指令> <参数>
<指令2> <参数>
...
在这一代码中,每个指令都有自己特殊的语法和参数,例如:
# 基于 Ubuntu 16.04 创建镜像
FROM ubuntu:16.04
# 安装必要的工具和软件包
RUN apt-get update && \
apt-get install -y curl wget
# 设置环境变量
ENV MY_VAR=my_value
# 复制文件到镜像中
COPY my_app /opt/my_app
# 暴露 8000 端口
EXPOSE 8000
# 容器启动时默认执行的命令
CMD ["/opt/my_app/start.sh"]
...
Dockerfile的指令
上面示例中使用了一些指令以及参数,这里会列出它们,并对他们做出解释
指令说明
指令 | 指令说明 |
---|---|
FROM | 指定基础镜像,它指定了作为基础的镜像名称或标签。在构建过程中,将以该镜像作为起点 |
MAINTAINER | 设置镜像的维护者信息(已废弃,推荐使用 LABEL),通常用于指定镜像的作者和联系方式 |
LABEL | 设置镜像的元数据信息,可以为镜像添加自定义的元数据,如版本、描述、作者等 |
RUN | 在容器内执行命令,可以执行任意的 Shell 命令,用于构建镜像时的一些操作,如安装软件包、设置环境等 |
CMD | 设置容器启动时默认执行的命令,该命令将在容器启动时自动执行,可以被 docker run 命令覆盖 |
EXPOSE | 声明容器监听的端口,并不会实际发布端口,只是做一种提示,告诉使用者容器运行时可以监听哪些端口 |
ENV | 设置环境变量,用于在容器内部设置环境变量,可以在后续的指令中引用这些环境变量 |
ADD | 将文件、目录或远程文件复制到容器中(类似于 COPY,但还支持 URL 和解压缩),除了复制本地文件外,还可以从 URL 复制文件,并且支持解压缩 |
COPY | 复制文件或目录到容器中,只能复制本地文件或目录,无法处理 URL 和解压缩 |
ENTRYPOINT | 设置容器启动时默认执行的命令,该命令将在容器启动时自动执行,不会被 docker run 命令覆盖 |
VOLUME | 声明匿名卷,用于持久化数据或与其他容器共享数据,用于将容器内的数据持久化或与其他容器共享数据 |
USER | 设置运行容器时的用户名或 UID,用于指定在容器中运行的进程所使用的用户 |
WORKDIR | 设置工作目录,用于指定之后命令的工作目录路径 |
ARG | 定义构建参数,构建参数可以在构建过程中传递给 Dockerfile,用于定制化镜像的构建 |
ONBUILD | 在当前镜像被用作基础镜像时执行相关指令,这些指令将在子镜像的构建过程中被执行 |
参数说明
指令 | 参数说明 | 指令及其参数示例 |
---|---|---|
FROM | 镜像名称或标签 | FROM ubuntu:18.04 |
MAINTAINER | 维护者信息 | MAINTAINER John Doe <johndoe@example.com> |
LABEL | 键值对形式的元数据信息 | LABEL version=“1.0” description=“My Docker Image” |
RUN | 要执行的命令 | RUN apt-get update && apt-get install -y curl |
CMD | 数组或字符串 | CMD [“python”, “app.py”] 或 CMD python app.py |
EXPOSE | 端口号 | EXPOSE 8080 |
ENV | 变量名=值 | ENV MY_VAR=my_value |
ADD | 源文件/目录路径 目标路径 | ADD app.tar.gz /app/ |
COPY | 源文件/目录路径 目标路径 | COPY app.py /code/ |
ENTRYPOINT | 数组或字符串 | ENTRYPOINT [“python”, “app.py”] 或 ENTRYPOINT python app.py |
VOLUME | 路径 | VOLUME /data |
USER | 用户名或 UID | USER myuser |
WORKDIR | 目录路径 | WORKDIR /app |
ARG | 参数名[=默认值] | ARG VERSION=latest |
ONBUILD | 要执行的指令 | ONBUILD ADD . /app/ |
这些指令允许用户在 Dockerfile 中定义镜像的构建过程,包括基于基础镜像、安装软件、设置环境变量和执行命令等操作。通过组合和使用这些指令,可以创建出符合个人需求的定制化 Docker 镜像。
16- 通过端口访问Docker容器
步骤
要通过端口连接到一个 Docker 容器,你可以按照以下步骤进行操作:
-
确保容器内的应用程序已正确配置为监听容器内部的特定端口。这可以在容器内的应用程序配置文件或命令行参数中完成。
-
运行容器时,使用 -p 参数将容器内的端口映射到宿主机上的一个可用端口。例如,如果容器内的应用程序监听的是容器的 8080 端口,可以使用以下格式的 docker run 命令来运行容器:
docker run -p 宿主机端口:容器端口 镜像名称
其中宿主机端口是你想要将容器内的端口映射到的宿主机端口。
例如,你可以运行以下命令将容器内的 8080 端口映射到宿主机的 8888 端口:
docker run -p 8888:8080 镜像名称
- 连接到容器。现在,你可以使用宿主机的 IP 地址和映射的宿主机端口来连接到容器。打开 Web 浏览器或其他客户端工具,并访问 宿主机地址,例如:“http://111.222.333.1:8080” 来连接到容器中的应用程序。
请注意,如果使用的是 Docker Desktop 或 Docker for Mac/Windows,可以使用 localhost 作为宿主机来连接到容器。如果在云服务器上运行 Docker,则需要使用服务器的公共 IP 地址来连接到容器。
案例
下面,我们通过一个案例的实现,来直观的了解如何通过端口访问Docker容器。
首先,我们需要先创建一个容器,例如创建一个运行python应用的容器,命令如下:
docker run -d -P training/webapp python app.py
其中 -d 我们之前介绍过,其作用是让容器在后台运行起来,而不是运行后进入容器内
其中 -P 的作用是绑定端口号,注意这里是大写的P,它会随机分配一个宿主机的端口号与容器进行绑定
使用 -P/-p 绑定主机与容器的端口
- 运行上面的命令,第一次使用training/webapp镜像时,会自动拉取镜像以运行容器。
- 接下来,使用docker ps 查看我们的容器列表,不难发现,主机上的32768端口绑定了容器的5000端口。
- 除了使用**-P** 随机映射之外,我们也可以使用**-p** 来选择指定的主机端口绑定容器中的端口。
docker run -d -p 5000:5000 training/webapp python app.py
- 还可以给指定容器绑定网络地址。
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
使用 Docker 命令行工具中的 docker ps 命令来查看当前运行的容器列表。
通过 127.0.0.1:5001,我们可以使用容器的5000端口进行访问。
- 如果需要绑定的端口是udp而不是tcp,可以在端口后面加上/udp
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
使用docker ps查看创建的容器
- 使用docker port 命令可以查看容器端口的绑定情况
docker port <容器名>
17- 运行CentOS、Ubuntu容器
拉取镜像
我们这里指定CentOS 版本为centos8。
docker pull centos:centos8
查看镜像
使用docker images命令查看主机上的镜像列表。
docker images
镜像列表中出现了,上一步拉去的centos8版本的镜像。
运行容器
docker run -itd --name centos8-test centos:centos8
进入容器
使用docker exec命令进入容器
docker exec -it centos8-test /bin/bash
可以看到,这个容器中的结构和本身系统是centos8的服务器结构是一致的,其实,这个容器已经可以作为一个单独的服务器来使用了。
查看容器
使用exit命令退出容器后,然后使用docker ps 查看正在运行的容器
在容器列表中可以找到我们运行的centos8容器,说明我们运行成功,否则,就要回去检查以下看是否是哪一步出错了。
Ubuntu容器
Ubuntu容器的运行与centos运行大致相同,需要注意指定镜像的版本,或者直接使用ubuntu:last也可以。
18- 运行Nginx容器
查看可用的Nginx版本
使用命令 docker search nginx 查看可用的nginx版本
拉取镜像
使用命令 docker pull 拉取镜像,我们这里拉取最新版镜像
docker pull nginx:latest
然后使用docker images 查看主机上的镜像列表
docker images
运行容器
我们使用上面拉取到的nginx:latest 镜像来运行一个nginx容器
docker run --name nginx-test -p 8080:80 -d nginx
这里面有几个命令,在前面的小节中,我们讲过
-
–name 设置容器名称
-
-p 指定主机8080端口绑定到容器的80端口
-
-d 让容器以后台进程的方式一直运行
查看容器运行结果
docker ps
访问容器
使用主机ip或者域名加“:8080”可以访问到容器中的nginx服务。
注意:在访问的时候确保主机暴露了8080端口,否则浏览器无法访问主机的8080端口。
19- 运行Apache容器
查看可用的httpd版本
docker search httpd
运行以上命令,可以查询到可供选择拉取的httpd版本
拉取镜像
如果不指定拉取镜像的版本,默认会拉取最新的镜像,httpd:latest
docker pull httpd
查看镜像拉取结果
使用docker images查看列表,或使用docker images <镜像名>查看镜像
docker images httpd
运行Apache容器
docker run -d -p 80:80 --name my-apache-container httpd
打开浏览器,输入 http://localhost 或者 http://宿主机IP地址,就可以看到 Apache 的默认欢迎页面了。
这样,我们就成功在 Docker 中运行了一个 Apache 容器。
20- 运行MySQL容器
查看可用的mysql版本
运行命令:docker search mysql 查看到可供选择拉取的 mysql 版本
docker search mysql
拉取镜像
拉取镜像时,可以指定镜像的版本,如果不指定拉取镜像的版本,默认会拉取最新的镜像,mysql:latest
docker pull mysql
查看镜像拉取结果
使用docker images查看列表,或使用docker images <镜像名>查看镜像
docker images mysql:latest
镜像库中出现了刚才我们拉取的镜像,这说明我们的拉取是成功的。
运行容器
拉取镜像成功后,我们就可以使用这个镜像运行容器了
docker run -itd -p 3306:3306 --name my-mysql-container -e MYSQL_ROOT_PASSWORD=123456 mysql
这个命令会在后台模式下运行一个名为 my-mysql-container 的 MySQL 容器,并将容器的 3306 端口映射到宿主机的 3306 端口。
-e MYSQL_ROOT_PASSWORD=<your_password> 参数用于设置 MySQL 的 root 用户密码,替换 <your_password> 为你自己的密码。
运行
运行完成,我们来查看一下是否运行成功
docker ps
验证MySQL容器的运行
这时候我们可以使用navicat或者其他数据库管理工具进行连接了
填写刚才云习容器时所设置的信息,然后点击左下角测试连接
连接成功,证明我们的MySQL容器创建成功并且正常运行。
21- 运行Node.js容器
查看镜像版本
使用 docker search node 查看可用的node镜像版本
docker search node
有很多可用的版本可以供我们安装使用,我们选择自己想要的镜像版本进行拉取即可。
拉取镜像
使用docker pull node:<version>命令,拉取指定版本的node,我们这里直接拉取最新版本。
docker pull node:latest
查看镜像拉取结果
使用docker images查看镜像是否拉取成功
通常情况下,列表第一位就是我们刚才拉取的镜像,看到这个node镜像的话,说明我们已经将镜像拉取到我们主机上的镜像库中了。
运行容器
使用 docker run -itd --name node-test node:latest 运行node容器
docker run -itd --name node-test node:latest
查看运行结果
使用docker ps 查看node容器是否运行
验证
要验证node.js容器是否创建成功,需要进入容器,查看node.js的版本
docker exec -it node-test /bin/bash
进入容器后,使用node -v命令查看安装的node.js版本
node -v
版本号打印成功,说明我们的node容器创建成功并且可以正常使用