1、Docker容器是什么
简单来说,Docker容器是Docker镜像的一个运行实例。所不同的是,Docker镜像是静态的只读文件,而Docker容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。
如果说虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用。那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。
本章博客将具体介绍围绕容器的重要操作,包括创建一个容器、启动容器、终止一个容器、进入容器内执行操作、删除容器和通过导入导出容器来实现容器迁移等。
2、Docker容器的启动流程
通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的 镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会 下载到本地并启动,如果镜像中心也没有,则直接报错。
3、容器命令实践
3.1、创建容器
命令:docker create … ;此命令只会创建一个容器并不会启动容器。以下是以创建redis容器为例
以上只是最简单的方式创建容器,此命令有很多选项大致分为如下几类:与容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关
- create命令与容器运行模式相关的选项
- create命令与容器环境和配置相关的选项
- create命令与容器资源限制和安全保护相关的选项
3.2、启动容器
docker start 容器ID
3.3、创建并运行容器
创建并运行容器有两种模式:
- 交互模式
创建并运行容器,并且进入容器内部
–name 指定当前容器名称为 myredis
-it 指定以交互模式运行容器,且为容器分配一个伪终端。
后面的/bin/bash 用于指定容器启动后需要运行的命令为/bin 下的 bash 命令,而该命令 会启动一个 bash 终端。
我们在这里运行了一个redis的容器,并为其取名为myredis。另外我们可以注意到,命令行前面提示部分内容发
生了变化:原来显示的是[root@qzxdp_centos01 ~],而现在变为了root@913f9ea542ac,这个就是 docker 生成的
伪客户端,而数字 913f9ea542ac 表示的是 docker 容器的 ID。
以交互模式运行tomcat
下面也是以交互模式运行 tomcat 容器,不同的是,该命令后没有/bin/bash,此时会真 正启动 tomcat。
报错处理
[root@qzxdp_centos01 ~]# docker run –name tomcat8 -it -p 8888:8080 tomcat:8.0
docker: Error response from daemon: Conflict. The container name “/tomcat8” is already in use by container “00a63e2528c713c906f3b8e67843b5633d6fd969a05a4b47485f1338156b869e”. You have to remove (or rename) that container to be able to reuse that name.
See ‘docker run –help’.
是因为此容器名已存在,需要先删除历史或者更换容器名
# 查看所有容器
[root@qzxdp_centos01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00a63e2528c7 tomcat:8.0 “/bin/bash” 5 minutes ago Exited (0) About a minute ago tomcat8
[root@qzxdp_centos01 ~]#
# 通过容器ID删除指定容器
[root@qzxdp_centos01 ~]# docker rm 00a63e2528c7
00a63e2528c7
[root@qzxdp_centos01 ~]#
# 再次查看所有容器,已删除
[root@qzxdp_centos01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@qzxdp_centos01 ~]#
-p 用于指定端口映射,格式为 暴露给宿主机的端口:容器中应用的端口 回车后会发现 tomcat 已启动,且 tomcat 的日志输出占居了命令行。
此时在浏览器中通过 8888 端口可以访问到 tomcat。
- 分离模式
创建并运行容器,返回容器ID,不进入容器内门,用 -d 参数
3.3、容器退出
容器退出分两种方式:
- 退出并停止容器 命令: exit 或者 ctrl+c
# 启动并进入容器
[root@qzxdp_centos01 ~]# docker run -it --name tomcat8 -p 8080:8080 tomcat:8.0
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /docker-java-home/jre
# ctrl + c 退出并停止容器
# 退出后查询 容器状态 已终止
[root@qzxdp_centos01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d9f3bffefdf tomcat:8.0 "catalina.sh run" 36 seconds ago Exited (130) 25 seconds ago tomcat8
[root@qzxdp_centos01 ~]#
- 退出不停止容器 命令:ctrl+p+q
# 启动并进入容器
[root@qzxdp_centos01 ~]# docker run -it --name tomcat8 -p 8080:8080 tomcat:8.0
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /docker-java-home/jre
# ctrl + q + q 退出不停止容器
# 退出后查询 容器状态 运行中
[root@qzxdp_centos01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9093a6319966 tomcat:8.0 "catalina.sh run" 13 seconds ago Up 13 seconds 0.0.0.0:8888->8080/tcp, :::8888->8080/tcp tomcat8
[root@qzxdp_centos01 ~]#
3.4、停止容器
- 暂停容器
可以使用docker pause 容器名称或者容器ID 多个以空格间隔 命令来暂停一个运行中的容器。
可以通过docker unpause 容器名称或者容器ID 多个以空格间隔 命令来恢复暂停中的容器。
- 终止容器
通过 docker kill 命令可以强制停止指定容器。所谓强制停止是指,无论容器当前是否被其它进程访问都直接停止。
- 优雅停止 stop
通过 docker stop 命令可以优雅停止指定容器。所谓优雅停止是指,若当前容器正在被其它进程访问,则在访问结束后再停止。
- 停止所有容器
无论是 docker kill 还是 docker stop,都可使用下面方式停止所有容器。因为这两个命令的参数都可以是容器 ID。
[root@qzxdp_centos01 ~]# docker stop $(docker ps -q)
9093a6319966
[root@qzxdp_centos01 ~]# docker kill $(docker ps -q)
9093a6319966
3.4、容器启动
- 启动已停止的容器
容器停止后可以通过 docker start 命令启动容器
- 重启正在运行中的容器
可以通过 docker restart 命令启动容器
3.5、进入容器
当我们以分离模式运行了一个容器,或以交互模式运行了一个容器,但容器内部执行的 命令占用了交互命令行,而此时我们又想进入到容器中对容器内部进行一些操作,此时就需 要用到 exec/attach 命令了。
注意,它们只能对正在运行的容器进行操作。
- 通过exec进入容器
- 通过attach进入容器
推荐使用exec进入容器
3.5、删除容器
删除容器,分两种方式:
- 正常删除
docker rm 命令在默认情况下,要删除的容器必须是已经停止的容器。当然,这个容器 可以使用容器名或容器 ID 指定。
- 强制删除
可以通过 docker rm -f 强制删除运行中的容器
3.7、查看容器
- 查看正在运行中的容器
docker ps 命令本身查看的是所有处于运行状态的容器信息。
- 查看所有容器
docker ps –a 用于查看所有容器,无论是否处于运行状态。
- 查看所有容器ID
docker ps –q 用于查看所有处于运行状态的容器的 ID。
docker ps –qa 用于查看所有容器的 ID。
- 查看最后创建的容器
docker ps –l 用于查看最后创建的容器,无论该容器是否处于运行状态。
- 查看最后创建的n个容器
docker ps –n 3 用于查看最后创建的指定个数的容器,无论该容器是否处于运行状态。
3.8、容器日志查看
docker logs [容器]可以查看指定容器中应用的运行日志,无论该容器是运行还是停止状态。
- 查看所有日志
docker logs 查看的是所有容器中应用的运行日志。这个日志对于不同的容器来说,其日 志内容是不同的。由 docker run 命令的[command]决定(如果没有则由 Dockerfile 中的 CMD 指令决定)。
如下为查询tomcat容器日志
如下为查询ubuntu容器日志
- 查看最后的日志
通过添加选项-n 可以指定要显示的最后几条日志。
- 查看指定时间内的日志
通过添加选项–since 可以指定要显示自从指定时间以来的日志。这个时间可以是一个绝对时间,也可以是一个相对时长。
下面使用的是绝对时间:显示自从2023年05月1日后产生日志的最后3条。
下面使用的是相对时长:显示自从 30 分钟之前产生日志中的最后 3 条。其中 m 表示分, 可以使用 s 表示秒,h 表示小时。
- 查看指定时间外的日志
通过添加选项–until 可以指定要显示截止到指定时间之前的日志。这个时间可以是一个绝对时间,也可以是一个相对时长。
下面使用的是绝对时间:显示截止到 2023 年 05 月 1 日前产生日志的最后 3 条。
下面使用的是相对时长:显示截止到 5 分钟之前产生日志中的最后 3 条。
- 查看日志时间戳
如果要查看某日志的详细时间戳,可以使用-t 选项。下面的命令查看的是最后 3 条日志的时间戳,并与不添加-t 的输出进行了对比。
- 查看动态日志
通过添加选项-f 可以查看运行中容器的动态日志。
3.9、容器内进程查看命令
docker top 命令用于查看指定的正在运行的容器中正在运行的进程详情,这个详情包括当前这个进程正在运行的命令。
暂无评论内容