如何在 Docker 容器中安装、运行和删除应用程序(第 2 部分)
继上一篇Docker文章之后,本教程将讨论如何将 Docker 容器保存到新镜像中、删除容器以及在容器内运行Nginx Web 服务器。
要求
如何运行和保存 Docker 容器
1.在此示例中,我们将运行并保存一个基于 Ubuntu 的Docker 容器,其中将安装Nginx服务器。但在对容器进行任何更改之前,请先使用以下命令启动容器,以更新并将Nginx守护程序安装到 Ubuntu 映像中:
# docker run ubuntu bash -c "apt-get -y update" # docker run ubuntu bash -c "apt-get -y install nginx"
如果出现错误“ E:无法找到包 nginx ”,则需要使用交互式 CLI 连接到容器并按所示安装 nginx。
# docker run -it ubuntu bash # apt install nginx # exit
2.接下来,安装Nginx包后,发出命令docker ps -l
获取正在运行的容器的ID或名称。
# docker ps -l
并通过运行以下命令应用更改:
# docker commit 5976e4ae287c ubuntu-nginx
这里,5976e4ae287c
代表容器ID
,ubuntu-nginx
代表已保存并提交更改的新镜像的名称。
为了查看新图像是否已成功创建,只需运行docker images
命令,然后会显示所有已保存图像的列表。
# docker images
有可能容器内的安装过程很快完成,导致容器未运行(容器已停止)。在这种情况下,命令docker ps
不会显示任何输出,因为没有容器正在运行。
为了能够仍然获取容器的 id,运行docker ps -a | head -3
以输出最近的容器并根据创建容器时发出的命令和退出状态来识别容器。
3.或者,您可以通过运行docker run -it ubuntu bash
命令主动进入容器会话并执行后续apt-get install nginx
命令。在命令运行时,使用Ctrl-p + Ctrl-q
密钥与容器分离,即使 Nginx 安装过程完成,容器仍将继续运行。
# docker run -it ubuntu bash # apt-get install nginx
然后,使用 获取正在运行的容器 IDdocker ps
并提交更改。完成后,使用 重新进入容器控制台docker attach
并输入exit
以停止容器。
# docker ps # docker attach 3378689f2069 # exit
4.为了进一步测试最近的图像是否已正确提交(在本例中已安装Nginx服务),请执行以下命令以生成一个新容器,如果 Nginx 二进制文件已成功安装,它将输出:
# docker run ubuntu-nginx whereis nginx
5.要删除容器,请使用rm
针对容器 ID 或名称的命令,可以使用以下docker ps -a
命令获取:
# docker ps -a # sudo docker rm 36488523933a
如何在 Docker 容器内运行 Nginx
6.在本部分中,我们将集中介绍如何使用之前创建的安装了 Nginx 守护程序的映像,在 Docker 内部运行和访问网络服务(例如Nginx Web 服务器)。ubuntu-nginx
您需要做的第一件事是创建一个新容器,映射主机容器端口,然后通过发出以下命令进入容器 shell:
# docker run -it -p 81:80 ubuntu-nginx /bin/bash # nginx &
此处,该-p
选项将主机端口公开给容器端口。虽然主机端口可以是任意的,但前提是它应该可用(其他主机服务不应侦听它),容器端口必须正是内部守护程序正在侦听的端口。
一旦连接到容器会话,请在后台启动NginxCtrl-p + Ctrl-q
守护程序并通过按键与容器控制台分离。
7.现在,运行docker ps
以获取正在运行的容器的状态。您还可以通过发出以下命令来查看主机网络套接字:
# docker ps OR # netstat -tlpn
8.为了访问 Nginx 容器提供的页面,请从 LAN 中的远程位置打开浏览器,并使用 HTTP 协议输入您的机器的 IP 地址。
9.要停止容器,请运行以下命令,后跟容器 ID 或名称:
# docker ps # docker stop fervent_mccarthy # docker ps
作为停止正在运行的容器的另一种方法,请进入容器 shell 命令提示符并输入 exit 以完成进程:
# docker attach fervent_mccarthy # exit
请注意,使用此类容器运行 Web 服务器或其他类型的服务最适合开发目的或测试,因为服务仅在容器运行时才处于活动状态。退出容器会中断所有正在运行的服务或所做的任何更改。
进一步阅读: