第六章 九析带你轻松完爆 Docker - 容器篇

网友投稿 277 2022-10-29

第六章 九析带你轻松完爆 Docker - 容器篇

系列文章:总目录索引:九析带你轻松完爆 Docker 系列

目录

1 前言

2 容器隔离

3 容器创建

4 容器操作

4.1 登录容器

4.2 执行容器命令

4.3 复制文件到容器内部

4.4 查看容器日志

1 前言

如果你对博客有任何疑问,请告诉我。

2 容器隔离

处于运行状态的 Docker 容器,其实就是一个受到隔离和资源限制的 Linux 进程,Docker 通过Linux Namespace 技术实现了容器隔离,本文先对 Linux Namespace 技术做一个简单的介绍。Linux Namespace 隔离类型分为:Cgroup、IPC、Network、Mount、PID、User、UTS,分别对进程的Cgroup root、进程间通信、网络、文件系统挂载点、进程 ID、用户和组、主机名域名进行隔离。下面以 PID Namespace 为例讲解一下容器隔离。

启动一个容器:

docker run -it alpine:3.7 sh

查看容器内 PID:

# 该命令在容器内执行ps -ef

执行结果:

查看宿主机PID

# 该命令在宿主机执行ps -ef | grep alpine

执行结果:

在 Docker 容器启动时执行了 sh 命令,从上面的示例中可以看到,sh 命令在这个容器内部的 PID=1,而这个 Docker 容器在宿主机的 PID=3430,这就意味着,Docke r容器执行的 sh 命令,已经被 Docker 隔离在了一个跟宿主机无关的环境中,这就是 Docker 在启动一个容器时使用了 PID namespace。

3 容器创建

容器创建通过执行 docker run 命令实现,docker run 命令参数较多,下面介绍几个常用的参数:

-d:容器在后台运行-i -t:这两参数通常一起使用,容器运行在控制台--name=<容器名>, 指定容器名,可以通过容器名对容器进行管理-p <宿主机端口>:<容器内部端口>:将宿主机端口映射到容器内部端口,-p 参数可以配置多次,实现多个端口的映射-v <宿主机目录或文件>:<容器内部目录或文件>:将宿主机目录或文件挂载到容器内部,-v 参数可以配置多次,实现多个目录或文件的挂载-e <环境变量>:指定环境变量,容器中可以使用该环境变量--restart=<重启策略>:指定容器停止后的重启策略,no 表示容器退出时不重启,on-failure 表示容器故障退出时重启,always 表示容器退出时总是重启

下面给大家展示一个完整的 docker run 命令:

docker run -i -t --name=alpine -p 8080:80 -v /opt/data:/root -e "GOPATH=/opt/go" --restart="no" alpine:3.7 sh

执行结果:

本示例中,容器虽然做了端口映射,但因 alpine 镜像未暴露 80 端口,所以该端口映射为无效映射。在配置端口映射前,需要确认好容器内部暴露的端口情况,以及宿主机端口是否被占用。在进行目录挂载操作前,需要确认宿主机目录是否存在,如宿主机目录不存在,该挂载操作无效,当容器内部目录不存在时,目录会自动创建。

使用 -i -t 参数启动的容器,会占用当前操作控制台,当前操作控制台退出后,容器也停止运行,所以在生产环境中,容器创建时一定要使用 -d 参数,确保容器在后台稳定运行。

如果你只想一次性地执行容器内的命令,并不想真正的去启动容器,可以不加 -d -i -t 参数,直接执行容器创建命令。

docker run alpine:3.7 ls /

执行结果:

4 容器操作

容器运行后,可通过命令方式对容器进行操作,常见的容器操作有以下几种:登录容器、执行容器命令、复制文件到容器内部、查看容器日志。

4.1 登录容器

登录容器使用 docker exec 命令。登录容器是为了通过控制台对容器进行操作,所以必须带 -i -t 参数。

docker exec -it centos /bin/bash

当你登录客户端类的容器时,你可以通过 -e 参数设置容器环境变量,达到诸如用户切换、服务端变更等目的。

docker exec -it -e "GOPATH=/root/go" client /bin/bash

4.2 执行容器命令

执行容器命令使用 docker exec 命令。通过 docker exec 执行容器命令跟通过 docker run 一样,都不需要带 -d -i -t 参数。

docker exec centos ls /

当你需要在客户端类容器内执行命令时,也可以通过 -e 参数设置容器环境变量。

docker exec -e "GOPATH=/root/go" centos ls /

4.3 复制文件到容器内部

容器启动后,有两种方式将宿主机文件复制到容器内部,一种是通过目录挂载,另外一种是通过 docker cp 命令。目录挂载方式存在一定的局限性,只能在容器创建时执行,如果容器已经处于运行状态,则只能通过 docker cp 命令进行复制。

docker cp /root/file1 centos:/root/

4.4 查看容器日志

容器启动后,我们可以通过 docker logs 命令查看容器日志。

docker logs application

如果我们需要对日志进行持续追踪,可以通过 docker logs -f 命令查看,效果与 tail -f 命令相同。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring的跨域的几个方案
下一篇:ZedBoard上的点灯签名实验(六)驱动开机自启动及OLED签名
相关文章

 发表评论

暂时没有评论,来抢沙发吧~