2026/10/31 9:55:05

Docker部署Ubuntu22.04容器全指南

Docker部署Ubuntu22.04容器全指南 1. Docker与Ubuntu22.04部署概述在当今的开发和运维环境中容器化技术已经成为不可或缺的一部分。Docker作为最流行的容器平台之一能够帮助我们快速部署和运行各种应用环境。而Ubuntu 22.04 LTSJammy Jellyfish作为最新的长期支持版本提供了稳定的基础系统环境。将两者结合使用可以为我们提供一个轻量级、可移植且一致的开发或生产环境。与传统的虚拟机相比Docker容器更加轻量启动速度更快资源占用更少。通过Docker部署Ubuntu 22.04我们可以在几秒钟内获得一个干净的Ubuntu系统环境而不需要像传统方式那样进行完整的系统安装。这对于需要频繁创建和销毁测试环境的开发者来说尤其有价值。2. 环境准备与Docker安装2.1 系统要求检查在开始之前我们需要确保主机系统满足运行Docker的基本要求64位操作系统x86_64或arm64架构Linux内核版本3.10或更高推荐4.x或更高对于Windows和macOS用户需要安装Docker Desktop可以通过以下命令检查Linux内核版本uname -r2.2 Docker引擎安装对于Ubuntu/Debian系统官方推荐的安装方式如下首先更新软件包索引sudo apt-get update安装必要的依赖包sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release添加Docker官方GPG密钥sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg设置稳定版仓库echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null安装Docker引擎sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin验证安装是否成功sudo docker run hello-world如果看到Hello from Docker!的消息说明安装成功。注意在生产环境中建议将用户添加到docker组以避免每次都需要sudo但要注意这会有安全风险sudo usermod -aG docker $USER3. 获取Ubuntu 22.04 Docker镜像3.1 官方镜像介绍Docker Hub上提供了官方维护的Ubuntu镜像这些镜像经过优化体积较小且安全可靠。Ubuntu 22.04的官方镜像标签为ubuntu:22.04或ubuntu:jammy。3.2 拉取Ubuntu 22.04镜像使用以下命令拉取最新的Ubuntu 22.04镜像docker pull ubuntu:22.04拉取完成后可以使用以下命令查看已下载的镜像docker images输出应该类似于REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 22.04 a8780b506fa4 2 weeks ago 77.8MB可以看到官方Ubuntu 22.04镜像非常精简只有约78MB大小。3.3 验证镜像完整性为了确保下载的镜像没有被篡改可以验证其签名docker trust inspect --pretty ubuntu:22.04输出中应该显示Signatures for部分确认镜像已经过官方签名。4. 运行Ubuntu 22.04容器4.1 基本运行方式最简单的运行命令是docker run -it ubuntu:22.04这将以交互模式(-i)启动容器并分配一个伪终端(-t)。你会看到root用户的提示符表示已经进入了容器内部。4.2 常用运行参数在实际使用中我们通常会添加一些参数来增强容器的功能后台运行容器docker run -d --name my_ubuntu ubuntu:22.04 sleep infinity映射主机端口到容器docker run -p 8080:80 ubuntu:22.04挂载主机目录到容器docker run -v /host/path:/container/path ubuntu:22.04设置环境变量docker run -e MY_VARvalue ubuntu:22.04限制资源使用docker run --memory512m --cpus1 ubuntu:22.044.3 容器管理命令掌握基本的容器管理命令对于日常使用非常重要查看运行中的容器docker ps查看所有容器包括停止的docker ps -a停止容器docker stop container_id启动已停止的容器docker start container_id进入运行中的容器docker exec -it container_id bash删除容器docker rm container_id删除镜像docker rmi image_id5. 自定义Ubuntu 22.04容器5.1 基础系统配置默认的Ubuntu 22.04镜像非常精简很多常用工具都没有安装。我们可以先进行基础配置更新软件包列表apt-get update安装常用工具apt-get install -y \ curl \ wget \ vim \ git \ net-tools \ iputils-ping \ dnsutils设置时区可选ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime DEBIAN_FRONTENDnoninteractive apt-get install -y tzdata5.2 创建自定义镜像为了复用这些配置我们可以基于修改后的容器创建新的镜像首先在修改后的容器中退出但不要停止容器使用commit命令创建新镜像docker commit container_id my-ubuntu:22.04更好的方式是使用Dockerfile来自动化这个过程FROM ubuntu:22.04 RUN apt-get update \ apt-get install -y \ curl \ wget \ vim \ git \ net-tools \ iputils-ping \ dnsutils \ rm -rf /var/lib/apt/lists/* RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ DEBIAN_FRONTENDnoninteractive apt-get install -y tzdata CMD [bash]然后构建镜像docker build -t my-ubuntu:22.04 .5.3 优化镜像大小为了保持镜像精简有几个最佳实践合并RUN命令减少镜像层清理apt缓存rm -rf /var/lib/apt/lists/*使用多阶段构建对于需要编译的环境选择更小的基础镜像如ubuntu:22.04比ubuntu:latest更明确6. 常见问题与解决方案6.1 容器内systemd服务无法启动Ubuntu 22.04默认使用systemd但在Docker容器中直接运行systemd会遇到问题。解决方案运行容器时添加特权模式docker run --privileged -it ubuntu:22.04或者在Dockerfile中使用init系统替代RUN apt-get install -y dumb-init ENTRYPOINT [/usr/bin/dumb-init, --]6.2 时区设置问题容器内的时区默认是UTC要设置为本地时区ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone6.3 中文支持如果需要中文支持RUN apt-get install -y locales \ locale-gen zh_CN.UTF-8 \ update-locale LANGzh_CN.UTF-8 ENV LANG zh_CN.UTF-8 ENV LANGUAGE zh_CN:zh ENV LC_ALL zh_CN.UTF-86.4 容器网络配置查看容器网络信息docker inspect container_id | grep IPAddress连接容器网络docker network create my_network docker run --networkmy_network ubuntu:22.047. 高级部署场景7.1 使用Docker Compose编排对于复杂应用可以使用docker-compose.yml文件定义服务version: 3 services: ubuntu_service: image: ubuntu:22.04 container_name: my_ubuntu volumes: - ./data:/data ports: - 8000:80 environment: - TZAsia/Shanghai restart: unless-stopped然后运行docker-compose up -d7.2 持久化数据管理Docker容器默认是临时的要持久化数据可以使用绑定挂载Bind Mountsdocker run -v /host/path:/container/path ubuntu:22.04卷Volumesdocker volume create my_volume docker run -v my_volume:/container/path ubuntu:22.047.3 容器资源限制在生产环境中限制容器资源使用非常重要docker run \ --memory512m \ --cpus1 \ --cpu-shares512 \ --blkio-weight500 \ ubuntu:22.047.4 容器监控与日志查看容器日志docker logs container_id监控容器资源使用docker stats使用cAdvisor进行高级监控docker run \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --detachtrue \ --namecadvisor \ google/cadvisor:latest8. 安全最佳实践8.1 非root用户运行默认情况下容器以root用户运行这有安全风险。更好的做法在Dockerfile中创建用户RUN useradd -ms /bin/bash appuser USER appuser或者运行时指定用户docker run -u 1000 ubuntu:22.048.2 只读文件系统对于不需要写入的容器可以设置为只读docker run --read-only ubuntu:22.04对于需要写入的特定目录可以单独挂载docker run --read-only -v /path/to/writable:/data ubuntu:22.048.3 安全扫描定期扫描镜像中的漏洞docker scan ubuntu:22.048.4 网络隔离限制容器的网络访问docker network create --internal isolated_network docker run --networkisolated_network ubuntu:22.049. 性能优化技巧9.1 镜像构建优化利用构建缓存将不经常变化的指令放在Dockerfile前面使用.dockerignore文件排除不必要的文件多阶段构建减少最终镜像大小9.2 容器运行时优化限制资源使用如前所述使用--tmpfs挂载临时文件系统docker run --tmpfs /tmp ubuntu:22.04调整swappinessdocker run --memory-swappiness0 ubuntu:22.049.3 存储驱动选择根据主机环境选择合适的存储驱动overlay2, aufs, devicemapper等可以通过以下命令查看当前驱动docker info | grep Storage Driver10. 实际应用案例10.1 开发环境容器化创建一个Python开发环境FROM ubuntu:22.04 RUN apt-get update \ apt-get install -y python3 python3-pip \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt CMD [python3]10.2 数据库服务部署部署MySQL服务docker run -d \ --name mysql_server \ -e MYSQL_ROOT_PASSWORDmysecretpassword \ -e MYSQL_DATABASEmyapp \ -e MYSQL_USERuser \ -e MYSQL_PASSWORDpassword \ -v mysql_data:/var/lib/mysql \ -p 3306:3306 \ ubuntu:22.04 \ sh -c apt-get update apt-get install -y mysql-server service mysql start tail -f /dev/null10.3 Web服务部署部署Nginx web服务器FROM ubuntu:22.04 RUN apt-get update \ apt-get install -y nginx \ rm -rf /var/lib/apt/lists/* \ echo daemon off; /etc/nginx/nginx.conf EXPOSE 80 CMD [nginx]构建并运行docker build -t my-nginx . docker run -d -p 8080:80 my-nginx