Docker 容器核心知识总结

Docker 容器核心知识总结

一、Docker 容器基础概念

  • 本质:容器是一个运行中的进程,通过封装功能实现与主机、其他容器的隔离,核心隔离特性是 "专用文件系统"
  • 文件系统来源:由 Docker 镜像提供,镜像包含应用运行所需的代码、二进制文件、依赖及文件系统对象
  • 镜像与容器关系:类似 "类与实例",镜像是静态的定义模板,容器是镜像运行时的实体,可进行创建、启动、停止等生命周期管理

二、Docker 容器核心操作

(一)容器创建与启动

操作场景 命令及示例 关键说明
1. 仅创建(停止状态) docker create -it [镜像名:标签]示例:docker create -it centos:7 -i:保持容器标准输入打开;-t:分配伪终端;创建后用docker ps -a查看
2. 启动已创建容器 docker start [容器ID/名称]示例:docker start 8a6831bba185 启动后用docker ps查看运行中的容器
3. 创建并直接启动 docker run -it [镜像名:标签] [命令]示例:docker run -it centos:7 /bin/bash 等价于 "docker create + docker start";退出交互终端(如exit)后,容器自动停止(因应用进程结束)

(二)容器停止与暂停

操作类型 命令及示例 状态变化
1. 暂停运行中容器 docker pause [容器ID/名称]示例:docker pause 8a6831bba185 容器状态变为 "Up (Paused)",暂停后可恢复
2. 恢复暂停容器 docker unpause [容器ID/名称]示例:docker unpause 8a6831bba185 容器恢复为 "Up"(正常运行状态)
3. 终止运行中容器 docker stop [容器ID/名称]示例:docker stop 8a6831bba185 容器状态变为 "Exited";可通过docker container prune清理所有停止状态的容器

(三)进入运行中容器

进入容器需先确保容器后台运行(启动时加-d参数),两种方式对比:

进入方式 命令及示例 优缺点
docker attach 示例:docker attach httpd(httpd 为容器名) 缺点 :退出终端(如exit)会导致容器停止,不推荐使用
docker exec docker exec -it [容器ID/名称] [命令]示例:docker exec -it httpd /bin/bash 优点 :退出终端不影响容器运行,是推荐的进入方式;-it参数确保交互性

(四)容器删除

删除场景 命令及示例 限制与说明
1. 删除停止状态容器 docker rm [容器ID/名称]示例:docker rm httpd 默认仅能删除 "Exited" 状态的容器;需先通过docker stop停止运行中容器
2. 强制删除运行中容器 docker rm -f [容器ID/名称]示例:docker rm -f httpd -f参数跳过 "停止" 步骤,直接删除运行中的容器,谨慎使用

(五)容器导入与导出(跨系统迁移)

操作类型 命令及示例 关键说明
1. 导出容器(生成压缩包) docker export -o [输出文件名.tar] [容器ID/名称]示例:docker export -o test_httpd.tar 55c631353b28 支持导出 "运行中" 或 "停止中" 的容器;-o可替换为重定向符号>(如docker export 55c631353b28 > test.tar
2. 导入容器(生成镜像) docker import [压缩包名] [新镜像名:标签]示例:docker import test_httpd.tar mytest:cy 导入后生成新镜像,需基于新镜像创建容器才能使用(导入的是 "文件系统快照",非完整容器状态)

三、Docker 容器应用操作

(一)容器端口映射(外部访问容器服务)

用于将容器内端口映射到宿主机端口,实现外部(如浏览器)访问容器中的服务(如 Web 服务),两种映射方式:

映射类型 命令及示例 效果示例
1. 随机端口映射 docker run -itd -P [镜像名:标签]示例:docker run --name httpd -itd -P httpd:latest -P:将容器暴露端口(如 80)随机映射到宿主机端口(如 49154);用docker ps查看映射结果(如0.0.0.0:49154->80/tcp
2. 指定端口映射 docker run -itd -p [宿主机端口]:[容器端口] [镜像名:标签]示例:docker run --name httpd2 -itd -p 8080:80 httpd:latest -p:手动指定宿主机端口(如 8080)映射到容器端口(如 80);外部可通过 "宿主机 IP:8080" 访问容器服务

(二)容器日志与详情查看

操作需求 命令及示例 输出内容
1. 查看容器日志 docker logs [容器ID/名称]示例:docker logs httpd2 显示容器所有日志(如服务启动信息、访问记录),示例中包含 Apache 启动日志、HTTP 请求日志
2. 查看容器详细信息 docker inspect [容器ID/名称]示例:docker inspect httpd2 输出 JSON 格式详情,包括创建时间、使用镜像、端口映射、网络配置等核心信息

(三)部署 Web 服务器(以 Nginx 为例)

步骤 1:获取 Nginx 镜像
  • 搜索镜像:docker search nginx(查看 Docker Hub 上的 Nginx 镜像,优先选择 "OFFICIAL" 官方镜像)
  • 拉取镜像:docker pull nginx(默认拉取latest标签的最新版本)
步骤 2:基础启动(默认配置)
  • 命令:docker run --name nginx-test -p 80:80 -itd nginx:latest
  • 效果:容器启动后,外部通过 "宿主机 IP:80" 访问 Nginx 默认页面("Welcome to nginx!")
步骤 3:自定义配置(数据卷挂载)

为实现 "配置持久化" 和 "数据共享",通过-v参数挂载宿主机目录到容器:

  1. 创建宿主机目录:mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf(分别对应 Nginx 的网页目录、日志目录、配置目录)

  2. 拷贝容器默认配置到宿主机:docker cp [容器ID]:/etc/nginx/nginx.conf ~/nginx/conf/(如docker cp 1552cf50adc8:/etc/nginx/nginx.conf ~/nginx/conf/

  3. 启动自定义容器:

    bash 复制代码
    docker run -itd -p 20000:80 --name nginx-test-1 \
    -v ~/nginx/www:/usr/share/nginx/html \  # 网页目录挂载
    -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \  # 配置文件挂载
    -v ~/nginx/logs:/var/log/nginx \  # 日志目录挂载
    nginx:latest
  4. 自定义网页访问:在~/nginx/www目录下创建index.html(如内容 "welcome to luoqi!!!"),外部通过 "宿主机 IP:20000" 访问自定义页面

(四)其他实用命令

命令用途 命令及示例 说明
复制文件(本地 - 容器) docker container cp [本地路径] [容器ID/名称]:[容器路径]示例:docker container cp data d5e5e991b5dc:/tmp 支持本地文件 / 目录复制到容器,反之亦然(容器→本地)。
查看容器内文件变更 docker container diff [容器ID/名称]示例:docker container diff d5e5e991b5dc 显示容器创建后新增、修改、删除的文件列表。
查看容器端口映射详情 docker container port [容器ID/名称]示例:docker container port d5e5e991b5dc 快速查看容器端口与宿主机端口的映射关系。

四、核心注意事项

  1. 容器生命周期关联 :容器的运行依赖内部应用进程,应用退出(如exit关闭bash)则容器自动停止
  2. 进入容器推荐方式 :优先用docker exec,避免docker attach(退出会停止容器)
  3. 容器删除限制 :默认仅能删除 "Exited" 状态容器,运行中容器需先stop或加-f强制删除
  4. 外部访问前提 :容器服务需通过-P/-p映射端口到宿主机,外部才能通过 "宿主机 IP: 端口" 访问
  5. 数据持久化 :部署服务时(如 Nginx),通过-v挂载宿主机目录,避免容器删除后配置、日志、网页数据丢失

docker容器相关操作:

创建容器:

create

可以使用docker create创建一个容器,创建后,可以通过docker ps或者docker ps -a命令进行查看

复制代码
[root@docker ~]# docker create -it centos:7
bd6349204aa76bc9bdabff0aed1a458e612a292a4a291e915877adb2ae980173
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS    PORTS     NAMES
bd6349204aa7   centos:7   "/bin/bash"   10 seconds ago   Created             clever_shamir

命令参数使用说明:

create:创建容器

-i: 让容器的标准输入保持打开

-t: 分配一个伪终端并绑定到容器的标准输入上

启动容器:

start

使用docker create 命令新建的容器处于停止状态,可以使用docker start命令来启动它

复制代码
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS    PORTS     NAMES
bd6349204aa7   centos:7   "/bin/bash"   10 seconds ago   Created             clever_shamir
[root@docker ~]# docker start bd6349204aa7
bd6349204aa7
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS         PORTS     NAMES
bd6349204aa7   centos:7   "/bin/bash"   About a minute ago   Up 5 seconds             clever_shamir

当退出容器后,容器就自动停止,可以使用Docker ps -a查看容器的up/down

复制代码
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS              PORTS     NAMES
bd6349204aa7   centos:7   "/bin/bash"   2 minutes ago   Up About a minute             clever_shamir

运行容器

run

除了创建容器后通过start命令来启动,也可以直接新建并启动容器。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。下面的命令启动一个bash终端,运行用户进行交互

复制代码
[root@docker ~]# docker run -it centos:7 /bin/bash
[root@6260fbe44a84 /]# 

对于创建的bash容器,当用户使用exit命令退出bash进程之后,容器也会自动退出。这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要了

复制代码
[root@docker ~]# docker run -it centos:7 /bin/bash
[root@1f9c6a2838cc /]# exit
exit
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS                        PORTS     NAMES
1f9c6a2838cc   centos:7   "/bin/bash"   24 seconds ago       Exited (0) 15 seconds ago               jolly_gauss
6260fbe44a84   centos:7   "/bin/bash"   About a minute ago   Exited (127) 40 seconds ago             gracious_brown
bd6349204aa7   centos:7   "/bin/bash"   5 minutes ago        Up 4 minutes                            clever_shamir

停止容器:

可以使用docker pause 命令来暂停一个运行中的容器

复制代码
[root@docker ~]# docker run -itd centos:7 /bin/bash
3f78420bdd4051f91a31e00bba02a5d38fd889ba98553a14f78d32f1faea233c
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
3f78420bdd40   centos:7   "/bin/bash"   7 seconds ago   Up 6 seconds             focused_clarke
[root@docker ~]# docker pause 3f78420bdd40
3f78420bdd40
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS                  PORTS     NAMES
3f78420bdd40   centos:7   "/bin/bash"   2 minutes ago   Up 2 minutes (Paused)             focused_clarke

停止容器

处于paused状态的容器,可以使用docker unpause命令来恢复到运行状态

复制代码
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS                  PORTS     NAMES
3f78420bdd40   centos:7   "/bin/bash"   5 minutes ago   Up 5 minutes (Paused)             focused_clarke
[root@docker ~]# docker unpause 3f78420bdd40
3f78420bdd40
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
3f78420bdd40   centos:7   "/bin/bash"   6 minutes ago   Up 6 minutes             focused_clarke

停止容器

可以使用docker stop来终止一个运行中的容器

复制代码
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
3f78420bdd40   centos:7   "/bin/bash"   6 minutes ago   Up 6 minutes             focused_clarke
[root@docker ~]# docker stop 3f78420bdd40
3f78420bdd40
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                            PORTS     NAMES
3f78420bdd40   centos:7   "/bin/bash"   15 minutes ago   Exited (137) About a minute ago             focused_clarke
53f717e0761a   centos:7   "/bin/bash"   16 minutes ago   Exited (0) 15 minutes ago                   clever_swanson
a65794347551   centos:7   "/bin/bash"   20 minutes ago   Exited (0) 19 minutes ago                   recursing_bohr
1f9c6a2838cc   centos:7   "/bin/bash"   15 hours ago     Exited (0) 15 hours ago                     jolly_gauss
6260fbe44a84   centos:7   "/bin/bash"   15 hours ago     Exited (127) 15 hours ago                   gracious_brown
bd6349204aa7   centos:7   "/bin/bash"   15 hours ago     Exited (137) 15 hours ago                   clever_shamir

此时,执行docker container prune命令,会自动清除掉所有处于停止状态的容器

复制代码
[root@docker ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
3f78420bdd4051f91a31e00bba02a5d38fd889ba98553a14f78d32f1faea233c
53f717e0761a03f5b90388f6e5ba7b2eb1e9a0721000734a472c76c602e79dd1
a657943475515505a0a7a73c8becf135820ada5a18e5ab8cf0fbc9b10ac8b4b1
1f9c6a2838ccfbd3d1f9f4e8e923244b3659f83b43200afda003c55f5fd676f6
6260fbe44a84d2cc60132c389a76789a90ae651f6f0b01ec043971ce0b695aa7
bd6349204aa76bc9bdabff0aed1a458e612a292a4a291e915877adb2ae980173

Total reclaimed space: 25B
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

进入容器

在使用-d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach:不建议大家使用docker attach,因为退出容器终端,会导致容器的停止

docker exec:推荐大家使用docker exec命令,因为退出容器终端,不会导致容器的停止

进入容器

exec

下面演示了使用 docker exec 命令

复制代码
[root@docker ~]# docker run -itd --name httpd httpd:latest /bin/bash
1c4494cfc5b407584dfeb9ad1626e94adc421949aeb2c20214e466c768f89ac9
[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND              CREATED         STATUS         PORTS     NAMES
1c4494cfc5b4   httpd:latest   "/bin/bash"          4 seconds ago   Up 4 seconds   80/tcp    httpd
b00ba5704eca   httpd:latest   "httpd-foreground"   2 minutes ago   Up 2 minutes   80/tcp    practical_allen
[root@docker ~]# docker exec -it httpd /bin/bash
root@1c4494cfc5b4:/usr/local/apache2# exit
exit
[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND              CREATED              STATUS              PORTS     NAMES
1c4494cfc5b4   httpd:latest   "/bin/bash"          About a minute ago   Up About a minute   80/tcp    httpd
b00ba5704eca   httpd:latest   "httpd-foreground"   3 minutes ago        Up 3 minutes        80/tcp    practical_allen

删除容器

删除容器使用docker rm命令,只能删除停止的容器

复制代码
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS                     PORTS     NAMES
907d3a736a56   httpd:latest   "httpd-foreground"   8 minutes ago    Exited (0) 8 minutes ago             quizzical_ellis
0b94a0d6412a   httpd:latest   "httpd-foreground"   9 minutes ago    Up 9 minutes               80/tcp    unruffled_booth
b00ba5704eca   httpd:latest   "httpd-foreground"   22 minutes ago   Up 22 minutes              80/tcp    practical_allen
bec6a7859ca0   httpd:latest   "httpd-foreground"   24 minutes ago   Created                              hopeful_torvalds
[root@docker ~]# docker stop httpd
httpd
[root@docker ~]# docker rm 907d3a736a56
907d3a736a56
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS          PORTS     NAMES
0b94a0d6412a   httpd:latest   "httpd-foreground"   11 minutes ago   Up 11 minutes   80/tcp    unruffled_booth
b00ba5704eca   httpd:latest   "httpd-foreground"   24 minutes ago   Up 24 minutes   80/tcp    practical_allen
bec6a7859ca0   httpd:latest   "httpd-foreground"   25 minutes ago   Created                   hopeful_torvalds

删除容器

默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。如果要直接删除一个运行中的容器,可以添加-f参数

复制代码
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS          PORTS     NAMES
0b94a0d6412a   httpd:latest   "httpd-foreground"   17 minutes ago   Up 17 minutes   80/tcp    unruffled_booth
bec6a7859ca0   httpd:latest   "httpd-foreground"   32 minutes ago   Created                   hopeful_torvalds
[root@docker ~]# docker rm 0b94a0d6412a
Error response from daemon: cannot remove container "/unruffled_booth": container is running: stop the container before removing or force remove
[root@docker ~]# docker rm 0b94a0d6412a -f
0b94a0d6412a
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND              CREATED          STATUS    PORTS     NAMES
bec6a7859ca0   httpd:latest   "httpd-foreground"   33 minutes ago   Created             hopeful_torvalds

导入和导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用docker的导入和导出功能,这也是docker自身提供的一个重要特性

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令。"-o"选项也可以重定向">"来代替

docker export 导出容器:

复制代码
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
d3262bc89243   centos:7   "/bin/bash"   3 minutes ago   Up 3 minutes             sy
[root@docker ~]# docker export -o centos.tar.gz sy
[root@docker ~]# ls
anaconda-ks.cfg  Desktop    Downloads             Music     Public     Videos
centos.tar.gz    Documents  initial-setup-ks.cfg  Pictures  Templates

导入容器

docker import导入容器

导入容器,导出的文件又可以使用docker import命令导入变成镜像

复制代码
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
d3262bc89243   centos:7   "/bin/bash"   5 minutes ago   Up 5 minutes             sy
[root@docker ~]# docker rm sy -f
sy
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker ~]# docker import centos.tar.gz luoqi:v1
sha256:e80543456e0c73bb37fa531203a97ab0a2d5fbd124a1731dc7f7a5ce3059003a
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
luoqi        v1        e80543456e0c   8 seconds ago   204MB
httpd        latest    2416cb32cb59   7 weeks ago     117MB
httpd        sysy      2416cb32cb59   7 weeks ago     117MB
centos       7         eeb6ee3f44bd   4 years ago     204MB
[root@docker ~]# docker history luoqi:v1 
IMAGE          CREATED          CREATED BY   SIZE      COMMENT
e80543456e0c   24 seconds ago                204MB     Imported from -

容器端口映射

映射随机端口

当我们启动一个web容器的时候,可以将容器的端口映射宿主机上面,这样便于我们访问该web服务器。-P参数将容器内部使用的80端口映射到宿主机的随机端口上来

复制代码
[root@docker ~]# docker run --name httpd -itd -P httpd:latest
e41a3cc5b123f1f1c4346ceeea102b996af04887824e16e2cd0b4e012996f9b8
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                    PORTS                                     NAMES
e41a3cc5b123   httpd:latest   "httpd-foreground"       5 seconds ago   Up 4 seconds              0.0.0.0:32768->80/tcp, :::32768->80/tcp   httpd
a1bc933b72c7   nginx:latest   "/docker-entrypoint...."   8 days ago      Exited (0) 8 days ago                                               synginx
da22873c55b4   luoqi:v1       "/bin/bash"              8 days ago      Exited (137) 8 days ago                                             luoqi
bec6a7859ca0   httpd:latest   "httpd-foreground"       8 days ago      Created                                                             hopeful_torvalds

容器端口映射

这时使用web浏览器访问宿主机的32768端口

容器端口映射

映射指定端口

我们也可以通过-p参数将容器内的80端口映射到宿主机的指定端口上:

复制代码
[root@docker ~]# docker run --name httpd2 -itd -p 8080:80 httpd:latest
f64537ff2e5da5ba6859447d3bf364246a719ff77428a5c7f8823c74fac1eb72
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                    PORTS                                     NAMES
f64537ff2e5d   httpd:latest   "httpd-foreground"       7 seconds ago   Up 6 seconds              0.0.0.0:8080->80/tcp, :::8080->80/tcp     httpd2
e41a3cc5b123   httpd:latest   "httpd-foreground"       2 minutes ago   Up 2 minutes              0.0.0.0:32768->80/tcp, :::32768->80/tcp   httpd
a1bc933b72c7   nginx:latest   "/docker-entrypoint...."   8 days ago      Exited (0) 8 days ago                                               synginx
da22873c55b4   luoqi:v1       "/bin/bash"              8 days ago      Exited (137) 8 days ago                                             luoqi
bec6a7859ca0   httpd:latest   "httpd-foreground"       8 days ago      Created                                                             hopeful_torvalds

查看容器日志

可以使用docker logs查看容器的日志信息,例如:我们想要查看httpd2容器的访问日志,除了可以

查看访问日志以外,只要是该容器产生的日志都会显示出来,包括服务的启动/关闭之类的

复制代码
[root@docker ~]# docker logs httpd2
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
[Wed Oct 08 09:58:49.414618 2025] [mpm_event:notice] [pid 1:tid 1] AH00489: Apache/2.4.65 (Unix) configured -- resuming normal operations
[Wed Oct 08 09:58:49.414755 2025] [core:notice] [pid 1:tid 1] AH00094: Command line: 'httpd -D FOREGROUND'
192.168.100.1 - - [08/Oct/2025:09:59:21 +0000] "GET / HTTP/1.1" 200 45
192.168.100.1 - - [08/Oct/2025:09:59:21 +0000] "GET /favicon.ico HTTP/1.1" 404 196

查看容器详细信息

可以使用docker inspect查看容器的详细信息,例如:我们想要查看httpd2容器详细信息,会显

示,容器是什么时候创建的,使用的什么镜像,容器端口号,使用的什么网络等等

复制代码
[root@docker ~]# docker inspect httpd2
[
    {
        "Id": "f64537ff2e5da5ba6859447d3bf364246a719ff77428a5c7f8823c74fac1eb72",
        "Created": "2025-10-08T09:58:48.833060661Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
.......

docker容器部署WEB服务器

查找Docker Hub上的nginx镜像

复制代码
[root@docker ~]# docker search nginx

获取镜像:

复制代码
[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8c7716127147: Already exists 
250b90fb2b9a: Pull complete 
5d8ea9f4c626: Pull complete 
58d144c4badd: Pull complete 
b459da543435: Pull complete 
8da8ed3552af: Pull complete 
54e822d8ee0c: Pull complete 
Digest: sha256:f79cde317d4d172a392978344034eed6dff5728a8e6d7a42f507504c23ecf8b8
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    07ccdb783875   13 hours ago   160MB

docker容器部署WEB服务器

使用默认的配置来启动一个nginx容器实例

复制代码
[root@docker ~]# docker run --name nginx-test -p 80:80 -itd nginx:latest
0167cfe2e7af972ea2b761b656b9c6bee6175ae540af085adfb4c86e5478b4f0
[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                     NAMES
0167cfe2e7af   nginx:latest   "/docker-entrypoint...."   4 seconds ago    Up 3 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp         nginx-test
f64537ff2e5d   httpd:latest   "httpd-foreground"       11 minutes ago   Up 11 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp     httpd2
e41a3cc5b123   httpd:latest   "httpd-foreground"       13 minutes ago   Up 13 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp   httpd

目前nginx容器已经启动,并映射到宿主机的80端口,可以打开浏览器访问此地址

docker容器部署WEB服务器

nginx部署

创建目录,用于存放映射数据。其中www目录将映射为nginx容器配置的虚拟目录;logs目录将映射为

nginx容器的日志目录;conf目录里的配置文件将映射为nginx容器的配置文件

复制代码
[root@docker ~]# mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

拷贝容器内nginx默认配置文件到本地当前目录下的conf目录,容器ID可以通过docker ps命令查看

复制代码
[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                     NAMES
0167cfe2e7af   nginx:latest   "/docker-entrypoint...."   3 minutes ago    Up 3 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp         nginx-test
f64537ff2e5d   httpd:latest   "httpd-foreground"       14 minutes ago   Up 14 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp     httpd2
e41a3cc5b123   httpd:latest   "httpd-foreground"       17 minutes ago   Up 17 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp   httpd
[root@docker ~]# docker cp 0167cfe2e7af:/etc/nginx/nginx.conf ~/nginx/conf/
Successfully copied 2.56kB to /root/nginx/conf/

docker容器部署WEB服务器

部署容器命令。下面选项的解释:

-p:将主机端口20000映射到容器的80端口上

--name: 容器名字

-v:~/nginx/www:/usr/share/nginx/html 将我们自己创建的www目录挂载到容器d的/usr/share/nginx/html

-v:~/nginx/conf /nginx.conf: /etc/nginx/nginx.conf 将我们自己创建的nginx.conf挂载到容器的

/etc/nginx/nginx.conf

-v:~/nginx/logs:/var/log/nginx 将我们自己创建的logs挂载到容器的/var/log/nginx

复制代码
[root@docker ~]# docker run -itd -p 20000:80 --name nginx -test-1 -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx:latest
0731c685a98911ed0c49bc184bb59b96a099fe8d306a9b650d42ca469de20507
[root@docker ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                     NAMES
0731c685a989   nginx:latest   "/docker-entrypoint...."   7 seconds ago    Up 6 seconds    0.0.0.0:20000->80/tcp, :::20000->80/tcp   nginx
0167cfe2e7af   nginx:latest   "/docker-entrypoint...."   7 minutes ago    Up 7 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp         nginx-test

docker容器部署WEB服务器

创建自己的网页,并访问:

复制代码
[root@docker ~]# cd ~/nginx/www/
[root@docker www]# vim index.html
welcome to luoqi!!!
~ 

使用浏览器进行访问:

其他容器命令

docker container cp 复制文件

例如,将 本地的路径 data 复制到 centos 容器的/tmp 路径下:

复制代码
[root@docker ~]# docker container cp data 0731c685a989:/tmp

docker container diff 查看变更:

例如,查看 0731c685a989 容器内的数据修改

复制代码
[root@docker ~]# docker container diff 0731c685a989

docker container port 查看端口映射

复制代码
[root@docker ~]# docker container port 0731c685a989
80/tcp -> 0.0.0.0:20000
80/tcp -> [::]:20000

总结

1、容器隔离的最重要方面之一是每个容器都与自己的专用文件系统进行交互

2、使用docker create 命令新建的容器处于停止状态,可以使用docker start命令来启动它

3、不建议大家使用docker attach,因为退出容器终端,会导致容器的停止;推荐大家使用docker exec命令,因为退出容器终端,不会导致容器的停止

4、docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。如果要直接删除一个运行中的容器,可以添加-f参数

5、需要将容器从一个系统迁移到另外一个系统,此时可以使用docker的导入和导出功能,这也是docker自身提供的一个重要特性

6、当我们启动一个web容器的时候,可以将容器的端口映射宿主机上面,这样便于我们访问该web服务器

7、镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等

8、如果外部想访问容器所提供的服务,那么就需要将容器的端口映射到宿主机上

9、删除容器时,一定要保证容器出入停止状态

10、docker 子命令run、exec、stop、rm、start、cp等熟练使用

相关推荐
罗技1233 小时前
Docker 启动 Easysearch 时自定义初始密码的几种方式
运维·docker·容器
码路工人4 小时前
附录B:kubectl 命令速查表 - Kubernetes 集群管理必备指南
docker·云原生·容器
码路工人4 小时前
附录A:常用 Docker 命令速查表
docker·云原生·容器
love530love5 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
zcz16071278216 小时前
Docker Compose 搭建 LNMP 环境并部署 WordPress 论坛
android·adb·docker
java之迷13 小时前
Windows环境下,源码启动+本地部署和启动开源项目Ragflow失败SRE模块
windows·docker·开源
致宏Rex15 小时前
Docker 实战教程(7) | 镜像管理和仓库操作
运维·docker·容器
罗技12315 小时前
不用每次都改 `easysearch.yml` 也能改启动参数 —— 用 Docker 环境变量搞定一切
docker·容器·eureka
落日漫游16 小时前
Kubernetes容器运行时:cri-docker vs containerd
docker·kubernetes