Docker 高级应用 - 智能添加与修改防火墙规则
以下是围绕这个问答内容,完善且全面的答案:
在 Docker 中应用防火墙规则可以保障应用系统在不同网络环境下高效安全地传输数据。Docker 高级应用主要涉及到如何配置并使用 Docker Swarm 和 Docker Compose 来添加与修改防火墙规则。
Docker Swarm 默认使用 firewalld 进行网络功能管理,可以使用以下命令进行基本配置:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
首先安装 firewalld-tools 包,以便我们可以使用更多高级特性进行配置:
sudo yum install firewalld-tools
在 Dockerfile 中添加防火墙规则可以提高应用容器启动的安全性。例如,添加规则防止所有 HTTP 请求:
FROM nginx:1.21.6
COPY default.conf /etc/nginx/conf.d/default.conf
COPY 404.html /usr/share/nginx/html/404.html
CMD [ "nginx", "-g", "daemon off;"]
从上面的配置可以看到,我们在 Dockerfile 中创建了一个 Nginx 容器,并将其启动。我们将 default.conf 和 404.html 文件放入容器的 /etc/nginx/conf.d/
目录下作为默认配置文件。我们还添加了一个自定义的网络容器规则:
FROM ubuntu:22.04
RUN apt update && apt install -y gnupg curl --no-install-recommends && curl -s https://packages.sury.org/php/apt.gpg | apt-key add - && echo "deb https://packages.sury.org/php/ $(lsb\_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list && apt update && apt install -y php libpq-dev pecl-http php-http
RUN mkdir /app
WORKDIR /app
COPY . .
RUN pecl install --all-versions apcu && docker-php-ext-enable apcu && docker-php-ext-install pdo_mysql zip
EXPOSE 80 443
CMD docker-php-entrypoint [ "sh", "-c", "while true; do echo '[ $(date +"%Y-%m-%d %H:%M:%S")]:$RANDOM'; /app/bin/php artisan queue:work &>/dev/null && break; done;"]
Docker Compose 提供了创建和配置多个 Docker 容器的简便方法。通过添加自定义的防火墙规则,我们可以轻松地在 Docker Compose 中管理和添加规则。
首先安装 Docker Compose:
sudo docker-compose up -d
在 Docker Compose 文件中定义防火墙规则:
version: '3'
services:
app:
depends_on:
- db
ports:
- "3000:3000"
environment:
- DB_HOST=db
在 Compose 文件定义中,我们使用 depends_on
约束来确保容器之间正确协作:
version: '3'
services:
node:
image: node:16-alpine
ports:
- "4200:80"
environment:
- PORT_80_TCP=http
database:
image: mysql:5.7
ports:
- "5401:3306"
environment:
- MYSQL_DATABASE=docker_db
- MYSQL_HOST=mysql
setiops:
image: postgres:latest
ports:
- "5432:5432"
environment:
POSTGRES\_PASSWORD: docker
在主 Compose 文件中使用 ports
来连接容器:
version: '3'
services:
app:
ports:
- "3000
领取专属 10元无门槛券
手把手带您无忧上云