Docker 入门与应用程序容器化实践
实验环境Kali GNU/Linux 2024.4Docker CE应用示例docker/getting-started-app一、安装并配置 Docker1. 添加 Docker 官方源Kali 基于 Debian这里使用 Debian bookworm 的 Docker 源sudomkdir-p/etc/apt/keyringscurl-fsSLhttps://download.docker.com/linux/debian/gpg|\sudogpg--dearmor-o/etc/apt/keyrings/docker.gpgechodeb [archamd64 signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable|\sudotee/etc/apt/sources.list.d/docker.list2. 安装 Docker CE更新软件源并安装sudoaptupdatesudoaptinstall-ydocker-ce docker-ce-cli containerd.io3. 启动并设置开机自启sudosystemctlenabledocker--now4. 将当前用户加入 docker 组这样后续使用 Docker 时不必每次都加sudosudousermod-aGdocker$USERnewgrpdocker如果组权限未立即生效可以重启 Docker 服务sudosystemctl restartdocker5. 验证安装运行官方测试镜像sudodockerrun hello-world如果看到 “Hello from Docker!” 之类的输出说明 Docker 已安装成功。二、Docker 基础操作1. 拉取镜像从镜像仓库拉取 Ubuntu 镜像dockerpull ubuntu2. 列出本地镜像dockerimages输出中可以看到仓库、标签、镜像 ID、创建时间和大小等信息。3. 查看镜像详细信息dockerinspect ubuntu该命令会输出 JSON 格式的镜像元数据包括镜像 ID、创建时间、环境变量、默认命令、架构、大小等。4. 创建并后台运行容器dockerrun-itdubuntu /bin/bash-i保持标准输入打开-t分配伪终端-d后台运行命令执行后会返回容器 ID。5. 列出正在运行的容器dockerps可以看到容器 ID、使用的镜像、启动命令、创建时间、状态、端口和名称。6. 停止容器dockerstopcontainer_id再次执行docker ps可以看到该容器已不在运行列表中。7. 启动已停止的容器dockerstartcontainer_id8. 查看容器日志dockerlogscontainer_id9. 进入容器 Shelldockerexec-itcontainer_id/bin/bash进入后可以在容器内部执行命令例如查看当前目录、安装软件等。10. 查看容器详细信息dockerinspectcontainer_id这里会显示容器的网络、挂载、配置、状态等信息。其中比较有用的包括容器 IP 地址网关网络模式挂载点环境变量启动命令11. 删除容器dockerrmcontainer_id如果容器仍在运行需要先停止再删除dockerstopcontainer_iddockerrmcontainer_id三、将应用程序容器化下面以一个 Node.js 待办事项应用为例演示如何把应用程序打包成 Docker 镜像并运行。1. 下载应用源代码gitclone https://github.com/docker/getting-started-app.gitcdgetting-started-appls-la目录中通常包含package.json README.md spec/ src/ yarn.lock2. 编写 Dockerfile在getting-started-app目录下与package.json同级位置创建DockerfiletouchDockerfile写入以下内容FROM registry.cn-beijing.aliyuncs.com/cuccs/node:18-alpine WORKDIR /app COPY . . RUN npm install -g node-gyp RUN yarn install --production CMD [node, src/index.js] EXPOSE 3000说明FROM指定基础镜像这里使用 Node.js 18 Alpine 版本体积较小。WORKDIR设置容器内工作目录。COPY把当前目录内容复制到镜像的/app。RUN构建镜像时执行的安装命令。CMD容器启动时默认执行的命令。EXPOSE声明应用监听 3000 端口。3. 构建镜像确保当前目录在getting-started-app下pwd然后构建镜像dockerbuild-tgetting-started.-t getting-started给镜像命名为getting-started.表示使用当前目录的 Dockerfile4. 启动应用程序容器使用docker run启动容器并将宿主机 3000 端口映射到容器 3000 端口dockerrun-dp127.0.0.1:3000:3000 getting-started-d后台运行-p 127.0.0.1:3000:3000把宿主机的 127.0.0.1:3000 映射到容器 3000 端口5. 访问应用打开浏览器访问http://localhost:3000如果一切正常可以看到待办事项应用页面并可以添加、完成、删除项目。6. 查看运行中的容器dockerps输出中应能看到getting-started镜像对应的容器以及端口映射信息127.0.0.1:3000-3000/tcp四、常用命令速查功能命令拉取镜像docker pull image查看本地镜像docker images查看镜像详情docker inspect image创建并运行容器docker run -itd image /bin/bash查看运行中容器docker ps查看所有容器docker ps -a停止容器docker stop container启动容器docker start container查看日志docker logs container进入容器docker exec -it container /bin/bash删除容器docker rm container构建镜像docker build -t name .端口映射运行docker run -dp 宿主机端口:容器端口 image五、总结Docker 把应用及其依赖打包进镜像使应用可以在不同环境中以一致的方式运行。本文完成了三件事安装与配置 Docker添加官方源、安装 Docker CE、启动服务、配置用户组。掌握基础命令拉取镜像、查看镜像、运行容器、停止/启动容器、查看日志、进入容器、删除容器。应用程序容器化编写 Dockerfile、构建镜像、启动容器并通过浏览器验证应用。实际使用中还应注意使用.dockerignore排除不必要文件尽量使用体积小、安全性高的基础镜像不要把密码、密钥等敏感信息写入镜像生产环境避免使用latest标签建议固定版本容器不要以 root 用户运行必要时创建普通用户定期更新基础镜像减少已知漏洞。