1. OS Docker
目前常用的Linux发行版主要包括Debian/Ubuntu
系列和CentOS/Fedora
系列。前者以自带软件包版本较新而出名;后者则宣称运行更稳定一些。
本节将介绍如何使用BusyBox、Alpine、Ubuntu、CentOS
等操作系统。
1.1 BusyBox
BusyBox的磁盘大小在1~5MB
,空间非常节省。它是在GNU GPL许可下发布的开源软件,享有"嵌入式Linux
的瑞士军刀"美誉。它将许多常见UNIX实用程序的微型版本组合成一个小型可执行文件。它可以替代GNU fileutils、shellutils
等工具包中的大多数使用程序。虽然BusyBox中的实用程序通常比它们的全功能GNU"表亲"有更少的选择,但其所包含的选项提供了预期的功能,并且行为与GNU对应的程序非常相似。BusyBox为小型或嵌入式系统提供了相当完整的环境。
1.2 Alpine
Alpine Linux是一个围绕Musl LibC和BusyBox构建的Linux发行版。该镜像的大小仅为5MB
,可以访问比其他基于BusyBox的镜像更完整的软件包存储
。这使得Alpine Linux成为开发应用程序甚至生产应用程序的绝佳基础镜像。其运行命令如下:
bash
$ docker run alpine echo alpine
Alpine Linux可以像使用任何其他基础镜像一样使用:
bash
FROM alpine:3.14
RUN apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]
此示例的虚拟镜像大小约为36.8MB,与最小的Ubuntu大约145MB的虚拟镜像大小相比,小很多。
bash
FRON ubuntu:20.04
RUN apt-get update \
&& apt-get install -y --no-install-recommands mysql-client \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["mysql"]
1.3 Ubuntu
Ubuntu是一个基于Debian的Linux操作系统,使用场景广阔,从桌面应用到云应用,再到物联网场景的应用。它是世界上跨公有云
和OpenStack云
最受欢迎的操作系统,也是容器
的头号平台,从Docker到Kubernetes再到LXD,Ubuntu可以大规模运行用户的容器。
快速运行Ubuntu的命令如下:
bash
$ docker run -it ubuntu:22.04 /bin/bash
1.4 CentOS
CentOS Linux是一个社区支持的发行版,源自红帽公司免费向公众提供的资源,适用于红帽企业Linux(RHEL)。因此,CentOS linux的目标是在功能上与RHEL兼容。
安装运行CentOS的命令如下:
bash
$ docker run -it centos bash
2. Web服务应用
本节介绍如何使用Docker来运行常见的Web服务器(Apache、Nginx)
2.1 Apache
Apache HTTP服务器俗称Apache,是一个Web服务器应用程序,此镜像仅包含具有上游默认值的Apache httpd。没有安装php,但扩展不难。
运行一个简单的HTML服务器,在项目中创建一个Dockerfile:
bash
FROM httpd:2.4
2.2 Nginx
Nginx(发音engine-x)适用于HTTP、HTTPS、SMTP、POP3和IMAP的开源反向代理服务器,也是负载平衡器、HTTP缓存和Web服务器。
Docker直接运行Nginx容器:
bash
$ docker run -d -p 8081:80 --name webserver nginx
3. 数据库应用
3.1 MySQL
bash
$ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 mysql
$ docker exec -it mysql-test bash
bash-4.4# mysql -u root -p
...
mysql>
3.2 Redis
bash
$ docker run -itd --name redis-test -p 6379:6379 redis
$ docker exec -it redis-test bash
root@f952a431366f:/data# redis-cli
127.0.0.1:6379> set test 1
OK
127.0.0.1:6379>
3.3 MongoDB
bash
$ docker run -itd --name mongo -p 27017:27017 mongo --auth
$ docker exec -it mongo mongosh admin
4. 编程应用
4.1 Java
bash
FORM java:7
4.2 Python
bash
FROM python:3