Docker 容器操作

一、容器基本概念

  • 容器本质:一个运行中的进程,具有隔离性
  • 隔离核心:每个容器拥有独立的文件系统,由 Docker 镜像提供
  • 镜像内容:应用程序代码、运行时依赖、文件系统对象等

二、容器相关操作

1、创建容器
  • -i:保持标准输入打开
  • -t:分配伪终端
[root@docker ~]# docker create -it centos:7
[root@docker ~]# docker ps
# 显示当前系统正在运行的容器
[root@docker ~]# docker ps -a
# 显示系统中所有容器(包括没有运行的)

在这里插入图片描述

CONTAINER ID:容器ID号

IMAGE:容器依赖的镜像

COMMAND:容器中运行的命令

CREATED:创建时间

STATUS:创建的状态信息

PORTS:端口

NAMES:容器的名称

2、启动容器

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

[root@docker ~]# docker start b8a3087515cd
[root@docker ~]# docker ps

在这里插入图片描述

3、运行容器

除了创建容器后通过 start 命令来启动,也可以直接新建并启动容器

等价于先执行 docker create 命令,再执行 docker start 命令

[root@docker ~]# docker run -it centos:7 
[root@d4de123a025a /]# exit

在这里插入图片描述

在这里插入图片描述

对于创建的bash容器,当用户使用exit命令退出bash进程之后,容器也会自动退出

这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要了

4、停止容器

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

[root@docker ~]# docker pause b8a3087515cd

在这里插入图片描述

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

[root@docker ~]# docker unpause b8a3087515cd

在这里插入图片描述

可以使用 docker stop 来终止一个运行中的容器
[root@docker ~]# docker stop great_visvesvaraya

在这里插入图片描述

执行 docker container prune 命令,会自动清除掉所有处于停止状态的容器
[root@docker ~]# docker container prune

在这里插入图片描述

5、进入容器

在使用-d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
docker attach:不建议大家使用docker attach,因为退出容器终端,会导致容器的停止
docker exec:推荐大家使用docker exec命令,因为退出容器终端,不会导致容器的停止

[root@docker ~]# docker attach mycentos1
[root@docker ~]# docker exec -it mycentos2 /bin/bash

在这里插入图片描述

6、删除容器

默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器

如果要直接删除一个运行中的容器,可以添加-f参数

[root@docker ~]# docker rm -f httpd

在这里插入图片描述

7、导出容器

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

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

[root@docker ~]# docker export -o centos7.tar.gz mycentos1

在这里插入图片描述

8、导入容器

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

[root@docker ~]# docker import centos7.tar.gz mycs7:v1
# 导入镜像
[root@docker ~]# docker run -itd --name mycentos mycs7:v1 /bin/bash
# 创建容器

在这里插入图片描述

三、容器相关运用

1、容器端口映射
映射随机端口

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

-P 参数将容器内部使用的80端口映射到宿主机的随机端口上来

[root@docker ~]# docker run --name httpd -itd -P httpd:latest

在这里插入图片描述

在这里插入图片描述

映射指定端口

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

[root@docker ~]# docker run --name httpd2 -itd -p 8080:80 httpd:latest

在这里插入图片描述

在这里插入图片描述

2、查看容器日志

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

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

[root@docker ~]# docker logs httpd2

在这里插入图片描述

3、查看容器详细信息

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

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

[root@docker ~]# docker inspect httpd2

在这里插入图片描述

四、容器部署 WEB 服务器示例

1、获取镜像
[root@docker ~]# docker pull nginx
2、使用默认的配置来启动一个nginx容器实例
[root@docker ~]# docker run -itd --name nginx-t -p 80:80 nginx:latest
3、打开浏览器访问此地址

在这里插入图片描述

4、nginx部署
[root@docker ~]# mkdir -p /root/nginx/www
[root@docker ~]# mkdir -p /root/nginx/logs
[root@docker ~]# mkdir -p /root/nginx/conf
5、拷贝容器内nginx默认配置文件到本地当前目录下的conf目录
[root@docker ~]# docker cp cde960294046:/etc/nginx/nginx.conf /root/nginx/conf/
6、部署容器命令
[root@docker ~]# docker run -itd -p 8888:80 --name nginx-tt -v /root/nginx/www/:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs/:/var/log/nginx nginx:latest
7、创建自己的网页
[root@docker ~]# cd /root/nginx/www/
[root@docker www]# echo "wiltjer" > index.html
8、使用浏览器进行访问

在这里插入图片描述

五、其他容器命令

1、复制文件
docker container cp
2、查看变更
docker container diff
3、查看端口映射
docker container port

六、总结

  1. 容器拥有独立文件系统,由镜像提供
  2. create 创建停止状态的容器,start 启动
  3. 使用 exec 进入容器,避免使用 attach
  4. 删除容器前需确保其已停止(或使用 -f
  5. 使用 export/import 迁移容器
  6. 端口映射便于外部访问容器服务
  7. 镜像是静态定义,容器是运行实例
  8. 熟练使用 run, exec, stop, rm, start, cp 等命令
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐