安装Docker及运行第一个容器httpd

一、练习环境

1、操作系统-CentOS 7.5版本(本机可上互联网)

2、Docker最流行的管理工具-DockerEngine

3、Docker默认的runtime-runc

二、Docker的安装

此处参考官网链接https://docs.docker.com/engine/install/centos/

也可参考:https://www.runoob.com/docker/ubuntu-docker-install.html

 

若已安装docker相关软件,请先卸载

yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine

 

Docker Engine软件包现在称为docker-ce

安装方法

您可以根据需要以不同的方式安装Docker Engine:

大多数用户会 设置Docker的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法。

一些用户下载并手动安装 RPM软件包, 并完全手动管理升级。这在诸如在无法访问互联网的空白系统上安装Docker的情况下很有用。

在测试和开发环境中,一些用户选择使用自动 便利脚本来安装Docker。

使用存储库安装

在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。

设置存储库

安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。

yum install -y yum-utils

 

yum-config-manager \

    --add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

 

安装DOCKER引擎

1、安装最新版本的Docker Engine和容器,或转到下一步以安装特定版本:

yum install docker-ce

 

Docker已安装但尚未启动。docker创建该组,但没有用户添加到该组。

2、要安装特定版本的Docker Engine,请在存储库中列出可用版本,然后选择并安装:

列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断:

yum list docker-ce --showduplicates | sort -r

尝试运行第一个容器

docker run -d -p 80:80 httpd

三、出现的问题

安装好docker-ce之后,运行第一个容器,报出问题

docker run -d -p 80:80 httpd

问题1:

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.

See 'docker run --help'.

可能原因:

Docker没起来,需启动docker服务

systemctl start docker

systemctl status docker

 

问题2:

再次执行出现问题报:使用docker获取镜像时,出现了镜像获取报错的问题

网络质量比较差导致的访问国外docker镜像源网站速度慢

docker:Error response from daemon: Get https://registry-1.docker.io/v2/library/httpd/manifests/latest: net/http: TLS handshake timeout.

 

解决方法1:

yum install bind-utils

dig @114.114.114.114 registry-1.docker.io

通过dig @114.114.114.114 registry-1.docker.io找到可用IP

 

修改/etc/hosts强制docker.io相关的域名解析到其它可用IP

54.164.50.37  registry-1.docker.io

 

测试:

docker search sameersbn

解决方法2:本人使用

新建或编辑docker默认的配置文件daemon.json

vi /etc/docker/daemon.json

{

"registry-mirrors":["http://hub-mirror.c.163.com","https://registry.docker-cn.com"]

}

记得重启docker服务

systemctl restart docker.service

Docker国内源说明:

Docker 官方中国区

https://registry.docker-cn.com

网易

http://hub-mirror.c.163.com

中国科技大学

https://docker.mirrors.ustc.edu.cn

阿里云

https://pee6w651.mirror.aliyuncs.com

再次运行第一个容器

docker run -d -p 80:80 httpd

指令执行过程:

1、从 Docker Hub 下载 httpd 镜像。镜像中已经安装好了 Apache HTTP Server。

2、启动 httpd 容器,并将容器的 80 端口映射到 host 的 80 端口。

通过浏览器验证容器是否正常工作。在浏览器中输入

http://本机IP地址

http://192.168.233.142/

可以正常访问web页面,成功运行了第一个容器 httpd

*****

送给在路上的你:

每一次的一小步都意味着成长中的一大步!

微信公众号连接:https://mp.weixin.qq.com/s/wCXbsH9acH_d11DWjWWZng

详情请了解,微信公众号

<think>我们正在运行一个Docker容器,其中运行httpd服务(Apache HTTP服务器)。由于容器本身是一个隔离的环境,重启服务的方式与在物理机或虚拟机上有所不同。以下是几种重启容器httpd服务的方法: ### 方法1:直接进入容器执行命令(交互式) 1. 使用`docker exec`进入容器: ```bash docker exec -it <容器名或ID> /bin/bash ``` 2. 在容器内部执行重启命令: ```bash # 对于使用Systemd的系统(CentOS 7+) systemctl restart httpd # 对于没有Systemd的容器(如基于Alpine或Debian的镜像),使用服务脚本 apachectl restart ``` 注意:很多容器为了轻量化,没有安装Systemd,因此第二种方式更通用。 ### 方法2:不进入容器直接执行命令(非交互式) ```bash docker exec <容器名或ID> apachectl restart ``` 或者如果容器内使用Systemd(较少见): ```bash docker exec <容器名或ID> systemctl restart httpd ``` ### 方法3:通过重启整个容器 如果上述方法无效,或者服务重启后仍无法恢复,可以选择重启整个容器: ```bash docker restart <容器名或ID> ``` 注意:这会重启整个容器,相当于重启容器内的所有进程。 ### 方法4:在Dockerfile中设置启动命令 确保在构建镜像时,通过Dockerfile的`CMD`或`ENTRYPOINT`正确设置httpd的启动方式。例如: ```Dockerfile CMD ["apachectl", "-D", "FOREGROUND"] ``` 这样,当容器启动时,httpd会以前台方式运行。此时,重启容器(方法3)就会重新启动httpd。 ### 验证服务状态 重启后,可以检查httpd是否正常运行: ```bash # 进入容器检查 docker exec -it <容器名或ID> apachectl status # 或直接查看进程 docker exec <容器名或ID> ps aux | grep httpd ``` ### 注意事项 1. **容器内服务重启的局限性**:容器内的服务重启可能会因为权限问题、配置错误等原因失败。如果服务重启失败,建议查看容器内的错误日志: ```bash docker logs <容器名或ID> ``` 或者进入容器查看Apache错误日志(通常位于`/var/log/httpd/error_log`)。 2. **容器设计原则**:通常,容器被设计为运行单个进程,并且该进程应该在前台运行。因此,推荐使用`apachectl -DFOREGROUND`方式运行httpd,这样容器生命周期与httpd进程绑定,重启容器即可重启服务。 3. **避免在容器内使用Systemd**:由于Systemd需要特权运行,且增加了容器复杂度,大多数官方镜像(如`httpd`官方镜像)都不使用Systemd。因此,建议使用`apachectl`命令管理服务。 ### 示例:重启名为`my_web`的容器内的httpd服务 ```bash # 方法2:直接重启httpd docker exec my_web apachectl restart # 如果失败,查看日志 docker exec my_web tail -f /var/log/httpd/error_log # 最后手段:重启整个容器 docker restart my_web ``` ### 相关问题 1. 如何查看Docker容器运行的进程? 2. Docker容器中如何配置Apache虚拟主机? 3. 如何让Docker容器httpd服务崩溃时自动重启? 4. 如何调试容器内Apache服务启动失败的问题? 5. 容器内Apache服务无法访问的可能原因有哪些? 6. 如何将宿主机的配置文件同步到容器内并重启httpd服务? > 提示:如果容器内没有`apachectl`命令,可以尝试使用`httpd`命令,如`httpd -k restart`。具体命令取决于镜像中Apache的安装方式。</think>### 🔧 在 Docker 容器中重启 HTTPD 服务的完整指南 #### ⚠️ 重要前提 在 Docker 容器中重启服务时,需注意: 1. 容器通常设计为单一进程模型(HTTPD 即主进程) 2. 直接重启服务可能不如重启容器有效 3. 推荐使用 Docker 原生方式操作容器 --- ### 🔄 方法 1:直接重启 HTTPD 服务(推荐) 适用于服务未崩溃的情况: ```bash # 进入容器 docker exec -it 容器名或ID /bin/bash # 重启 HTTPD 服务 apachectl restart # 或使用 systemd(如容器支持) systemctl restart httpd ``` --- ### 🔄 方法 2:通过重启容器实现 最可靠的方式(确保容器正确配置了自动启动 HTTPD): ```bash # 重启容器(服务会随容器启动自动运行docker restart 容器名或ID # 验证状态 docker ps -a | grep 容器名 ``` --- ### 🔄 方法 3:重建容器(配置变更后) 修改配置后需要重建容器: ```bash # 停止容器 docker stop 容器名 # 删除容器 docker rm 容器名 # 重建容器(使用相同镜像和配置) docker run -d --name 容器名 \ -p 80:80 \ -v /path/config:/etc/httpd/conf \ 镜像名 ``` --- ### 🔄 方法 4:通过 Dockerfile 持久化配置 在 Dockerfile 中设置 HTTPD 自动启动: ```Dockerfile FROM centos:7 # 安装 Apache RUN yum install -y httpd # 设置启动命令(关键!) CMD ["apachectl", "-D", "FOREGROUND"] # 暴露端口 EXPOSE 80 ``` 构建并运行: ```bash docker build -t my-httpd . docker run -d --name httpd-container -p 8080:80 my-httpd ``` --- ### ⚠️ 常见问题解决 1. **服务未自动启动**: ```bash # 检查 Dockerfile CMD 指令 docker inspect 容器名 | grep -A 5 Cmd # 临时启动服务 docker exec 容器名 apachectl start ``` 2. **配置错误导致启动失败**: ```bash # 查看容器日志 docker logs 容器名 # 调试模式启动 docker run -it --rm 镜像名 apachectl -t ``` 3. **端口冲突**: ```bash # 检查端口占用 docker ps --format "table {{.Names}}\t{{.Ports}}" # 更改映射端口 docker run -d -p 8080:80 ... ``` --- ### 📊 HTTPD 容器管理速查表 | 操作 | 命令 | 适用场景 | |------|------|----------| | 重启服务 | `docker exec 容器名 apachectl restart` | 配置热更新 | | 重启容器 | `docker restart 容器名` | 服务无响应 | | 查看日志 | `docker logs -f 容器名` | 排错 | | 进入容器 | `docker exec -it 容器名 /bin/bash` | 手动调试 | | 重建容器 | `docker-compose up -d --force-recreate` | 配置变更 | --- ### 📚 相关问题 1. 如何配置 Docker 容器中的 HTTPD 虚拟主机? 2. 容器重启后 HTTPD 服务无法自动启动怎么办? 3. 如何将宿主机的配置文件同步到 Docker 容器中的 HTTPD? 4. 如何监控 Docker 容器HTTPD 服务的运行状态? 5. Docker 容器与虚拟机运行 HTTPD 的性能差异有哪些?[^5] 6. 如何解决容器HTTPD 服务的权限问题(SELinux)? 7. 容器HTTPD 的最佳安全实践有哪些? > 提示:使用 `docker-compose` 管理服务可简化操作流程[^2]。对于生产环境,建议使用 `docker-compose restart` 命令,它能确保服务按依赖顺序重启。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值