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
参数挂载宿主机目录到容器:
-
创建宿主机目录:
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
(分别对应 Nginx 的网页目录、日志目录、配置目录) -
拷贝容器默认配置到宿主机:
docker cp [容器ID]:/etc/nginx/nginx.conf ~/nginx/conf/
(如docker cp 1552cf50adc8:/etc/nginx/nginx.conf ~/nginx/conf/
) -
启动自定义容器:
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
-
自定义网页访问:在
~/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 | 快速查看容器端口与宿主机端口的映射关系。 |
四、核心注意事项
- 容器生命周期关联:容器的运行依赖内部应用进程,应用退出(如
exit
关闭bash
)则容器自动停止 - 进入容器推荐方式:优先用
docker exec
,避免docker attach
(退出会停止容器) - 容器删除限制:默认仅能删除 “Exited” 状态容器,运行中容器需先
stop
或加-f
强制删除 - 外部访问前提:容器服务需通过
-P
/-p
映射端口到宿主机,外部才能通过 “宿主机 IP: 端口” 访问 - 数据持久化:部署服务时(如 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
bd6349204aa76bc9bdabff0aed1a458e612a292a4a291e915877adb2ae980173Total 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等熟练使用