外国好的设计网站大全,淘宝联盟怎么建网站,wordpress如何选择文章模板,潍坊哪个网站公司做优化好#x1f680; Docker 入门与实战#xff1a;从安装到容器管理的完整指南 #x1f31f; #x1f4d6; 简介
在现代软件开发中#xff0c;容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊#xff0c;以其轻量级、高效和跨平台的特性#xff0c;深… Docker 入门与实战从安装到容器管理的完整指南 简介
在现代软件开发中容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊以其轻量级、高效和跨平台的特性深受开发者们的喜爱。本文将带你从零开始逐步掌握 Docker 的安装、配置以及日常使用技巧并结合实际案例为你提供一份详实的 Docker 使用指南。无论你是初学者还是有一定经验的开发者都能从中受益 目录 **Docker 入门与实战从安装到容器管理的完整指南** **简介** **安装 Docker****1. 更新系统并安装依赖****2. 添加 Docker 官方 GPG 密钥****3. 设置 Docker 存储库****4. 安装 Docker 引擎****5. 查看 Docker 和 Docker Compose 版本****6. 启动 Docker 服务****方法 1使用 service 命令****方法 2使用 systemctl 命令** **7. 验证安装****8. 设置 Docker 服务开机自启** **Docker 常用命令****启动容器****基础设置****网络设置** **容器的重启策略****重启策略对比表****设置容器的重启策略** **镜像与容器管理****1. 查询镜像****2. 拉取镜像****3. 删除镜像****4. 启动容器****5. 进入容器****6. 复制文件****7. 加载镜像****8. 创建新镜像****9. 保存镜像****10. 挂载目录****11. 重命名镜像****12. 退出容器** ⚙️ **解决常见问题**1. 网络超时问题**配置 DNS****修改 Docker 配置****Docker 配置文件解释****Docker 镜像源列表** 2. 解决 GPG 公钥缺失问题**适用场景****如果问题仍未解决** 3. 解决 Docker 权限问题**步骤 1创建 docker 组****步骤 2将当前用户添加到 docker 组****步骤 3注销并重新登录****步骤 4可选立即激活组更改****步骤 5验证权限配置****注意事项** 4. 配置 Docker 代理以登录 Docker Hub**1. 创建 Docker 服务目录和代理配置文件****2. 配置代理环境变量****3. 重新加载配置并重启 Docker 服务****4. 验证代理配置是否生效****测试 1登录 Docker Hub****测试 2拉取镜像** **5. 可选排除特定地址的代理****注意事项** 5. 解决 Docker 容器无法启动时的调试与修复方法**1. 查看容器日志****2. 检查容器配置****3. 使用临时容器挂载故障容器的卷****4. 直接编辑容器文件系统**方法 1挂载容器的文件系统方法 2直接修改宿主机上的文件 **5. 提交容器为镜像并重新启动****6. 删除并重新创建容器****避免类似问题的建议**(1) **挂载代码目录**(2) **分离启动逻辑**(3) **定期提交更改** **Docker Compose 命令详解****Docker Compose 常用选项** **实战案例运行 Flask 应用****1. 启动容器****重启策略** **2. 进入容器****3. 制作启动脚本****4. 保存和加载镜像****保存镜像****加载镜像****从容器创建新镜像** **5. 挂载目录****6. 退出容器** **参考链接** **总结** 安装 Docker
1. 更新系统并安装依赖
在安装 Docker 之前确保你的系统是最新的并安装必要的依赖包。
sudo apt-get update
sudo apt-get install ca-certificates curl2. 添加 Docker 官方 GPG 密钥
为了确保下载的软件包安全我们需要添加 Docker 的官方 GPG 密钥并设置权限
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod ar /etc/apt/keyrings/docker.asc如果遇到网络问题、防火墙限制或 SSL 配置问题可以使用国内镜像源 curl: (35) OpenSSL SSL_connect: 连接被对方重设 in connection to download.docker.com:443 使用国内镜像源下载 GPG 密钥。例如清华大学开源镜像站 sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc3. 设置 Docker 存储库
接下来我们将 Docker 的存储库添加到系统的 APT 源列表中。
echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null4. 安装 Docker 引擎
更新包索引后安装 Docker Engine 和相关工具。
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin5. 查看 Docker 和 Docker Compose 版本
在安装完成后可以通过以下命令验证 Docker 和 Docker Compose 是否正确安装并查看其版本信息
docker --version 或 docker -v输出示例
Docker version 27.5.1, build 9f9e405如果你使用的是新版 Docker Compose从 Docker Desktop 3.4.0 和 Docker Engine 20.10.13 开始Docker Compose 已被集成到 Docker CLI 中可以使用以下命令查看版本
docker compose version输出示例
Docker Compose version v2.32.4注意旧版独立安装的 Docker Compose 使用 docker-compose --version 查看版本。 6. 启动 Docker 服务
安装完成后Docker 服务通常会默认自启。如果未启动可以通过以下命令手动启动 Docker 服务。
方法 1使用 service 命令
sudo service docker start # 启动 Docker 服务
sudo service docker status # 查询 Docker 服务状态方法 2使用 systemctl 命令
sudo systemctl start docker.service # 启动 Docker 服务
sudo systemctl status docker.service # 查询 Docker 服务状态两种方法的区别 service 命令这是一个较老的服务管理工具兼容性较好适用于 SysVinit 系统如较旧的 Ubuntu 版本。systemctl 命令这是 systemd 系统的服务管理工具适用于现代 Linux 发行版如 Ubuntu 16.04 及更高版本。推荐在支持 systemd 的系统中使用 systemctl因为它功能更强大且更灵活。 7. 验证安装
通过运行一个简单的测试镜像来验证 Docker 是否安装成功。
sudo docker run hello-world如果一切顺利你将看到类似以下的输出
Hello from Docker!
This message shows that your installation appears to be working correctly.8. 设置 Docker 服务开机自启
为了确保 Docker 服务在宿主机启动时自动运行需要将其设置为开机自启。以下是具体操作步骤 检查 Docker 服务状态 systemctl status docker启用 Docker 服务开机自启 如果未启用开机自启执行以下命令 sudo systemctl enable docker验证设置是否生效 重启宿主机后检查 Docker 服务是否已自动启动 systemctl is-enabled docker输出示例 enabledDocker 常用命令
命令描述docker --version 或 docker -v查看 Docker 的版本信息docker images查看本地所有镜像docker pull image_name从 Docker Hub 拉取镜像docker rmi image_id删除本地镜像docker ps查看正在运行的容器docker ps -a查看所有容器包括已停止的docker run -it image_id启动一个新的容器并进入交互模式docker start container_id启动已停止的容器docker stop container_id停止正在运行的容器docker rm container_id删除容器docker restart container_id重启容器docker exec -it container_id /bin/bash [-c 执行的命令] 进入正在运行的容器内部并执行命令 启动容器
启动一个新的容器时可以使用以下命令并根据需要设置容器名称、运行模式、伪终端分配和端口映射等选项
docker run [OPTIONS] image_id基础设置 指定容器名称--namename 为容器指定一个名称。例如 docker run --namemy_container image_id后台运行-d 后台运行容器并返回容器 ID。例如 docker run -d image_id前台运行-i 和 -t 前台-i: 以交互模式运行容器通常与 -t 一起使用。 是否分配伪终端-t: 为容器重新分配一个伪输入终端通常与-i同时使用 例如 docker run -it image_id /bin/bash网络设置 端口映射-p 指定主机和容器之间的端口映射关系。例如 docker run -p 8000:8000 image_id容器的重启策略
容器的重启策略RestartPolicy是一个非常重要的配置项它决定了容器在退出或宿主机重启时的行为。以下是对不同重启策略的详细说明
重启策略对比表
策略名称行为描述no默认值容器不会自动重启。on-failure仅在容器以非零退出码退出时重启。可指定最大重试次数如 on-failure:5。always无论容器因何种原因停止都会自动重启。unless-stopped总是重启容器除非容器被手动停止。
设置容器的重启策略 创建容器时设置重启策略 在运行容器时可以通过 --restart 参数设置重启策略。例如 docker run -d --name my_container --restart always my_image上述命令将容器的重启策略设置为 always即无论容器因何种原因停止都会自动重启。 修改现有容器的重启策略 如果容器已经创建可以通过 docker update 命令修改其重启策略。例如 docker update --restart always my_container验证容器的重启策略 使用以下命令查看容器的重启策略 docker inspect my_container | grep -A 5 RestartPolicy输出示例 RestartPolicy: {Name: always,MaximumRetryCount: 0
},镜像与容器管理
1. 查询镜像
查看本地所有镜像
docker images2. 拉取镜像
从 Docker Hub 拉取指定镜像例如 hello-world
docker pull hello-world3. 删除镜像
删除本地镜像需要先停止并删除相关容器
docker rmi image_id4. 启动容器
启动一个新的容器并指定名称和端口映射
docker run -it -p 8000:8000 --name my_container image_id /bin/bash5. 进入容器
进入正在运行的容器并执行命令
docker exec -it container_id /bin/bash6. 复制文件
在容器和主机之间复制文件或目录
# 将容器内的文件复制到主机
docker cp container_id:/path/to/file /host/path/
# 将主机上的文件复制到容器内
docker cp /host/path/file container_id:/path/to/7. 加载镜像
在目标计算机上加载镜像
docker load -i 镜像文件.tar8. 创建新镜像
将现有容器保存为一个新的镜像
docker commit -m 提交信息 -a 作者 容器ID 新镜像名称9. 保存镜像
将镜像保存为 .tar 文件
docker save -o 输出文件名.tar 镜像名称10. 挂载目录
通过 -v 参数挂载本地目录到容器中
docker run [OPTIONS] -v [本地目录]:[容器目录] IMAGE[:TAG] /bin/bash例如
docker run -v /home/user/data:/app/data my_image:latest /bin/bash11. 重命名镜像
将镜像重新命名
docker tag IMAGE[:TAG] TARGET[:TAG]例如
docker tag my_image:latest my_image:v1.012. 退出容器
退出容器时可以使用以下命令
exit⚙️ 解决常见问题
1. 网络超时问题
如果你在拉取镜像时遇到网络超时问题如下所示可以尝试配置 DNS 或使用国内镜像源。
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).配置 DNS
编辑 /etc/resolv.conf 文件添加以下内容以使用公共 DNS 服务器
nameserver 114.114.114.114 # 国内常用 DNS
nameserver 8.8.8.8 # Google 公共 DNS注意某些系统可能会自动覆盖 /etc/resolv.conf 文件的更改。如果发现配置被重置请检查网络管理工具或相关服务配置。 修改 Docker 配置
编辑 /etc/docker/daemon.json 文件添加国内镜像源以加速镜像拉取
{registry-mirrors: [https://x9r52uz5.mirror.aliyuncs.com, https://dockerhub.icu, https://docker.chenby.cn, https://docker.1panel.live, https://docker.awsl9527.cn, https://docker.anyhub.us.kg, https://dhub.kubesre.xyz ],max-concurrent-downloads: 10, max-concurrent-uploads: 5, default-shm-size: 1G, debug: true, experimental: false
}注释问题 JSON 文件本身不支持注释如 // 或 /* */。虽然某些工具可能允许注释但 Docker 不会解析带有注释的 daemon.json 文件。 并且在 JSON 中最后一个键值对后面不能有逗号。 Docker 配置文件解释
配置项值说明registry-mirrors[https://vy2wneyx.mirror.aliyuncs.com, https://dockerhub.icu, ...]镜像加速地址列表用于加速 Docker Hub 的镜像拉取。max-concurrent-downloads10最大并发下载数控制同时下载的层数量。max-concurrent-uploads5最大并发上传数控制同时上传的层数量。default-shm-size1G容器默认共享内存大小建议设置为较大的值以避免内存不足问题。debugtrue是否启用调试模式启用后会输出更详细的日志信息。experimentalfalse是否启用实验性功能建议保持禁用状态以确保稳定性。
Docker 镜像源列表
镜像源地址说明https://阿里云加速器ID.mirror.aliyuncs.com阿里云官方镜像稳定且速度快https://dockerhub.icu第三方镜像适合国内用户https://docker.chenby.cn社区维护镜像更新频率较高https://docker.1panel.live开源项目提供的镜像服务https://docker.awsl9527.cnAWS 相关镜像适合 AWS 用户https://docker.anyhub.us.kg多地区镜像支持全球访问https://dhub.kubesre.xyzKubernetes 社区推荐镜像 重启 Docker 服务以应用更改
sudo systemctl daemon-reload
sudo systemctl restart docker2. 解决 GPG 公钥缺失问题
即使更换了国内镜像源仍可能遇到以下错误
由于没有公钥无法验证下列签名这种问题通常是由于系统缺少用于验证软件包签名的 GPG 公钥导致的。此时可以尝试手动导入缺失的 GPG 公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7EA0A9C3F273FCD8说明 hkp://keyserver.ubuntu.com:80指定密钥服务器地址。7EA0A9C3F273FCD8需要导入的 GPG 公钥 ID根据实际错误信息替换为对应的公钥 ID。 适用场景
该命令通常用于解决因缺少公钥导致的软件包验证失败问题。例如在安装 Docker 或其他软件时可能会因为公钥缺失而无法完成安装。
如果问题仍未解决
确保网络连接正常并能够访问密钥服务器。如果仍然无法解决问题可以尝试跳过此步骤或参考其他解决方案如手动下载并安装相关软件包。 3. 解决 Docker 权限问题
默认情况下Docker 命令需要 root 权限才能运行。为了避免每次使用 Docker 命令时都需要加 sudo可以将当前用户添加到 docker 用户组中。以下是具体步骤 步骤 1创建 docker 组
如果系统中尚未创建 docker 组可以通过以下命令创建
sudo groupadd docker注意大多数情况下安装 Docker 时会自动创建 docker 组。如果已经存在此命令不会产生任何影响。 步骤 2将当前用户添加到 docker 组
将当前用户添加到 docker 组中以便无需 sudo 即可运行 Docker 命令
sudo usermod -aG docker $USER$USER 是当前登录用户的环境变量。如果你希望为其他用户添加权限请将 $USER 替换为实际的用户名。 步骤 3注销并重新登录
为了使组更改生效需要注销并重新登录系统。在注销之前请确保保存并关闭所有打开的应用程序然后执行以下命令
logout 或 exit重新登录后组成员身份将更新。 步骤 4可选立即激活组更改
如果你不想注销并重新登录可以通过以下命令在当前会话中立即激活组更改
newgrp docker步骤 5验证权限配置
运行以下命令验证是否成功将用户添加到 docker 组并确认无需 sudo 即可运行 Docker 命令
docker run hello-world如果一切正常你将看到类似以下的输出
Hello from Docker!
This message shows that your installation appears to be working correctly.注意事项
虚拟机环境如果你在虚拟机中运行 Linux可能需要重启虚拟机以使组更改完全生效。安全性将用户添加到 docker 组相当于赋予了该用户 root 权限因为 Docker 容器可以访问主机的资源。请谨慎操作尤其是在多用户环境中。 4. 配置 Docker 代理以登录 Docker Hub
在某些情况下Docker 的网络连接可能会受到防火墙或代理限制的影响尤其是在需要登录 Docker Hub 时如下所示。
docker login
USING WEB-BASED LOGIN
To sign in with credentials on the command line, use docker login -u username
Your one-time device confirmation code is: VGDP-KMZS
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate
Waiting for authentication in the browser…Error response from daemon: Get https://registry-1.docker.io/v2/ : net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)为了解决这些问题可以通过配置 Docker 的代理设置来确保网络请求能够正常通过。以下是具体操作步骤 1. 创建 Docker 服务目录和代理配置文件
首先我们需要创建一个专门用于存放 Docker 服务配置的目录并在其中添加代理配置文件。
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf2. 配置代理环境变量
在打开的 http-proxy.conf 文件中添加以下内容请根据实际代理地址和端口进行修改
[Service]
EnvironmentHTTP_PROXYhttp://127.0.0.1:7890
EnvironmentHTTPS_PROXYhttp://127.0.0.1:7890说明 HTTP_PROXY 和 HTTPS_PROXY 分别用于指定 HTTP 和 HTTPS 请求的代理地址。如果你的代理需要身份验证可以在地址中包含用户名和密码例如http://username:passwordproxy-server:port。 3. 重新加载配置并重启 Docker 服务
完成代理配置后需要重新加载 systemd 配置并重启 Docker 服务以使更改生效。
sudo systemctl daemon-reload
sudo systemctl restart docker4. 验证代理配置是否生效
为了确保代理配置已正确应用可以尝试登录 Docker Hub 或拉取镜像进行测试。
测试 1登录 Docker Hub
docker login -u your_username如果代理配置正确您应该能够成功登录而不会遇到网络超时或连接失败的问题。
测试 2拉取镜像
docker pull hello-world如果镜像能够顺利下载则说明代理配置已生效。 5. 可选排除特定地址的代理
如果您希望某些地址如本地镜像仓库或内网服务不通过代理访问可以在配置文件中添加 NO_PROXY 环境变量。例如
[Service]
EnvironmentHTTP_PROXYhttp://127.0.0.1:7890
EnvironmentHTTPS_PROXYhttp://127.0.0.1:7890
EnvironmentNO_PROXYlocalhost,127.0.0.1,.example.com说明 NO_PROXY 用于指定不需要通过代理访问的地址列表。地址可以是域名、IP 地址或通配符如 .example.com。 注意事项
代理地址的有效性确保代理地址和端口正确无误并且代理服务正在运行。安全性如果代理需要身份验证请确保用户名和密码的安全性避免泄露敏感信息。多用户环境在多用户环境中使用代理时请确保所有用户都能正确访问代理服务。 5. 解决 Docker 容器无法启动时的调试与修复方法
在使用 Docker 的过程中可能会遇到容器因某些错误而无法启动的情况。这种问题可能由配置文件错误、端口冲突、依赖缺失等原因引起 [[1]]。当 docker start 命令失败时您可能无法直接使用 docker exec 进入容器进行调试。不过以下几种方法可以帮助您快速定位并解决问题。 1. 查看容器日志
首先查看容器的日志是定位问题的关键步骤。通过日志您可以了解容器启动失败的具体原因例如配置文件错误、依赖服务未启动等。
docker logs container_name_or_id示例输出
Error: Port 8080 is already in use.如果日志显示端口被占用可以通过修改端口映射或清理占用端口的进程来解决问题 [[4]]。 2. 检查容器配置
使用 docker inspect 命令可以查看容器的详细配置信息包括启动命令、挂载的卷、环境变量等。这些信息有助于排查潜在问题。
docker inspect container_name_or_id查看启动命令
docker inspect container_id | grep Cmd如果发现启动命令有问题可以重新创建容器并指定正确的命令。 3. 使用临时容器挂载故障容器的卷
如果您的容器使用了数据卷来存储持久数据可以通过创建一个新的临时容器来挂载故障容器的数据卷并在其中进行调试。
docker run -it --volumes-from faulty_container --entrypoint /bin/bash image_name示例
docker run -it --volumes-from LuyeChat --entrypoint /bin/bash ubuntu--volumes-from 参数允许新容器挂载故障容器的数据卷。image_name 是与原容器相同或兼容的镜像例如 ubuntu。/bin/bash 是指定的入口点用于启动交互式终端。
在新容器中您可以访问和修改故障容器的文件系统。 4. 直接编辑容器文件系统
对于普通存储可以直接找到容器存储的文件系统通常位于 /var/lib/docker/overlay2/container_id/diff手动更改相关配置。
方法 1挂载容器的文件系统
通过挂载容器的文件系统路径到一个临时容器中您可以直接修改文件。
docker run -it --rm -v /var/lib/docker/overlay2/container_id/diff:/mnt ubuntu bash/var/lib/docker/overlay2/container_id/diff 是原容器的文件系统路径。/mnt 是新容器中挂载的目录。ubuntu 是一个基础镜像用于提供操作环境。
进入后您可以直接修改挂载的文件。
方法 2直接修改宿主机上的文件
如果您知道容器的文件存储位置可以直接在宿主机上修改文件。但请注意这种方法可能会导致不稳定性或数据丢失务必在备份的情况下进行操作 [[5]]。 5. 提交容器为镜像并重新启动
如果容器可以短暂启动即使很快退出可以将其保存为镜像然后基于该镜像启动一个新的容器进行调试。
docker commit container_id temp_image
docker run -it temp_image bash在新容器中您可以修改代码或配置文件。 6. 删除并重新创建容器
如果以上方法都无法解决问题可以考虑删除容器并重新创建。
docker rm container_id
docker run [options] image_name注意删除容器会导致容器内的数据丢失因此在删除前确保重要数据已备份。 避免类似问题的建议
为了避免未来再次出现类似问题可以采取以下措施
(1) 挂载代码目录
将代码目录挂载到宿主机上而不是直接打包到镜像中。这样可以在宿主机上修改代码而无需重新构建镜像或重启容器。
docker run -v /host/path/to/code:/container/path/to/code image_name(2) 分离启动逻辑
在容器的启动脚本中添加检查逻辑确保即使代码有问题容器也能进入调试模式。
#!/bin/bash
if [ ! -f /path/to/config ]; thenecho Config file not found, starting shell for debugging...exec /bin/bash
fi
exec your_service_command(3) 定期提交更改
如果您在容器内进行了大量修改定期使用 docker commit 将容器保存为镜像避免意外丢失数据。
docker commit container_id backup_imageDocker Compose 命令详解
命令描述docker compose version查看 Docker Compose 的版本信息适用于新版集成到 Docker CLI 的 Composedocker compose up创建并启动所有服务docker compose down停止并移除所有容器、网络和卷docker compose ps列出所有容器的状态docker compose logs查看容器的日志输出docker compose exec service_name command在运行中的容器内执行命令docker compose build构建或重新构建服务镜像如果你想强制重新构建可以使用 --no-cache 参数 docker compose build --no-cachedocker compose pull拉取服务所需的镜像docker compose push推送服务镜像到镜像仓库docker compose restart重启服务容器docker compose stop停止服务容器docker compose start启动服务容器docker compose rm移除已停止的服务容器 Docker Compose 常用选项
选项描述示例--file 或 -f指定 Compose 文件的路径。默认情况下Docker Compose 会在当前目录下寻找名为 docker-compose.yml 的文件。docker compose -f my-compose-file.yml up--project-name 或 -p指定项目的名称。默认情况下项目名称是基于当前目录的名称。docker compose -p my_project up--env-file指定环境变量文件。默认情况下Docker Compose 会读取 .env 文件中的环境变量。docker compose --env-file .myenv up--profile启用特定的配置文件profiles。Compose 文件中可以通过 profiles 定义不同的服务组。docker compose --profile dev up--progress设置进度输出的格式。支持的值包括 auto、tty、plain、json 和 quiet。docker compose --progress plain up 实战案例运行 Flask 应用
1. 启动容器
假设我们有一个 Flask 应用的镜像 edu/web_flask_server:V2我们可以使用以下命令启动容器
sudo docker run -it -p 8080:8080 --name web_flask edu/web_flask_server:V2 /bin/bash说明 -p 8080:8080将主机的 8080 端口映射到容器的 8080 端口。--name web_flask为容器指定名称。/bin/bash启动一个交互式终端。 重启策略
容器设置 always 策略确保应用在意外退出后能够自动恢复
sudo docker run -d -p 8080:8080 --name web_flask --restart always edu/web_flask_server:V2说明 --restart always确保容器在任何情况下都会自动重启。-d后台运行容器。 2. 进入容器
进入容器内部并启动 Flask 应用
docker exec -it web_flask /bin/bash -c python /work/web_flask/app.py说明 docker exec -it在运行中的容器内执行命令。/bin/bash -c python /work/web_flask/app.py启动 Flask 应用。 3. 制作启动脚本
为了方便操作可以创建脚本 start_webflask.sh
# start_webflask.sh
docker restart web_flask
docker exec -it web_flask /bin/bash -c python /work/web_flask/app.py4. 保存和加载镜像
在实际开发中可能需要将容器的状态保存为镜像或者将镜像导出为 .tar 文件进行备份或传输。
保存镜像
将镜像保存为 .tar 文件
docker save -o web_flask_server_V3.tar edu/web_flask_server:V2说明 -o指定输出文件名。edu/web_flask_server:V2要保存的镜像名称。 执行此命令后Docker 将会在当前工作目录下生成一个名为 web_flask_server_V3.tar 的文件。这个文件可以用于备份、传输或在其他计算机上加载为 Docker 镜像。 加载镜像
在目标计算机上加载 .tar 文件中的镜像
docker load -i web_flask_server_V3.tar说明 -i指定输入文件。加载完成后该镜像将出现在本地的 Docker 镜像列表中。 从容器创建新镜像
如果需要将容器的当前状态保存为一个新的镜像可以使用以下命令
docker commit -m 提交信息 -a 作者 web_flask edu/web_flask_server:V2说明 -m添加提交信息。-a指定作者信息。web_flask容器 ID 或名称。edu/web_flask_server:V2新生成的镜像名称。 执行此命令后Docker 会将容器的当前状态保存为一个新的镜像。这个镜像可以用于创建新的容器或分享给其他人使用。 5. 挂载目录
在运行容器时可以通过 -v 参数挂载本地目录到容器中以便实现数据持久化或共享文件
docker run -it -p 8080:8080 -v /host/path:/container/path --name web_flask edu/web_flask_server:V2 /bin/bash说明 -v /host/path:/container/path将主机的 /host/path 目录挂载到容器的 /container/path 目录。 6. 退出容器
完成操作后可以通过以下命令退出容器
exit参考链接
本文的内容参考了以下优质资源推荐读者进一步阅读以深入了解 Docker 的使用技巧和高级功能 Essential Docker Commands - Linux Handbook 提供了 Docker 常用命令的详细说明和示例。 Docker 安装指南 - Docker 官方文档 官方文档包含在 Ubuntu 上安装 Docker 的完整步骤。 Linux 中国 - Docker 入门与实践 针对初学者的 Docker 实践教程涵盖基础操作和常见问题解决。 More Essential Docker Commands - Linux Handbook 进一步扩展了 Docker 命令的使用场景和技巧。 2024年最新国内可用的Docker镜像加速器地址汇总 总结
通过本文的学习你应该已经掌握了 Docker 的基本安装、配置和使用方法。无论是管理镜像、启动容器还是解决常见问题Docker 都提供了强大的工具集来帮助我们简化开发流程。希望这篇指南能够为你的 Docker 之旅提供帮助
如果你有任何问题或建议欢迎在评论区留言交流