时间:2020-03-06来源:电脑系统城作者:电脑系统城
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 命令相同。
2023-03-15
Navicat远程连接MongoDB最全实现方法以及报错解决2023-03-15
MongoDB的启动方法详细总结2023-03-11
详解分库分表后非分片键如何查询GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组,下面这篇文章主要给大家介绍了关于高版本Mysql使用group by分组报错的解决方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下...
2023-03-06